iic多主系统调试时i2cmcs寄存器读出为0x70是怎么回事呢?丢失了仲裁但error位却没有置位, 这个寄存器中各个位之间是怎样的制约关系呢?和他资料说的不一样啊: “error位表示.......,或者是由于控制器丢失仲裁而产生。” 下面是我的中断服务程序,发送出错的处理对不对?另外问如果这个寄存器读出为0x70的时候我该怎么处理 void IIC_ISR_Handler() { volatile INT32U tmp; /**************************/ if( I2C0_MMIS_R ){ // 主机中断 tmp = I2C0_MCS_R; // 第一次进来后这个变量为0x70 ??? I2CMasterIntClear(I2C0_MASTER_BASE);// 清主机中断
if( tmp & 0x1E ) { // 发送出错 if( tmp & 0x10 ){//丢失仲裁,发重复起始条件 I2C0_MCS_R = 0x03; // IICBus.TxdOptStat = IIC_TXD; } else { I2C0_MCS_R = 0x04; // 这里主机发送停止条件,系统将在定时中断中重新开始发送 IICBus.TxdOptStat = IIC_FAIL; } } else { 。。。。 } |