专栏中心

EEPW首页 > 专栏 > dsp2812头文件

dsp2812头文件

发布人:yanzixiaohui 时间:2011-03-03 来源:工程师 发布文章

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
Uint16 TSS:1; // 4 Timer Start/Stop
Uint16 TRB:1; // 5 Timer reload
Uint16 rsvd2:4; // 9:6 reserved
Uint16 SOFT:1; // 10 Emulation modes
Uint16 FREE:1; // 11
Uint16 rsvd3:2; // 12:13 reserved
Uint16 TIE:1; // 14 Output enable
Uint16 TIF:1; // 15 Interrupt flag
};
然后,定义一个Union,允许该寄存器既可以按bit访问,也可以作为整体访问:
  union TCR_REG
{
Uint16 all;
struct TCR_BITS bit;
};
在如此这样对每个寄存器都定义好后,重写struct CPUTIMER_REGS如下:

struct CPUTIMER_REGS
{
union TIM_GROUP TIM; // Timer counter register
union PRD_GROUP PRD; // Period register
union TCR_REG TCR; // Timer control register
Uint16 rsvd1; // reserved
union TPR_REG TPR; // Timer pre-scale low
union TPRH_REG TPRH; // Timer pre-scale high
};
这时,每个寄存器都可以按bit或作为整体访问了。
这样的方式,对于程序员来说,更容易理解,程序也更容易维护。
这样做的坏处:产生的代码长度稍大一些。
另外,对于有些特殊的寄存器,如WDCR,就没有定义Bit field和Union。
上面讲了这么多,那么我们是否需要将这些寄存器全部自己定义呢?答案是不需要。因为TI公司已经为我们提供了现成的.H文件,为我们做好了这些工作。在编程时,我们只需要搞清楚需要把那个头文件包含进来就行了。

 

专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们

关键词:

相关推荐

英飞凌推出新型ID Key S USB,扩展其USB令牌安全控制器产品组合,进一步提升其安全性与多功能性

2025-07-29

1500w逆变电源电路图

北京电视台-2009年NUEDC颁奖仪式报道

安森美与英伟达合作加速下一代人工智能数据中心向800V方案过渡

马斯克弃台积电 三星抢下特斯拉5千亿肥单 韩媒爆真相残酷

为何不选台积电?马斯克砸4900亿下单三星 专家揭5大变心关键

先进封装再进化! 解析NVIDIA GR150导入「CoWoP」的真正意义

EDA/PCB 2025-07-30

艾迈斯欧司朗以114亿欧元的价格将娱乐和工业灯具业务出售给Ushio

中国教育电视台-2009年NUEDC颁奖仪式报道

英国固体氧化物燃料电池技术用于人工智能数据中心

英伟达下单台积电重启生产H20芯片 路透爆许可证还没拿到

H-Converter

一文搞懂《扩展卡尔曼滤波融合IMU和ODOM》

电机和电机控制的简介:步进电机

视频 2011-06-02

IMU为什么不直接测量角度,而要通过加速度计和角速度解算

机器人 2025-07-29

ARM嵌入式软件编程经验谈

经典RS485通讯电路图

上海教育台-NEC电子杯NUEDC竞赛开赛仪式视频报道

更多 培训课堂
更多 焦点
更多 视频

技术专区