TMS320F2812 处理器是 TI 公司 C2000 系列处理器中的一款,主频可以达到 150Mhz,我目
前在项目中就是使用这款处理器。该处理器在电机控制等工业控制领域,有着大量的应用
TMS320C28x™ 控制器是 业界第一款 32 位基于 DSP 的控制器,具有板载快闪存储器和高
达 150MIPS 的性能。它将微控制器 (MCU) 综合控制外设和简便易用与 TI 一流的 DSP 技术
的处理能力与 C 效率相结合。
在编程工具上,Code Composer Studio™ IDE 提供强健、成熟的核心功能与简便易用的配置
和图形可视化工具,在开发过程中可以提供很多帮助。我使用的是 CCS2.1 版,我觉得该版
本有的功能还需要改进。CCS 与 MS Visual Studio 开发环境很相似,所以上手很快。但是
在 VS 可以在上下文菜单中快速的查看函数、Struct 等的定义,在我使用的 CCS 版本中似
乎没有,这使我感到很不方便。看来 TI 的软件产品,和微软帝国比起来,还是有差距滴。
(我是比尔盖茨的忠实拥趸,呵呵)
F2812 中有大量的外设寄存器, 在具体的应用中,要把这些寄存器根据实际需要进行配置。
这也是程序在初始化期间需要做的主要工作,在配置完成后,才可以进入正常的流程,即
业务逻辑处理阶段。以我的应用为例,F2812 主要完成下列工作:2 路 A/D 采样,2 路
PWM 输出,6 路 GPIO 输出。在此基础上,我将进行运算处理,实现主要功能。
传统的寄存器访问方式,通过 Macro 定义实现。在 TI 提供的头文件中,提供了一种新的方
式:bit field 和 struct 方式,即位域加结构的方式。在这种方式中,定义 struct 来表示与某
个外设相关的一组寄存器,然后由 Linker 程序负责将寄存器映射到内存中。如对于定时器
寄存器,定义:
struct CPUTIMER_REGS
{
Uint32 TIM; // Timer counter register
Uint32 PRD; // Period register
Uint16 TCR; // Timer control register
Uint16 rsvd1; // reserved
Uint16 TPR; // Timer pre-scale low
Uint16 TPRH; // Timer pre-scale high
};
这样,如果 DSP 内有多个定时器,则可以通过声明多个变量实现对三个定时器寄存器的访
问,便于代码复用。
利用编译器的 DATA_SECTION #pragma,为每个变量分配一个数据段。然后,通过在 cmd
文件,Linker 将每个数据段映射为内存中与该外设寄存器相对应的内存地址。
这时,还不能实现对寄存器,如 TIM 中的每一位的访问。需要对每个寄存器,为其定义位
域,使每一位都可以访问,如定义 TCR 的位域:
struct TCR_BITS
{ // bits description
Uint16 rsvd1:4; // 3:0 reserved