《线程》中讨论的其他部件: MSP430FR5972, MSP430G2955, 测试
你(们)好,贾斯
我想再次谈谈我在微控制器 MSP430FR2476上遇到的 I2Cbus 问题,就像我以前写过的那样,这是一个问题
并且无法在 UCB1上启用此端口。
我想准确地说,我在其他项目上使用 I2CBus 没有任何问题。
在这段时间里,我没有时间完成这项工作,但现在需要完成这项工作,在其他设备上使用相同的控制器。
问题其实不是 I2cbus,而是 inizialation,我用同样的程序长时间处理不同的项目,没有任何问题,
当我选择该项时,只能调整寄存器。
在 Msp430FR2476上,当我设置初始化寄存器时,位将设置为“忙碌”,并且无法使用 I2cbus。
这只适用于 I2cbus 的 UCB1和 UCB0,因为 SPI 工作正常。 我仅在 SPI 上测试了 UCB1。
当设置 BIC.b #UCSWRST,UCB1CTL1立即将 BUSYU 位设置为 UCB1STATW 时,我尝试了以下所有配置 AD
并且不可能使用 I2Cbus。
首先 ,Bset_W,BCLR_W,Bset_B,BCLR_B 都是宏
Bset_W .macro par0,par1.
BISx.w #par0,par1.
.endm
BCLR_W .macro par0,par1.
bix.w #par0,par1;*
.endm
Bset_B .macro par0,par1.
BISx.b #par0,par1.
.endm
BCLR_B .macro par0,par1.
bix.b #par0,par1;*
.endm
数据表上的配置
UCBxCTL1 |= UCSWRST;// eUSCI_B 处于重置状态
UCBxCTLW0 |= UCMODE_3;// I2C 从模式
UCBxI2COA0 = 0x0012;//自己的地址为12十六进制
P2SEL |= 0x03;//配置 I2C 引脚(特定于设备)
UCBxCTL1 &=^UCSWRST;// eUSCI_B 处于运行状态
UCBxIE |= UCTXIE + UCRXIE;//启用 Tx&RX-Interrupt
GIE;//常规中断启用
在这种情况下,我不使用中断,而是主模式
此配置在 MSP430FR5972上正常工作 ,在 MSP430FR2476上不起作用
之二 #UCSWRST,UCB0CTLW0
Bset_W (UCMODE_3+UCMST +UCSYNC),UCB0CTLW0
MOV.W #I2SPEED_100kHz,UCB0BRW
BCLR_W UCSWRST,UCB0CTLW0
此配置在 MSP430G2955上工作正常 ,在 MSP430FR2476上不工作
Bset_B UCSWRST,UCB0CTL1
Bset_B (UCMODE_3+UCMST +UCSYNC),UCB0CTL0
Bset_B UCMODE_3,P3SEL
MOV.B #I2SPEED_100kHz_LSB,UCB0BR0
MOV.B #I2SPEED_100kHz_MSB,UCB0BR1
Bset_B (UCSSEL0+UCSSEL1),UCB0CTL1
BCLR_B UCSWRST,UCB0CTL1
所以我已经做了许多可能的配置,接下来我们将测试一个示例
重置位 UCSWRST,UCB0CTL1时的所有配置都会立即 触发忙位,无法再重置此位。
BIS b #(SCL+SDA),P4SEL0
BIS #UCSWRST,UCB1CTLW0
BIS.w #(UCMODE_3+UCMST + UCSYNC + UCSSEL0+UCSSEL1),UCB1CTLW0
MOV.W #160,UCB1BRW
BIC #UCSWRST ,UCB1CTLW0
BIS #UCSWRST,UCB1CTLW0
BIS.w #(UCMODE_3+UCMST + UCSYNC + UCSSEL0+UCSSEL1),UCB1CTLW0
MOV.W #160,UCB1BRW
BIS b #(SCL+SDA),P4SEL0
BIS #UCAST_2,UCB0CTLW1
BIC #UCSWRST ,UCB1CTLW0
在以下情况下,尝试使用位方法设置寄存器,而不使用字方法设置寄存器时,OIS 未发生任何更改
在寄存器上
Bset_B UCSWRST,UCB1CTL1
Bset_B (UCMODE_3+UCMST +UCSYNC),UCB1CTL0
MOV.B #160,UCB1BR0
MOV.B #0,UCB1BR1
Bset_B (UCSSEL0+UCSSEL1),UCB1CTL1
Bset_B (SCL+SDA),P4SEL0
BCLR_B UCSWRST,UCB1CTL1
-----
BIS.b #UCSWRST,UCB1CTL1
BIS.w #(UCMODE_3+UCMST + UCSYNC + UCSSEL0+UCSSEL1),UCB1CTLW0
MOV.W #160,UCB1BRW
BIS b #(SCL+SDA),P4SEL0
BIC.b #UCSWRST,UCB1CTL1
---
BIS.b #UCSWRST,UCB1CTLW0
BIS.w #(UCMODE_3+UCMST + UCSYNC + UCSSEL0+UCSSEL1),UCB1CTLW0
MOV.w #160,UCB1BRW;*预校准器 LSB
BIS b #(SCL+SDA),P4SEL0
BIC.b #UCSWRST,UCB1CTLW0
-----
BIS.b #UCSWRST,UCB1CTLW0
MOV.w #(UCMODE_3+UCMST +UCSYNC +UCSSEL0+UCSSEL1+UCSSWRST),UCB1CTLW0
MOV.W #160,UCB1BRW
BIS b #(SCL+SDA),P4SEL0
BIC.b #UCSWRST,UCB1CTLW0
-----
BIS #UCSWRST,UCB1CTLW0
MOV.b #(UCMODE_3+UCMST +UCSYNC),UCB1CTL1
MOV.W #160,UCB1BRW
BIS b #(SCL+SDA),P4SEL0
BIC #UCSWRST,UCB1CTLW0
-----
BIS #UCSWRST,UCB1CTLW0
BIS.w #(UCMODE_3+UCMST +UCSYNC +UCSSEL0+UCSSEL1+UCTXSTP +UCTXSTT),UCB1CTLW0
MOV.W #160,UCB1BRW
BIS b #(SCL+SDA),P4SEL0
BIC #UCSWRST,UCB1CTLW0
-----
BIS #UCSWRST,UCB1CTLW0
BIS.w #(UCMODE_3+UCMST +UCSYNC +UCSSEL0+UCSSEL1+UCTXSTP +UCTXSTT),UCB1CTLW0
MOV.W #160,UCB1BRW
BIS b #(SCL+SDA),P4SEL0
BIS #UCTXSTP,UCB1CTLW0
BIC #UCSWRST,UCB1CTLW0
-----
BIS b #(SCL+SDA),P4SEL0
BIS #UCSWRST,UCB1CTLW0
BIS.w #(UCMODE_3+UCMST +UCSYNC +UCSSEL0+UCSSEL1+UCTXSTP +UCTXSTT),UCB1CTLW0
MOV.W #160,UCB1BRW
BIS #UCTXSTP,UCB1CTLW0
BIC #UCSWRST,UCB1CTLW0
-----
BIS #UCSWRST,UCB1CTLW0
BIS.w #(UCMODE_3+UCMST +UCSYNC +UCSSEL0+UCSSEL1+UCTXSTP +UCTXSTT),UCB1CTLW0
MOV.W #160,UCB1BRW
BIS #UCTXSTP,UCB1CTLW0
BIC #UCSWRST,UCB1CTLW0
BIS b #(SCL+SDA),P4SEL0