Other Parts Discussed in Thread: MSP-EXP430FR2433, MSP430F5329, MSP430FR2433
主题中讨论的其他器件:MSP-EXP430FR2433、 MSP430F5329、 MSP430WARE
我使用 MSP-EXP430FR2433作为 USB 串行转 I2C 主设备。
有时当我启动时,它会在 EUSCI_B_I2C_masterSendMultiByteStart()库函数中挂起。
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; //轮询发送中断标志。 POLL_LOOP = 0; masterSendMultiByteStart_Fail = false; while (!(HWREG16 (baseAddress + OFS_UCBxIFG)& UCTXIFG)) { POLL_LOOP++; 如果(POLL_LOOP > POLL_LOOP_Lest) POLL_LOOP_Lest = POLL_LOOP; if (POLL_LOOP > POLL_LOOP_ABORT) { masterSendMultiByteStart_FAIL = true; 中断; } } //发送单字节数据。 HWREG16 (baseAddress + OFS_UCBxTXBUF)= txData; //恢复发送中断使能 HWREG16 (baseAddress + OFS_UCBxIE)|= txieStatus; }
原始的 while
while (!(HWREG16 (baseAddress + OFS_UCBxIFG)& UCTXIFG));
我添加了计数、让我了解它将会挂起多长时间。 当 pool_loop 号达到4、000、000时、我放弃了。
有时、这将运行数小时、而不会出现任何问题。
然而,我把它分开,把它放在一起,然后它就在那段时间里。 我还没有完全弄清楚该模式以使其再次工作、但在从机、主机和 PC 上的串行程序重新启动足够多时间后、它将开始工作。
我开始认为、从器件不响应带有 ACK 的起始和地址。
如何进行调试?
是否有一些序列可将 I2C 线路置于已知状态、如复位状态?
不幸的是、它在办公室工作、当我走到200英里外的客户那里时、尝试启动它时、它不会启动。 我在这里没有我在办公室拥有的所有工具。
有什么建议吗?
基普
