Other Parts Discussed in Thread: MSP430F5529
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP430F5529 您好!
我需要在从模式下为 MSP430F5529写入 I2C 停止、启动和重新启动函数。 我分析了 TI slac300k 示例、但找不到任何线索。 我知道在主控模式下、我可以使用:
void stopCommand()
{
UCB1CTL1 |= UCTXSTP;
}
void startCommand()
{
UCB1CTL1 |= UCTR + UCTXSTT;
}
但我不确定在从模式下使用什么。
我也不确定我的重新启动函数是否有意义。 请看一下。
下面是我的代码的其余部分:
void initI2C()
{
WDTCTL = WDTPW + WDTHOLD; //停止 WDT
P4SEL |= 0x06;//P3SEL |= 0x03; //将 I2C 引脚分配给 USCI_B1
UCB1CTL1 |= UCSWRST; //启用 SW 复位
UCB1CTL0 = UCMODE_3 + UCSYNC; // I2C 从设备,同步模式
UCB1I2COA = 0x48; //自有地址为048h
UCB1CTL1 &=~UCSWRST; //清除 SW 复位,恢复操作
UCB1IE |= UCTXIE + UCSTPIE + UCSTTIE; //启用 STT 和 STP 中断
}
void sendData (unsigned char*TxData,unsigned int 长度)
{
PTxData =(unsigned char *) TxData; // TX 缓冲区的开始
_bis_SR_register (LPM0_bits + GIE); //输入 LPM0,启用中断
//保持在 LPM0中直到主器件
//完成 RX
__no_operation(); //设置断点>>此处<<和
}
unsigned char receiveData()
{
PRxData =(unsigned char *) RxBuffer;// RX 缓冲区开始
RXByteCtr = 0; //清除 RX 字节计数
_bis_SR_register (LPM0_bits + GIE); //输入 LPM0,启用中断
//保持在 LPM0中直到主器件
//完成 TX
__no_operation(); //设置断点>>此处<<并读取
}
void startCommand()
{
}
void restart (int type)//1-接收器模式,2-发送器模式
{
MODE = TYPE;
开关(类型)
{
案例1:
UCB1CTL1 |= UCSWRST; //启用 SW 复位
UCB1CTL0 = UCMODE_3 + UCSYNC; // I2C 从设备,同步模式
UCB1I2COA = 0x48; //自有地址为048h
UCB1CTL1 &=~UCSWRST; //清除 SW 复位,恢复操作
UCB1IE |= UCSTPIE + UCSTTIE + UCRXIE; //启用 STT、STP 和 RX 中断
中断;
案例2:
UCB1CTL1 |= UCSWRST; //启用 SW 复位
UCB1CTL0 = UCMODE_3 + UCSYNC; // I2C 从设备,同步模式
UCB1I2COA = 0x48; //自有地址为048h
UCB1CTL1 &=~UCSWRST; //清除 SW 复位,恢复操作
UCB1IE |= UCTXIE + UCSTPIE + UCSTTIE; //启用 STT 和 STP 中断
中断;
默认值:
中断;
}
}
void stopCommand(){#if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)#pragma vector = USCI_B1_Vector __interrupt void USCI_B1_ISR (void)#Elif defined (__GNU_)__attribute_(interrupt (USCI_B1_ISR)#vector
!#USCI_B1_ISR vector (void USC_B1_ISR)不支持)#pragma COMPLETE!
#endif
{
switch (__even_in_range (UCB1IV、12))
{
case 0:break; //向量0:无中断
情况2:中断; //向量2:ALIFG
情况4:中断; //向量4:NACKIFG
情况6: //向量6:STTIFG
UCB1IFG &=~UCSTTIFG; //清除启动条件 int 标志
中断;
案例8: //向量8:STPIFG
UCB1IFG &=~UCSTPIFG; //清除停止条件 int 标志
IF (RXByteCtr || MODE = 2) //检查 RX 字节计数器或发送模式
_BIC_SR_REGISTER_ON_EXIT (LPM0_BITS);
中断;
案例10: //向量10:RXIFG
* PRxData++= UCB1RXBUF; //将 RX 字节放入缓冲区
RXByteCtr +;
中断;
案例12: //向量12:TXIFG
UCB1TXBUF =* PTxData++; //在地址 PTxData 发送数据
中断;
默认值:中断;
}