TI中文支持网
TI专业的中文技术问题搜集分享网站

MSP432P401R的I2C模块不产生START信号问题

如题:

程序中应用到了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文件中中断处理返回名字不一样,所以需要你改一下 。

赞(0)
未经允许不得转载:TI中文支持网 » MSP432P401R的I2C模块不产生START信号问题
分享到: 更多 (0)