C2833x介绍---外设寄存器的头文件

[复制链接]
2607|5
 楼主| liqaz 发表于 2012-3-20 21:24 | 显示全部楼层 |阅读模式
然后直接对指针进行读写操作这种编程方法的优缺点。这种方法虽然容易上手,但是效率并不高;如果我们需要对寄存器的某一个位进行单独操作怎么办呢?(这种情况很常见,比如在一个定时器的控制寄存器的配置中,我们需要只对它的Timer使能位进行操作,而其余的位不变,即不受影响。)这时,我们可以用下面这样的操作方法,即一种模块化、结构化的方法,还以上次那个ADC寄存器配置的情况为例:void main(void)
{
AdcRegs.ADCTRL1.all = 0x1234; //需要配置整个寄存器的所有位
AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1;//只配置特定的位,复位ADC采样的序列1
}
对比一下上次使用的赋值语句:*ADCTRL2 |= 0x4000;
再看看本次使用的AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1;
是不是更近一目了然,容易理解?也许你会感觉第二种方法输入起来麻烦,不方便**;不过我们使用CCS编程的时候,CCS可是自带智能提醒功能的!(前提是所有寄存器及它们的位都已在头文件中定义,并在源程序中引用了;如果你嫌麻烦,只要调用TI提供给我们的现成的就好了,当然如果你感觉命名不习惯还可以自己修改相应的头文件。)只要我们输入了AdcRegs,然后按下.这个符号,CCS自然会提示第二级的寄存器有哪些了。
最后总结一下这样编程的优缺点:
缺点-刚才提到了,主要是**不方便(CCS编辑器的自动完成功能可以帮我们搞定);输入的代码长度看起来很长(同样被CCS编辑器的自动完成功能轻松搞定)
优点-很容易控制单独的位;可以在watchwindow里面观察每一个位的值(不然你还得把寄存器的地址放到watchwindow里面,读出整个地址的值,然后再对照寄存器每个位的说明确定它的作用---效率相差太多了)。
最后ps一下,不知道将来n.m版本的CCS是不是直接弄个图形化配置的工具。。。


转帖
u880 发表于 2012-3-21 23:48 | 显示全部楼层
学习一下
huigoushang 发表于 2012-3-22 00:06 | 显示全部楼层
说的很明白
yangguangaisha 发表于 2012-3-22 00:25 | 显示全部楼层
大概了解一下
acer4736 发表于 2012-3-22 10:29 | 显示全部楼层
coco11 发表于 2012-3-28 21:15 | 显示全部楼层
了解一下。 1# liqaz
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

258

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部