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