我用查询方式写的一个I2C测试程序,大家帮我看看<br />void I2C_init(uint32 I2C_F)<br />{<br /> if(I2C_F>400000)<br /> {<br /> I2C_F=400000;<br /> }<br /> PINSEL0=(PINSEL0&0xffffff0f)|0x50;<br /> I2C0SCLH=(Fpclk/I2C_F+1)/2;<br /> I2C0SCLL=(Fpclk/I2C_F)/2; <br />}<br />void write_i2c(uint8 addr_i2c,uint8 data)<br />{<br /> <br /> uint8 i=0;<br /> I2C0CONCLR=0x28;<br /> I2C0CONSET=0x40;//初始化为主发送模式<br /> I2C0CONSET=0x20;//进入主发送模式<br /> do{<br /> i=I2C0STAT&0xf8;<br /> }while(i!=0x08); <br /> I2C0DAT=addr_i2c;<br /> I2C0CONSET=0x04;<br /> I2C0CONCLR=0x08;<br /> while((I2C0STAT&0xf8)!=0x18); <br /> I2C0DAT=data;<br /> I2C0CONSET=0x04;<br /> I2C0CONCLR=0x08;<br /> while((I2C0STAT&0xf8)!=0x28); <br /> I2C0CONSET=0x14;<br /> I2C0CONCLR=0x08;<br />}<br />我在调试的时候在<br />do{<br /> i=I2C0STAT&0xf8;<br /> }while(i!=0x08); <br />产生了死循环,i=0x20;<br />若去掉I2C0CONCLR=0x28;则i=0x30,但是我看了相关的资料,在发送了起始信号后,应该返回0x08才对?<br />请高手帮帮忙! |
|