如题:
程序中应用到了EUSCI_B0的I2C模式,应用示例代码[examples\nortos\MSP_EXP432P401R\driverlib\i2c_master_rw_repeated_start-master_code]中的读写中断方式。
程序卡死在了读I2C_masterSendMultibyteStart函数中的
while (BITBAND_PERI(EUSCI_B_CMSIS(moduleInstance)->CTLW0, EUSCI_B_CTLW0_TXSTT_OFS) || !BITBAND_PERI(EUSCI_B_CMSIS(moduleInstance)->IFG, EUSCI_B_IFG_TXIFG0_OFS));
调试时,查看CTLW0和IFG寄存器,STT位长时置1, TXIFG0位长时为0.
其它条件:MSP432作主机,从机地址为0x1F。 不知问题出在何处?
RoundRoad:
回复 Susan Yang:
多谢您的及时回复。应用了推荐的I2C驱动后,可以正常通信了。等有空了,再详细研究下问题所在 并分享成果。再次谢谢。
Susan Yang:
回复 RoundRoad:
很高兴能帮到您!期待您的分享!
TianShen:
回复 RoundRoad:
您好:
我参考了这个连接e2e.ti.com/…/1701554 i2c驱动,操作芯片时程序一直停在//Poll for transmit interrupt flag.while (!BITBAND_PERI(EUSCI_B_CMSIS(moduleInstance)->IFG, EUSCI_B_IFG_TXIFG0_OFS));
我使用两个板子测试i2c官网例子时,发现刚开始i2c 从设备收到的数据都是0 (正确数据为0x11 0x22…)程序跑个1分钟之后 接受到的数据完全正确, 你有出现过这种情况吗?
我使用的是P6.4(i2c_sda)和P6.5(i2c_scl)。
可不可以借鉴一下你i2c_driver.c 和i2c_driver.h文件呢?非常谢谢。
RoundRoad:
回复 TianShen:
我用的就是链接中的文件 ,可以通信,我的从机是加速度计。
TianShen:
回复 RoundRoad:
您好,非常感谢你的回复。 我使用的1832.u2c_druver.c和6622.i2c_driver.h文件, 我这出现运行程序之后, 会进入Cortex-M4 Processor Exceptions中断,而不是进入设备中断。你遇到过这种现象吗?
我调用i2c_driver.c文件中的API过程:
void main(void)
{
int i = 0; uint8_t rxBuf[10] = { 0 }; Clock_Init48MHz(); MAP_WDT_A_holdTimer();
initI2C(EUSCI_B1_BASE); while (1) {
readI2C(EUSCI_B1_BASE, 0x68, 0x00, rxBuf, 1);
for (i = 0; i < 2000; i++);
}
}
TianShen:
回复 RoundRoad:
已解决, 感谢你的答案。
RoundRoad:
回复 TianShen:
首先,恭喜你的问题得到了解决。 在问题得到解决后,应该分享一下问题出现的原因或解决流程或方法。 只有每个人都乐于分享,我们才能在遇到问题时有所求,有所果,有所成。 谢谢。
user6101008:
回复 TianShen:
你好!请问你是怎么解决的呢?我也是自己用系统的例程,就停在while(!BITBAND_PERI(EUSCI_B_CMSIS(moduleInstance)->rIFG.r, UCTXIFG_OFS))用1832.u2c_druver.c和6622.i2c_driver.h进入Cortex-M4 Processor Exceptions中断!能分享一下是怎么解决的吗?谢谢!
TianShen:
回复 user6101008:
1832.u2c_druver.c和6622.i2c_driver.h使用的中断处理函数名字和startup_msp432p401r_ccs.c文件中中断处理返回名字不一样,所以需要你改一下 。