2783|8

151

帖子

3

TA的资源

一粒金砂(中级)

楼主
 

[MSP430] 寄存器配置问题 [复制链接]

我在看文档时看到一个问题:
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月份的原创帖和回复,顺便解答一下这个问题。 楼主的问题是: 我在看文档时看到一个问题: 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  详情 回复 发表于 2015-9-12 01:23
 
点赞 关注

回复
举报

4177

帖子

9

TA的资源

五彩晶圆(高级)

沙发
 
关于您的这个问题的话,建议您在这个寄存器的配置,文档的下面看看,这个的下面有对寄存器的每个位的介绍。
 
 

回复

151

帖子

3

TA的资源

一粒金砂(中级)

板凳
 
huaiqiao 发表于 2015-8-12 13:00
关于您的这个问题的话,建议您在这个寄存器的配置,文档的下面看看,这个的下面有对寄存器的每个位的介绍。

我看了,手册上的复位值的确是0 。按照例程来,不先配置为1就直接用,那不是配置不成功吗

点评

你指的是I2Cmode,slave mode和 Master mode吗?这个在你发的帖子中不是已经配置了吗?  详情 回复 发表于 2015-8-12 14:09
 
 
 

回复

4177

帖子

9

TA的资源

五彩晶圆(高级)

4
 
wanyisq 发表于 2015-8-12 13:59
我看了,手册上的复位值的确是0 。按照例程来,不先配置为1就直接用,那不是配置不成功吗

你指的是I2Cmode,slave mode和 Master mode吗?这个在你发的帖子中不是已经配置了吗?请仔细看清楚啦。

点评

是I2C Master mode 我的意思是配置IIC Master mode需要UCMODE_3 =1;UCMST=1; 但是手册上这两位的默认值都是0,而示例程序没有先配置UCMODE_3 =1;UCMST=1; 直接UCBxCTLW0 |= UCMODE_3 + UCMST; 这样用 这不是  详情 回复 发表于 2015-8-12 14:35
 
 
 

回复

151

帖子

3

TA的资源

一粒金砂(中级)

5
 
huaiqiao 发表于 2015-8-12 14:09
你指的是I2Cmode,slave mode和 Master mode吗?这个在你发的帖子中不是已经配置了吗?请仔细看清楚啦。

是I2C  Master  mode 我的意思是配置IIC  Master mode需要UCMODE_3 =1;UCMST=1;
但是手册上这两位的默认值都是0,而示例程序没有先配置UCMODE_3 =1;UCMST=1;
直接UCBxCTLW0 |= UCMODE_3 + UCMST; 这样用
这不是配置了UCMODE_3 =0;UCMST=0;吗。这样怎么是I2C  Master  mode ?

点评

您好,UCBxCTLW0 |= UCMODE_3 + UCMST,这个的意思就是UCBxCTLW0 =UCBxCTLW0 | UCMODE_3 + UCMST(UCMODE_3=1,且UCMST)。你需要多看看头文件和 C语言,其他我不做太多说明了。很多人问过这个问题了。  详情 回复 发表于 2015-8-12 15:10
 
 
 

回复

4177

帖子

9

TA的资源

五彩晶圆(高级)

6
 
wanyisq 发表于 2015-8-12 14:35
是I2C  Master  mode 我的意思是配置IIC  Master mode需要UCMODE_3 =1;UCMST=1;
但是手册上这两位的默 ...

您好,UCBxCTLW0 |= UCMODE_3 + UCMST,这个的意思就是UCBxCTLW0 =UCBxCTLW0 | UCMODE_3 + UCMST(UCMODE_3=1,且UCMST)。你需要多看看头文件和 C语言,其他我不做太多说明了。很多人问过这个问题了。

点评

谢谢,我看了看头文件确实是1  详情 回复 发表于 2015-8-12 15:26
 
 
 

回复

151

帖子

3

TA的资源

一粒金砂(中级)

7
 
huaiqiao 发表于 2015-8-12 15:10
您好,UCBxCTLW0 |= UCMODE_3 + UCMST,这个的意思就是UCBxCTLW0 =UCBxCTLW0 | UCMODE_3 + UCMST(UCMODE ...

谢谢,我看了看头文件确实是1
 
 
 

回复

1193

帖子

0

TA的资源

纯净的硅(高级)

8
 
解析没到点子上,今天应管理员要求,审查一遍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<
同样的道理,由于UCMST只有1位,所以UCMST等同于UCMST_1,其值等于1<<11。如果需要将其置位(写为1),让寄存器或上它就可以了,如果需要复位(置0),让UCBxCTLW0&=^UCMST即可。

为了让程序更容易识读,编译器内置了很多的变量宏定义,所以我们在编程的时候不需要记住变量在寄存器中的位置,按照变量名+下划线+值的方式直接给寄存器赋值即可。后续维护程序的时候也方便,看变量名就大概知道是将什么寄存器赋予了什么值,起到什么作用。

点评

看了你的回答我很明白了 谢谢  详情 回复 发表于 2015-9-29 15:42
 
 
 

回复

151

帖子

3

TA的资源

一粒金砂(中级)

9
 
qiushenghua 发表于 2015-9-12 01:23
解析没到点子上,今天应管理员要求,审查一遍8月份的原创帖和回复,顺便解答一下这个问题。

楼主的问题 ...

看了你的回答我很明白了  谢谢
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表