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.

[参考译文] LP-MSP430FR2476:I2C 通信在开始条件生成后立即挂起

Guru**** 1831610 points
Other Parts Discussed in Thread: LP5569, LP-MSP430FR2476
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/981155/lp-msp430fr2476-i2c-comms-hanging-immediate-following-generation-of-start-condition

器件型号:LP-MSP430FR2476
主题中讨论的其他器件:MSP430WARELP5569

我正在尝试使用 MSP430Ware 中提供的驱动程序库在 LP-MSP430FR2476微控制器和 TI LP5569 LED 驱动器之间建立 I2C 通信。 我正在使用 Code Composer Studio v10 1.1.0.00010进行编程、并使用 MSP430Ware v3.80.10.09。 不幸 的是、当我运行 MSP430Ware_3_80_13_03\driverlib\examples\MSP430FR2xx_4xx\eusci_b_i2c\eusci_b_i2c_ex3_masterTxMultiple.c 中提供的示例代码时、我的程序在第一次调用"EUSCI_B_I2C_SendData+"(EUSCI_Start+、USCI_Multib+、b+、"uSend"BuData"时挂起。 具体而言、在该函数调用中、我的程序似乎在 eusci_b_i2c_.c 中停止 以下是我的程序被卡住的函数:

void EUSCI_B_I2C_masterSendMultiByteStart (uint16_t baseAddress、
uint8_t txData
)
{
//存储当前发送中断使能
uint16_t txieStatus = HWREG16 (baseAddress + OFS_UCBxIE)& UCTXIE;

//禁用发送中断使能
HWREG16 (baseAddress + OFS_UCBxIE)&=~(UCTXIE);

//发送启动条件。
HWREG16 (baseAddress + OFS_UCBxCTLW0)|= UCTR + UCTXSTT;

//轮询发送中断标志。 <------------ 代码卡在这里
while (!(HWREG16 (baseAddress + OFS_UCBxIFG)& UCTXIFG));

//发送单字节数据。
HWREG16 (baseAddress + OFS_UCBxTXBUF)= txData;

//恢复发送中断使能
HWREG16 (baseAddress + OFS_UCBxIE)|= txieStatus;
} 

我对示例代码所做的唯一偏差是更改从器件地址(我将 LP5569的地址设置为0x40)、GPIO 引脚(使用了 P1、引脚2和3)、并且我已更改中断代码以发送特定的两个字节 (控制寄存器地址后跟该寄存器的新值、但程序无论如何都不会达到该阶段)。  

提前感谢!

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

    我对此有更新:当我拔下并重新插入 LP-MSP430FR2476时、I2C 通信正常。 但是、如果我在不拔下/重新插入 LP-MSP430FR2476的情况下关闭调试器并尝试调试、I2C 通信将再次停止工作。 每次拔下/重新插入电路板真的很不方便、是否有人知道导致这种情况的原因?

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

    您好、Sourabh、

    您能否使用逻辑探头或示波器捕获这段时间内的 I2C 活动?

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

    大家好、Dennis、感谢您的回复。 我现在要获取一个示波器。 我不知道何时会有它、但我必须继续调试。 我打开了一个新问题、其中包含了一些其他细节、这些细节可能是问题的根本所在。 我想我的部分问题是、当原始 I2C 配置代码运行时、它不会完全复位 I2C 总线。 因此、程序最终会在调试会话之间挂起、因为在生成启动条件时中断无法触发。

    您是否知道这是在这些电路板上对 I2C 进行编程的已知问题? 如果是这样、是否有一种安全的方法来确保 I2C 总线通过 driverlib 进行清除/复位、从而确保在与从器件开始通信之前中断已准备好发出?

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

    Sourcabh、您好!

    我正在检查您是否能够获得示波器并捕获一些 I2C 总线活动。

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

    我从您那里听说过几天,因此我假设您能够解决您的问题。
    如果情况并非如此,请单击“这无法解决我的问题”按钮,并使用更多信息回复此主题。
    如果此主题锁定、请单击"提出相关问题"按钮、然后在新主题中描述您的问题的当前状态以及您可能需要帮助我们帮助解决您的问题的任何其他详细信息。