打印

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

[复制链接]
2001|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 | 只看该作者
大概了解一下

使用特权

评论回复
5
acer4736| | 2012-3-22 10:29 | 只看该作者
看看

使用特权

评论回复
6
coco11| | 2012-3-28 21:15 | 只看该作者
了解一下。 1# liqaz

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

258

帖子

0

粉丝