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 /> } |
|