请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP430FR2311 主题中讨论的其他器件: BQ25703A
工具/软件:Code Composer Studio
你(们)好
我使用的是 msp430fr2311、我想使用 i2c。
我的问题是 UCTXSTT 位 永远不会变为低电平。
我知道、 要向从器件发送数据、我必须设置 UCTXSTT 位。 接下来、UCTXSTT 变为低电平(清零)、然后 TX 标志被置位。
但在 UCTXSTT 位置1后、它永远不会变为低电平、TX 标志永远不会置为高电平。
我指的是示例源代码、这是我的代码的一部分。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // I2C 端口设置 P2SEL0 = 0x30;// P2.4 SDA、P2.5 SCL // *禁用 GPIO 上电默认高阻抗模式以激活 *先前配置的端口设置 */ PMM_unlockLPM5 ();//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////// // I2C 设置 //为 I2C 模式配置 USCI_B0 UCB0CTLW0 |= UCSWRST;//将 eUSCI_B 置于复位状态 UCB0CTLW0 |= UCMODE_3 | UCMST;// I2C 主模式、SMCLK UCB0BRW = 0x8;//波特率= UCB0CTLW0 ~ UCB0CST/ UCB0CST0;// UCB0CST0 = UCB0C0 //清除复位寄存 器 UCB0IE |= UCTXIE0 | UCNACKIE;//发送和 NACK 中断使能 TXByteCtr = 4; while (1) { while (UCB0CTLW0和 UCTXSTP);//确保停止条件已发送 UCB0CTLW0 |= UCTXSTT; _ GPM0_BIS_BIS } #if defined (__TI_Compiler_version__)|| defined (__IAR_systems_icc_) #pragma vector = USCI_B0_vector __interrupt void USCIB0_ISR (void) #elif defined (__GNU__) void __attribute__(interrupt (USCI_B0_vector)#interrupt USCIB0_ISR (void )(void)#USCIB0编译器错误! #endif { switch (__even_in_range (UCB0IV、USCI_I2C_UCBIT9IFG)) { case USCI_none:break;//向量0:no interrupts break; case USCI_I2C_UCALIFG:break; case USCI_I2C_UCCIFG: UCB0CTL1_中断; case USCI_CCIFG:USCI_中断/ UCCIFG;case 4:中断/中断/中断 //向量10:RXIFG3中断; 案例 USCI_I2C_UCTXIFG3:中断;//向量14:TXIFG3中断; 案例 USCI_I2C_UCRXIFG2:中断;//向量16:RXIFG2中断; 案例 USCI_I2C_UCTXIFG2:中断;//向量18:TXIFG2中断; 案例 USCI_USCI_USCI_UCRXG1;案例 TXIFG 中断;案例 USCI_USCI_USCI_USCI_USCI_UCR20:中断;案例 RXIFG 中断;案例 USCI_USCI_USCI_USCI_USCI_USCI_USCI_USCI_USCI_USCI_USCI_USCI_USCI_U //向量24:RXIFG0中断; 实例 USCI_I2C_UCTXIFG0: if (TXByteCtr)//检查 TX 字节计数器 { UCB0TXBUF = CHARGE_START_BUF[buf_cnt];//加载 TX 缓冲区 TXByteCtr --;//减量 TX 字节计数 器} 其他 { UCB0CTLW0 |= UCTXSTP;// I2C 停止条件 UCB0IFG &=~UCTXIFG;//清除 USCI_B0 TX 内部标志 _BIC_SR_REGISTER_ON_EXIT (LPM0_BITS);//退出 LPM0 } 中断;//向量26:TXIFG0中断; 案例 USCI_I2C_UCBCNTIFG:中断;//向量28:BCNTIFG 案例 USCI_I2C_UCCLTOIFG:中断;//向量30:时钟低电平超时 案例 USCI_I2C_UCBIT9IFG:中断;//向量32:第九位 默认中断 }
我已经检查了 SDA、SCL 上拉3.44V。 在清除复位寄存器后、UCBBUSY 位在状态寄存器中为高电平。
但它仅连接了 msp430fr2311 <->bq25703a。
我的问题是什么? 请提供详细信息。
谢谢你、Bye。