请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP430FR59941 我正在尝试将 MSP430配置为 I2C 从设备、我希望它的工作方式与从任何其他从设备读取寄存器的方式相同。 通常通过发送器件地址、寄存器地址、发出重启信号、然后读回数据来实现。 到目前为止、我能够写入寄存器地址并在 MSP430中接收它、但是在我的主器件发出重新启动命令并再次将器件地址作为读取发送后、我不会得到一个 ACK。
我是否必须在某个位置切换模式才能向外发送字节?
下面是我的设置代码:
void setup_slave_i2c (void){ //配置 GPIO P6SEL0 |= BIT4 | BIT5; P6SEL1 &=~(BIT4 | BIT5); //将 USCI_B2配置为 I2C 模式 UCB3CTLW0 = UCSWRST; //软件复位被启用 UCB3CTLW0 |= UCMODE_3 | UCSYNC; // I2C 模式、同步模式 UCB3I2COA0 = 0x38 | UCOAEN; //自身地址为0x48 +使能 UCB3CTLW0 &=~UCSWRST; //清除复位寄存器 UCB3IE |= UCRXIE | UCTXIE0 | UCSTPIE; //发送,停止中断使能 }
这是我的中断处理程序代码:
#if defined (__TI_Compiler_version__)|| defined (__IAR_systems_icc_) #pragma vector = EUSCI_B3_vector __interrupt void USCI_B3_ISR (void) #Elif defined (__GNU__) void __attribute__(interrupt (eUSCI_B3_vector))) USCI_b3_COMPLETE_ERROR #BUC_B3_COMPLETE ! #endif { 开关(__evo_in_range (UCB3IV、USCI_I2C_UCBIT9IFG)) { USCI_NONE 案例: 中断; //向量0:无中断 USCI_I2C_UCALIFG 案例:中断; //向量2:ALIFG 案例 USCI_I2C_UCNACKIFG:中断; //向量4:NACKIFG USCI_I2C_UCSTTIFG 案例: UCB3IFG &=~UCSTPIFG; /*清除地址和接收缓冲器*/ _BIC_SR_REGISTER_ON_EXIT (LPM0_BITS); 中断; //向量6:STTIFG 案例 USCI_I2C_UCSTPIFG:中断; //向量8:STPIFG USCI_I2C_UCRXIFG3案例:中断; //向量10:RXIFG3 USCI_I2C_UCTXIFG3案例:中断; //向量12:TXIFG3 USCI_I2C_UCRXIFG2案例:中断; //向量14:RXIFG2 USCI_I2C_UCTXIFG2案例:中断; //向量16:TXIFG2 USCI_I2C_UCRXIFG1案例:中断; //向量18:RXIFG1 USCI_I2C_UCTXIFG1案例:中断; //向量20:TXIFG1 USCI_I2C_UCRXIFG0案例: //向量22:RXIFG0 UCB3IFG &=~UCRXIFG;//清除 Rx IFG //UCB3CTLW0 |= UCTXSTP; // I2C 停止条件 //*RXData= UCB3RXBUF; * RXSlaveData = UCB3RXBUF; RXSlaveData++; //*RXData++; _BIC_SR_REGISTER_ON_EXIT (LPM0_BITS);//退出 LPM0 中断; USCI_I2C_UCTXIFG0案例: //向量24:TXIFG0 UCB2TXBUF = 0xAA; _BIC_SR_REGISTER_ON_EXIT (LPM0_BITS);//退出 LPM0 中断; 案例 USCI_I2C_UCBCNTIFG:break; //向量26:BCNTIFG USCI_I2C_UCCLTOIFG 案例:中断; //向量28:时钟低电平超时 USCI_I2C_UCBIT9IFG 案例:中断; //向量30:第9位 默认值:break; } }
我错过了什么? 任何建议都将不胜感激。
谢谢你