I2C运行一段时间后,I2C再发送数据时出现ICSTR寄存器BB一直处于繁忙状态,ICSTR-ICXRDY为1,并且ICIMR所有的中断都disable了,我是在判断BB不处于busy状态后将ICIMR中配置的相关中断disable掉,为什么在没有对ICIMR寄存器中的中断进行disable的情况下,ICIMR寄存器的监控中看到中断都disable了?
Shine:
请问用的是哪款器件?
user5850425:
回复 Shine:
用的是6748,dsp
Shine:
ICIMR默认值是Disable状态。
先做一下内部自环DLP看看是否能长时间运行。
user5850425:
回复 Shine:
您好,我使用的是DSP-C6748芯片,I2C使用的是PCA9555芯片:
具体实现方式:
I2C发送具体使用的函数实现:
static void I2CSendBlocking(unsigned int baseAddr, unsigned int dataCnt){ txCompFlag = 1; dataIdx = 0; savedBase = baseAddr; I2CSetDataCount(baseAddr, dataCnt);
I2CMasterControl(baseAddr, I2C_CFG_MST_TX | I2C_CFG_STOP);
I2CMasterIntEnableEx(baseAddr, I2C_INT_TRANSMIT_READY | I2C_INT_STOP_CONDITION | I2C_INT_NO_ACK | I2C_INT_ARBITARTION_LOST);
I2CMasterStart(baseAddr); while(txCompFlag);}运行一段时间之后I2C挡在while的位置处,txCompFlag在中断处理函数中的stop、NACK、ARBITARTION_LOST进行了清零,经过跟踪发现挡在while位置处,但是ICSTR-BB管脚为free状态