I2C运行一段时间后,I2C再发送数据时出现ICSTR寄存器BB一直处于繁忙状态,ICSTR-ICXRDY为1,并且ICIMR所有的中断都disable了,我是在判断BB不处于busy状态后将ICIMR中配置的相关中断disable掉,为什么在没有对ICIMR寄存器中的中断进行disable的情况下,ICIMR寄存器的监控中看到中断都disable了?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
I2C运行一段时间后,I2C再发送数据时出现ICSTR寄存器BB一直处于繁忙状态,ICSTR-ICXRDY为1,并且ICIMR所有的中断都disable了,我是在判断BB不处于busy状态后将ICIMR中配置的相关中断disable掉,为什么在没有对ICIMR寄存器中的中断进行disable的情况下,ICIMR寄存器的监控中看到中断都disable了?
您好,我使用的是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状态