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

I2C

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状态

赞(0)
未经允许不得转载:TI中文支持网 » I2C
分享到: 更多 (0)