|
/*****************************************************************************<br />** Function Name: IIC_WritePage()<br />** Descriptions: 写一页数据<br />** Input: SlvAddr IIC从机地址<br />** MemAddr 要写数据开始地址<br />** pData 要写的数据<br />** Count 要写的字节数<br />** Output: <br />** Returned:<br />*****************************************************************************/<br />void IIC_WritePage(INT32U SlvAddr, INT32U MemAddr, INT8U *pData, INT32U Count)<br />{<br /> INT32U i,tmp;<br /> <br /> if(Count > IIC_Page_Size)<br /> {<br /> return;<br /> }<br /> <br /> pIIC->IICCON=(1<<7)|(0<<6)|(1<<5)|(0xf);<br /> pIIC->IICDS = SlvAddr; // 从器件地址 0xa0<br /> pIIC->IICSTAT = 0xf0; // MasTx,Start<br /> <br /> while(!((pIIC->IICCON)&IIC_TXRXINT_PEND)); // 等待发送完从器件应答<br /> //while((pIIC->IICSTAT)&IIC_RXACK); // 等待 应答<br /> <br /> pIIC->IICDS = (MemAddr>>8)&0xff; // 高8位地址<br /> for(i=0; i<10; i++); //for setup time until rising edge of IICSCL<br /> pIIC->IICCON = 0xaf; //resumes IIC operation.<br /> <br /> while(!((pIIC->IICCON)&IIC_TXRXINT_PEND)); // 等待发送完从器件应答<br /> //while((pIIC->IICSTAT)&IIC_RXACK); // <br /> <br /> pIIC->IICDS = (MemAddr)&0xff; // 低8位地址<br /> for(i=0; i<10; i++); //for setup time until rising edge of IICSCL<br /> pIIC->IICCON = 0xaf; //resumes IIC operation.<br /> <br /> //while(!((pIIC->IICCON)&IIC_TXRXINT_PEND)); // 等待发送完从器件应答<br /> //while((pIIC->IICSTAT)&IIC_RXACK);<br /> // 写入地址发送完<br /> <br /> while(1)<br /> {<br /> while(!((pIIC->IICCON)&IIC_TXRXINT_PEND)); // 等待发送完从器件应答<br /> //while((pIIC->IICSTAT)&IIC_RXACK);<br /> //for(i=0; i<2; i++);<br /> <br /> if((Count--)==0)<br /> {<br /> pIIC->IICSTAT = 0xd0; //stop MasTx condition <br /> pIIC->IICCON = 0xaf; //resumes IIC operation.<br /> for(i=0; i<800; i++); //wait until stop condtion is in effect.<br /> //The pending bit will not be set after issuing stop condition.<br /> break; <br /> } <br /> pIIC->IICDS = *pData; //_iicData[0] has dummy. <br /> pData++;<br /> for(i=0; i<10; i++); //for setup time until rising edge of IICSCL<br /> pIIC->IICCON = 0xaf; //resumes IIC operation.<br /> }<br /> <br /> while(1)<br /> {<br /> pIIC->IICDS = SlvAddr; // 从器件地址 0xa0<br /> pIIC->IICSTAT = 0xf0; // MasTx,Start<br /> pIIC->IICCON = 0xaf; //resumes IIC operation.<br /> <br /> while(!((pIIC->IICCON)&IIC_TXRXINT_PEND)); // 等待发送完从器件应答<br /> //while((pIIC->IICSTAT)&IIC_RXACK); // 等待 应答<br /> if(!((pIIC->IICSTAT)&IIC_RXACK))<br /> {<br /> break;<br /> }<br /> }<br /> <br /> pIIC->IICSTAT = 0xd0; //stop MasTx condition <br /> pIIC->IICCON = 0xaf; //resumes IIC operation.<br /> for(i=0; i<800; i++);<br /> <br />}<br /><br />IIC采用软件查询中断的方式,<br />出现后部分数据写入错误,请大家看看问题在哪?谢谢了! |
|