uint8 Write24C01(uint8 Addr,uint8 Data) <br />{<br /> uint32 ii = 0x0;<br /> uint32 test;<br /> <br /> I20CONCLR = (1 << 2) | (1 << 3)| (1 << 5); // Çå³ýSTA,SI,AA±ê־λ <br /> I20CONSET = (1 << 5) | (1 << 6); // ÖÃλSTA,Æô¶¯I2C×ÜÏß <br /> // I20CONCLR = (1<<3) ; <br /> // I20CONSET = (1<<5); <br /> //--------------------------------------------------------------------------------<br /> <br /> while ( ((I20STAT & 0xf8)!=0x08) && ((I20STAT & 0xf8)!=0x10) && (ii++<0xffff) ); //ÅжÏÓÐûÓз¢ËÍÆðʼÌõ¼þºÍÖØ¸´ÆðʼÌõ¼þ<br /> <br /> I20DAT = (at24c01a_addr<<1); // ·¢Ë͵ØÖ·,ûÓÐ×ÓµØÖ·<br /> I20CONCLR = 0x28 ; // 1<<5 ¹Ø±ÕÆô¶¯Î» ÎÊÌâµÄ¹Ø¼ü<br /><br /> //------------------------------------------------------------------------------------------<br /><br /> ii=0;<br /> while ( ((I20STAT & 0xf8) != 0x18) && ((I20STAT & 0xf8)!=0x20) && (ii++<0xffff) );//ÅжϵØÖ·ÓÐûÓÐû½ÓÊÕ²¢·µ»ØACKλ <br /><br /> if((I20STAT & 0xf8)==0x18) // Ö±½ÓдÊý¾Ý<br /> {<br /> I20DAT = Addr; <br /> I20CONCLR = 0x28;<br /> }<br /> else<br /> {<br /> I20CONCLR = 0x38;<br /> I20CONSET = 1<<4;<br /> return 0;<br /> } <br /> <br /> //--------------------------------------------------------------------------------------<br /> ii=0; <br /> <br /> while ( ((I20STAT & 0xf8)!=0x28) && ((I20STAT & 0xf8)!=0x30) && (ii++<0xffff) );//ÅжÏÊý¾ÝÓÐûÓз¢Ëͳɹ¦²¢·µ»ØACKλ <br /> if(I20STAT==0x28)<br /> { <br /> I20DAT = Data; <br /> I20CONCLR = 0x28; <br /> }<br /> else<br /> {<br /> I20CONCLR = 0x38;<br /> I20CONSET = 1<<4;<br /> return 0;<br /> }<br />//A点<br /> //-------------------------------------------------------------------<br /> ii = 0; <br /> while ( ((I21STAT & 0xf8) != 0x28) && ((I21STAT & 0xf8)!=0x30) && (ii++<0x0ffff) );<br /> test = I21STAT; <br /> if(test ==0x28 )<br /> {<br /> I21CONSET = (1<<4); // Í£Ö¹I2C<br /> I21CONCLR = (0x28); // ÇåÁã SI ºÍ STA <br /> return 1;<br /> } <br /> else <br /> {<br /> I21CONSET = (1<<4); // Í£Ö¹I2C<br /> I21CONCLR = (0x28); // ÇåÁã SI ºÍ STA <br /> return 0; <br /> } <br /> <br />} <br />说明: 1、用LPC2366的I2C0口控制AT24C01A。<br /> 2、test用于测试<br /> 3、程序运行,居然发现test = 0xf8<br /> 4、A点之前测试都正常<br /> 5、AT24C01A器件地址 = x1010 000(2进制)<br />请教:有可能是什么原因??<br /> |
|