专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
[MSP430] 寄存器配置问题
2019-03-24 09:46
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
TI MCU
2370
8
1192
我在看文档时看到一个问题:
UCBxCTL1 |= UCSWRST; // put eUSCI_B in reset state
UCBxCTLW0 |= UCMODE_3 + UCMST; // I2C master mode
我想问的是,在文档中UCMODE_3和 UCMST位的初始值都是0。而IIC配置要求这2位都为1.UCMODE_3 =1,UCMST=1;这怎么解释
此帖出自
小平头技术问答
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
8条回答
qiushenghua
2019-03-25 12:28
解析没到点子上,今天应管理员要求,审查一遍8月份的原创帖和回复,顺便解答一下这个问题。
楼主的问题是:
我在看文档时看到一个问题:
UCBxCTL1 |= UCSWRST; // put eUSCI_B in reset state
UCBxCTLW0 |= UCMODE_3 + UCMST; // I2C master mode
在文档中UCMODE_3和 UCMST位的初始值都是0。而IIC配置要求这2位都为1.UCMODE_3 =1,UCMST=1;这怎么解释
首先我们要区分一下UCMODE_3和UCMODE的区别,UCMODE表示寄存器中表示UCMODEx的两个位,UCMODE_3表示将这两个位的值赋值3
十进制与二进制对比:
0:00
1:01
2:10
3:11
所以UCMODE_3=0b00000110 00000000=0x0600=3<<UCMODE (部分程序用这样的表示方法,取决于编译环境。这里的UCMODE=9)
同样的道理,由于UCMST只有1位,所以UCMST等同于UCMST_1,其值等于1<<11。如果需要将其置位(写为1),让寄存器或上它就可以了,如果需要复位(置0),让UCBxCTLW0&=^UCMST即可。
为了让程序更容易识读,编译器内置了很多的变量宏定义,所以我们在编程的时候不需要记住变量在寄存器中的位置,按照变量名+下划线+值的方式直接给寄存器赋值即可。后续维护程序的时候也方便,看变量名就大概知道是将什么寄存器赋予了什么值,起到什么作用。
加载中...
查看其它8个回答
一周热门
更多
>
相关问题
相关文章
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
楼主的问题是:
我在看文档时看到一个问题:
UCBxCTL1 |= UCSWRST; // put eUSCI_B in reset state
UCBxCTLW0 |= UCMODE_3 + UCMST; // I2C master mode
在文档中UCMODE_3和 UCMST位的初始值都是0。而IIC配置要求这2位都为1.UCMODE_3 =1,UCMST=1;这怎么解释
首先我们要区分一下UCMODE_3和UCMODE的区别,UCMODE表示寄存器中表示UCMODEx的两个位,UCMODE_3表示将这两个位的值赋值3
十进制与二进制对比:
0:00
1:01
2:10
3:11
所以UCMODE_3=0b00000110 00000000=0x0600=3<<UCMODE (部分程序用这样的表示方法,取决于编译环境。这里的UCMODE=9)
同样的道理,由于UCMST只有1位,所以UCMST等同于UCMST_1,其值等于1<<11。如果需要将其置位(写为1),让寄存器或上它就可以了,如果需要复位(置0),让UCBxCTLW0&=^UCMST即可。
为了让程序更容易识读,编译器内置了很多的变量宏定义,所以我们在编程的时候不需要记住变量在寄存器中的位置,按照变量名+下划线+值的方式直接给寄存器赋值即可。后续维护程序的时候也方便,看变量名就大概知道是将什么寄存器赋予了什么值,起到什么作用。
一周热门 更多>