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.

[参考译文] MSP430F5529:MSP430F5529 I2C

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/757025/msp430f5529-msp430f5529-i2c

器件型号:MSP430F5529

您好!

我尝试使用 I2C 外设。 MSP4305529控制器 I2C 引脚连接到 I2C EEPROM 存储器。 为了监控发送、我使用了轮询函数而不是中断。

我遇到的问题是、在调试模式期间、指针在 TX 标志和 RX 标志轮询时停止。 有时、它可以顺利地与 FLAG 配合使用、而不会对代码或任何其他内容进行任何更改。

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

    您是否在单步执行您的代码?
    就我所记得的、代码如下所示:

    1) 1)您发送起始地址、并且立即 TXIFG = 1

    2) 2)您在缓冲器中放置了第一个字符、TXIFG = 0

    3) 3)您输入某种延迟

    4) 4)当地址被发送且接收到 ACK 时、MSP I2C 立即开始传输您输入的第一个字符、并且再次 TXIFG = 1

    5) 5) MSP I2C 将在第7位之后停止线路、并且在将另一个字符放入缓冲区之前不会发送第8位

    因此、如果您速度太慢(由于较长的延迟或由于单步执行)、从器件可能会拒绝该事务。 我不认为需要延迟、 标志轮询机制确保一切都按时完成。 我还建议您检查 NACK 标志、因此请使用如下所示的内容:

    while (((UCB0IFG & UCTXIFG)==0)
    {
    //等待时检查 NACK
    if (UCB0IFG & UCNACKIFG)==1)
    返回 TRANSACENT_FAILED_FLAG;
    }
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    波特率只能在模块处于复位状态时设定。
    但"UCV0CTL1 = UCSSEL_2"行清除了复位位位位。

    "="更改寄存器中的所有位。 在设置或清除单个位时、请注意使用"|="或"&=~"。