TMS320C2000处理器
2.1 TMS320C2000概述
C2000:32位微控制器,针对处理、传感和驱动进行优化以提高闭环性能的 32 位微控制器
- 专为实时控制而构建。
- 强大的处理能力
- 高级驱动
- 高精度传感
- 丰富的连接(用于整合系统的连接)
从串行接口(如 I2C、SPI、UART,甚至 McBSP)到协议(如 CAN 和 LIN)再到标准(如 USB 和以太网),C2000实时控制微控制器提供各种连接选项使应用彼此同步。
2.2 TMS320F28335内部结构
TMS320C2000系列DSP芯片采用改进的哈佛结构,其程序总线存储器和数据存储器分别独立,有各自的总线结构,并允许互访。
TMS320C2000系列DSP芯片有3个主要组成部分:*处理单元、存储器、片内外设。同一系列DSP都采用相同的*处理单元、总线结构和指令集。但片内存储器以及外设有所区别。
2.2.1 F28335 DSP的内核
CPU介绍
基于F28335 CPU + FPU 的控制器和 TI 现有的 F28x 具有相同的32位定点 CPU架构(减少对存储空间的占用),同时支持16位于32位的指令操作(加快指令的执行时间);
此外,F28335 的 CPU 还包括一个单精度(32位)的IEEE 754 浮点单元(FPU)。
F28335 的 CPU 还支持一种叫原子指令的读/写简化机制,可以在单个时钟周期内完成“读取-修改-写回”的操作。
原子指令是小的、通用的不可中断指令。
原子指令可以更快地完成读/写操作,并具有更小的代码规模。
总线结构
F28335 的总线分为内存总线和外设总线两种。
多总线被用于在内存和外设以及CPU之间传输数据。
类型 | 组成 |
---|---|
程序读总线 | 22位地址,32位数据 |
数据读总线 | 32位地址,32位数据 |
数据写总线 | 32位地址,32位数据 |
流水线机制
即处理流程分为若干步骤,而且整个数据处理是“单流向”的,即没有反馈或者迭代运算,前一个步骤的输出是下一个步骤的输入,可以提高系统的工作频率。
F28335 还使用一个特殊的8级保护管道,最大限度地提高吞吐量。这里有一种特殊的保护机制,即不允许对同一位置同时进行读/写,以避免时序的冲突。
FPU流水线
F28335 附带了专门的浮点处理引擎(Floating Point Unit,FPU),可以理解为一个协处理器。
两个并行的处理器(CPU + FPU),在它们直接之间就涉及数据的交换,且整数与浮点格式之间的转换需要1个延时槽,其余的指令,例如load、store、max、min、absolute等,则不需要延时槽。
其基本特性为:
(1)浮点运算是没有流水线保护的,例如,FPU 可以再前一条指令写操作结束前就发出一条新的指令;(这意味着一些与其有关的指令需要使用延时槽来等待操作完成)
(2)汇编器检测流水线的冲突;
(3)编译器将阻止流水线的冲突;
(4)在浮点流水线的延时槽中防止非冲突指令可以提高性能。
2.2.2 F28335 的存储单元
F28335 的存储空间被划分为程序存储与数据存储,其中一些存储器即可用于存储程序,也可用于存储数据。一般而言,F28335 DSP上的存储介质有以下几种:
(1)Flash 存储器
(2)单周期访问 RAM
(3)OTP(One Time Programmable,一次编程)
(4)片外存储
(5)Boot ROM
代码安全模块(CSM)
使用 CSM 的主要目的就是防止逆向工程,并保护知识产权,即 IP。
实际的 CSM 是位于 Flash 中的一段长度为 128bit 的存储空间。
密码长度可由用户定义,长度为128位,即2128=3.4×1038种可能的密码。
在烧写 Flash 时,一定要注意 CSM 位所烧写的内容,一旦忘记所烧写的密码,则芯片无法再次烧写。
2.2.3 片上外设
外设是 DSP 芯片上除了 CPU、存储单元之外的,可以实现一些与外部信号进行交互的单元。
2.3 F28335特点
2.4 F28335 系统时钟
内核时钟(SYSCLKOUT)
外设时钟:
- 低速时钟(LSPCLK)
- 高速时钟(HSPCLK)
2.4.1 内核时钟
片上振荡器 OSC 及锁相环模块 PLL 共同决定了器件的时钟信号。
F28335 系列 DSP 具有三种时钟方案:
- 直接由外部引脚XCLKIN提供时钟信号,XCLKIN 为 3.3V时钟脉冲输入
- 片内振荡器产生需要的时钟信号(使用X1、X2引脚)External Crystal or Resonator 为外部晶振。
PLL 工作模式
如上图所示,OSCCLK 由内部振荡器或外部电路直接提供,而 OSCCLK 之后的时钟信号处理由 PLL 模块进行控制,PLL 模块具有 3 中工作模式,由寄存器 PLLSTS[DIVSEL] 位决定,如下表所示。
写 PLLCR 寄存器前,PLLSTS[DIVSEL] 必须为0。
PLL 配置流程:
2.4.2 外设时钟
在 F28335 系列 DSP 中,几乎每一个外设都需要相应时钟信号,这些时钟信号都是对系统时钟信号 SYSCLKOUT 处理后产生的。
2.5 中断控制
为了及时响应、处理外界的异步事件,中断要求DSP暂停当前的工作,转而对外界异步事件作出处理,完成以后再继续当前的工作。
2.5.1 中断分类
TMS320C2000 管理中断有3个主要阶段:
2.5.2 外设中断扩展模块 PIE
F28335 系列 CPU 可直接处理1路非屏蔽(NMI)以及16路可屏蔽中断(INT1~INT14、RTOSINT、DLOGINT)。
F28335 系列 DSP 的 CPU 无法直接处理所有的中断请求,因此通常使用外设中断扩展模块(PIE)来仲裁外设或外部引脚中断请求信号,并将仲裁结果送入到 CPU 进行处理。
PIE模块概述
PIE 模块最多可接受96路中断请求信号,这96路中断请求信号被分为12组,每组有8路,每组将产生一路复用的中断请求信号,共12路,这12路复用的中断请求信号连接到CPU的中断输入口INT1~INT12 上。96路中断请求信号中的每一路都具有独立的中断向量,这些向量被存储在特定的 RAM 中,用户可根据需要修改。CPU 需要9个时钟周期访问中断向量地址并保存重要的CPU寄存器,因此 CPU 可快速响应中断事件。中断优先级可通过硬件和软件共同控制,每路中断请求信号都可以在PIE模块中使能或静止。
中断请求信号分为外设级、PIE级和CPU级3种。
- 外设级中断:
片内外设的各个中断信号都具有自己的中断标志寄存器和中断使能寄存器。
当外设有中断事件发生时,该外设相关寄存器的中断标志位(IF)将置1。如果该外设相关寄存器中的中断使能位(IE)也为1,那么此次中断事件将向 PIE 发出中断请求信号;
如果其中断使能位为0,中断标志位IF将保持为1,直到被软件清零。如果之后IE被被置1,此时IF如果仍未1,也将会向 PIE 发出中断请求信号。 - PIE级
PIE单元将所有96个中断分为12个组,每个组负责8个外设或引脚中断。
每个PIE单元都有一个中断标志寄存器PIEIFRx和中断使能寄存器PIEIERx,还有一个中断应答寄存器PIEACKx。 - CPU级
PIE将中断请求发到CPU后,CPU中断标志寄存器IFR中对应INTx将被置位。
2.5.3 中断向量表
中断矢量表,又称为中断地址,表明中断发生后,若DSP响应中断,指令执行的地址。
中断向量表映射地址
中断向量列表用来存放中断服务函数的地址,F28335 系列 DSP 的中断向量列表可映射到4个不同的存储单元,由以下控制位决定:
- VMAP:器件复位后此位为1。通过写 ST1 寄存器或 SETC/CLRC VMAP 指令可改变此位的值。正常操作下保留此位为1。
- M0M1MAP:器件复位后此位为1。通过写 ST1 寄存器或 SETC/CLRC M0M1MAP 指令可改变此位的值。正常操作下保留此位为1。
- ENPIE:器件复位后此位为0(即 PIE 禁止工作)。通过写 PIECTRL 寄存器可改变此位的值。
(通常情况下仅使用 PIE 向量)
上电复位后中断向量列表映射为 BROM 向量,在复位和引导完成后,应由用户代码初始化 PIE 向量列表,将向量列表映射为 PIE 向量。下图为器件复位后中断向量列表的配置方法:
中断向量列表:
PIE 向量列表占用 256×16bit 的SARAM,当 PIE 模块未使用时,此部分 SARAM 可当作通用的 RAM 单元。 PIE 中断向量列表中的内容在复位后是未定义的。 CPU默认从 INT1 到 INT12 具有从高到低的中断优先级顺序。中断优先级体现在中断执行时向量的提取顺序上。
2.5.4 PIE 设置寄存器
寄存器名称 | 寄存器说明 |
---|---|
PIECTRL | PIE 控制寄存器 |
PIEACK | PIE 中断确认寄存器 |
PIEIERn | PIE 组n使能寄存器 |
PIEIFRn | PIE 组n标志寄存器 |
- PIE 控制寄存器 PIECTRL
PIECTRL 寄存器各位信息如下表所示:
注:value after reset 为复位后的值
位 | 字段 | 取值及功能描述 |
---|---|---|
15~1 | PIEVECT | 用于保存 PIE 中断向量的地址,中断向量地址的最低位被忽略,仅保存地址的15~1位。通过读取中断向量地址,可判断 CPU 在响应哪个中断。 |
0 | ENPIE | PIE 向量列表使能位。0:PIE 模块禁用,向量列表从 Boot ROM 中的 CPU 向量列表提取向量,即使被禁用,PIE 模块的所有寄存器仍可被访问; 1:除 Reset 复位向量外的所有向量都从 PIE 向量列表中提取。 |
- PIE 中断确认寄存器 PIEACK
PIEACK 寄存器各位信息如下表所示:
PIEACK 功能描述:
位 | 字段 | 取值及功能描述 |
---|---|---|
15~12 | 保留 | 保留 |
11~0 | PIEACK | 每位对应一个 PIE 组,bit0对应PIE组1(INT1),以此类推,bit11对应PIE组12(INT12)。0:读返回0,表明此时对应的PIE组可以向CPU发送中断请求;写0无反应; 1:读返回1,表明对应的PIE组向CPU发送过中断请求,此时组内的其他中断请求被阻塞;写1将对本位清零,重新允许对应的PIE组再次向CPU发送中断请求。 |
- PIE组使能寄存器 PIEIERn
PIEIERn 寄存器各位信息如下表所示:
PIEIERn 功能描述:
位 | 字段 | 取值及功能描述 |
---|---|---|
15~8 | 保留 | 保留 |
7~0 | INTn.8~INTn.1 | 每位用于使能组内的中断。0:禁止中断;1:使能中断 |
- PIE组标志寄存器 PIEIFRn
PIEIFRn 寄存器各位信息如下表所示:
PIEIFRn 功能描述:
位 | 字段 | 取值及功能描述 |
---|---|---|
15~8 | 保留 | 保留 |
7~0 | INTn.8~INTn.1 | 每位用于指示其对应的中断请求是否有效,与CPU的中断标志寄存器类似,一旦中断请求信号到达,相应的位置1。如果中断服务函数被执行,此位自动清零,同时也可通过向该位写0来清零。硬件对 PIEIFR 寄存器的访问优先级比CPU高。 |
2.5.5 CPU 中断设置寄存器
CPU级中断控制相关寄存器主要有标志位寄存器 IFR 与中断使能寄存器 IER 两个,用于控制CPU级的中断响应(INT1~INT14),当 PIE 模块使能时,PIE模块将为CPU提供12路中断请求信号(INT1~INT12)。
- 中断标志寄存器IFR
IFR 寄存器各位信息如下表所示:
IFR 功能描述:
位 | 字段 | 取值及功能描述 |
---|---|---|
15 | RTOSINT | 实时操作系统(RTOS)中断标志位。0:无挂起的RTOS中断;1:至少有一个RTOS中断被挂起 |
14 | DLOGINT | 数据记录中断。0:无挂起的DLOGINT中断;1:至少有一个DLOGINT中断被挂起 |
13~0 | INT14~INT1 | 用于表示CPU级的中断状态。0:INTx通道上无中断请求;1:INTx通道上至少有一个中断请求 |
- 中断标志寄存器IER
IER 寄存器各位信息如下表所示:
IER 功能描述:
位 | 字段 | 取值及功能描述 |
---|---|---|
15 | RTOSINT | 实时操作系统(RTOS)中断标志位。0:禁止RTOS中断;1:使能RTOS中断 |
14 | DLOGINT | 数据记录中断使能控制位。0:禁止DLOGINT中断;1:使能DLOGINT中断 |
13~0 | INT14~INT1 | CPU级的中断使能控制位。0:禁止INTx通道上的中断请求;1:使能INTx通道上的中断请求 |
- 全局中断使能位INTM
2.5.6 中断服务程序ISR
中断服务程序是用户编写的,是对中断事件做出响应的子程序。
CPU接收到中断请求并响应之后,就根据中断矢量内容转移到相应的中断服务程序ISR中。
ISR在为中断所要求的任务服务之前需要保存和恢复寄存器的值,并且还要管理中断嵌套。
2.6 外部接口模块XINTF
EXINTF是一种异步接口,主要用于存储器扩展。