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