|
void I2c0Init(uint32 Fi2c)<br />{<br /> if (Fi2c > 400000)<br /> Fi2c = 400000;<br /> PINSEL0 = (PINSEL0 & (~0xF0)) | 0x50; // 不影响其它管脚连接 <br /> I2C0SCLH = (Fpclk/Fi2c + 1) / 2; // 设定I2C时钟 <br /> I2C0SCLL = (Fpclk/Fi2c)/2;<br /> I2C0CONCLR = 0x2C; <br /> I2C0CONSET = 0x40; <br /> <br />}<br /><br />/******************************************************<br />* 采用类似串口的发送方式 * *<br />* *<br />*******************************************************/<br />void Command_Aic23(uint8 sla,uint8 subaddr, uint8 data)<br />{<br /> uint8 sub=0;;<br /><br /> // I2C0CONCLR = 1<<3; <br /> I2C0CONSET = (1<<5)|(1<<6);<br /> <br /> while(1)<br /> { <br /> <br /> switch(I2C0STAT & 0xf8)<br /> {<br /> case 0x08:<br /> I2C0DAT = sla ; // 0位为0<br /> I2C0CONCLR = 1<<3; <br /> break;<br /><br /> case 0x10:<br /> I2C0DAT = sla ;<br /> I2C0CONCLR = 1<<3; <br /> break;<br /> <br /> case 0x18:<br /> I2C0DAT = subaddr; <br /> I2C0CONCLR = 1<<3 ;<br /> break;<br /> <br /> case 0x28:<br /> if(sub==1)<br /> {<br /> I2C0CONCLR =0x28;<br /> return;<br /> } <br /> I2C0DAT = data; <br /> I2C0CONCLR = 1<<3 ;<br /> sub=1;<br /> break;<br /> <br /> default :<br /> I2C0CONCLR =0x28;<br /> return;<br /> break;<br /> } //SWITCH<br /> } // WHILE(1) <br /><br />}<br />问题是每次执行完0X18分支之后就出错,望各位高手指点 |
|