This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/MSP430FR2311:I2C 问题

Guru**** 2575915 points
Other Parts Discussed in Thread: MSP430FR2311, BQ25703A

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/761663/ccs-msp430fr2311-i2c-issue

器件型号: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。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    嗨、Minkyo、

    用户指南指出、在发送起始条件 UCTXSTT 标志后、一旦发送了复杂地址、该标志就会被清除。 但是、模块也会等待总线清零。

    要么是软件错误、要么线路在 MSP430上看起来很忙。

    您是否确定了 I2C 线路的范围? MSP430是否在 I2C 上生成起始位?

    谢谢、
    JD
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    大家好、感谢您的回答。

    我再次检查了 I2C 线路。

    但它看起来不会生成起始位。

    它仅保持3.36V 电压。

    我的问题是什么?

    谢谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    为了能够在 P2.4/P2.5引脚上使用 I²C μ A、必须设置 USCIBRMP 位(请参阅数据表的第6.11.7节)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的回答。 它解决了我的问题。 它工作正常。 再见!