我试验过了,AW32,不支持0x00广播地址。<br /><br />我从机的地址设成非零地址,主机用0x00怎么都找不到从机,但是把从机的地址也设成0x00,主机用0x00就能仿问到了,而且用0x00地址仿问从机即能写入,也能读出,就是0x00地址就被当成普通地址了。<br /><br />程序如下:<br /><br /><br />void IIC_init(void)<br />{<br /> IIC1C = 0x00; //禁止IIC模块<br /> //IIC1F = 0x4A; //设成100K<br /> IIC1A = DEVICE_I2C_ADR;//设从机地址<br /> IIC1C = 0xC0;<br /> //IIC1C_IICEN = 1; //IIC模块使能<br /> //IIC1C_IICIE = 1; //中断使能<br /> //IIC1C_MST = 0; //IIC模块设为从机<br /> //IIC1C_TXAK = 0; //发送确认信号<br />}<br /><br />interrupt VectorNumber_Viic1 void IIC_ISR(void)<br />{<br /> unsigned char dat;<br /> unsigned char dummy_dat;<br /> <br /> IIC1S_IICIF = 1; //清除中断标志位<br /> <br /> if(IIC1C_MST == 0) //是设成从机吗? 不参与仲裁....<br /> {<br /> if(IIC1S_IAAS == 1) //从机地址匹配吗?<br /> {<br /> if(IIC1S_SRW == 1) //发送数据<br /> {<br /> IIC1C_TX = 1;<br /> IIC1D = Ram_Buff[Mem_Adr];<br /> Mem_Adr++; //地址累加<br /> return ;<br /> }<br /> else //否则接收数据<br /> {<br /> IIC1C_TX = 0;<br /> dummy_dat = IIC1D; //清除TCF<br /> Twi_State = TWI_MEM_ADR;<br /> return;<br /> }<br /> }<br /> else<br /> {<br /> //接收数据<br /> if(IIC1C_TX == 0)<br /> {<br /> <br /> Mem_Adr++; //地址自动加一<br /> Mem_Write_Flag = true;<br /> }<br /> return;<br /> }<br /> else<br /> {<br /> if(IIC1S_RXAK == 0) //收到应答<br /> {<br /> IIC1D = Ram_Buff[Mem_Adr]; //发送下一字节<br /> Mem_Adr++; //地址累加<br /> return;<br /> }<br /> else<br /> {<br /> IIC1C_TX = 0; //切换到接收模式<br /> dummy_dat = IIC1D;<br /> return;<br /> }<br /> }<br /> }<br /> }<br /> else //设成主机吗?<br /> {<br /> }<br />}
|