请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP430FR59941 MSP 设置为多控制器。 另一个控制器启动传输和 MSP
转换到外设。 传输开始、传输的字节数量可变
MSP 进入一个状态、它认为 RXBUF 尚未被读取。
通过 JTAG 调试器进行的检查显示 RXBUF 已被读取并且 RXIFG 已被清除。
问题是 MSP 的运行方式与从不读取 RXBUF 的运行方式相同、并开始保持 SCL
在接收到尚未读取的下一个字节的7个位后为低电平。
我们尝试在检测到 UCRXIFG0标志后添加人工延迟。 我们还尝试了
在从 RXBUF 读取之前、多次检查 UCRXIFG0标志。 都不是
这些选项起作用。
重新读取并将数据转储到 RXBUF 中似乎可以解决该问题。
将 MSP 设置为8MHz 时、以下解决方案会使 SCL 保持低电平~10us。
uint8_t sclLow = 0; while(bytes) { while((UCB0IFG & UCRXIFG0) == 0) { if((TA0CCTL1 & CCIFG) > 0) { goto TIMEOUT_FAILURE; } else if((UCB0IFG & UCSTPIFG) > 0) { goto HANDLE_STPIFG; } else if((UCB0STATW & UCSCLLOW) > 0) { ++sclLow; if(sclLow > 3) { I2C_RXBUF; // reread and discard } } else { sclLow = 0; } } --bytes; *buf = UCB0RXBUF; ++buf; }
我们无法找到勘误表中提到的此问题。 USCI47的勘误表
SPI 存在听起来类似的问题。
该问题通常每持续传输5分钟发生一次。
在400kHz 频率下、每个单独传输持续~6ms。
感谢您提供的任何帮助!