请帮忙测试下我写的44B0 IIC页写功能

[复制链接]
2615|1
 楼主| Again_gyf 发表于 2008-6-4 08:34 | 显示全部楼层 |阅读模式
/*****************************************************************************<br />**&nbsp;Function&nbsp;Name:&nbsp;&nbsp;IIC_WritePage()<br />**&nbsp;Descriptions:&nbsp;&nbsp;&nbsp;写一页数据<br />**&nbsp;Input:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SlvAddr&nbsp;&nbsp;IIC从机地址<br />**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MemAddr&nbsp;&nbsp;要写数据开始地址<br />**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pData&nbsp;&nbsp;&nbsp;&nbsp;要写的数据<br />**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Count&nbsp;&nbsp;&nbsp;&nbsp;要写的字节数<br />**&nbsp;Output:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />**&nbsp;Returned:<br />*****************************************************************************/<br />void&nbsp;IIC_WritePage(INT32U&nbsp;SlvAddr,&nbsp;INT32U&nbsp;MemAddr,&nbsp;INT8U&nbsp;*pData,&nbsp;INT32U&nbsp;Count)<br />{<br />&nbsp;&nbsp;INT32U&nbsp;i,tmp;<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;if(Count&nbsp;&gt&nbsp;IIC_Page_Size)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;return;<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;pIIC-&gtIICCON=(1&lt&lt7)|(0&lt&lt6)|(1&lt&lt5)|(0xf);<br />&nbsp;&nbsp;pIIC-&gtIICDS&nbsp;=&nbsp;SlvAddr;&nbsp;//&nbsp;从器件地址&nbsp;0xa0<br />&nbsp;&nbsp;pIIC-&gtIICSTAT&nbsp;=&nbsp;0xf0;&nbsp;//&nbsp;MasTx,Start<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;while(!((pIIC-&gtIICCON)&IIC_TXRXINT_PEND));&nbsp;//&nbsp;等待发送完从器件应答<br />&nbsp;&nbsp;//while((pIIC-&gtIICSTAT)&IIC_RXACK);&nbsp;//&nbsp;等待&nbsp;应答<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;pIIC-&gtIICDS&nbsp;=&nbsp;(MemAddr&gt&gt8)&0xff;&nbsp;//&nbsp;高8位地址<br />&nbsp;&nbsp;for(i=0;&nbsp;i&lt10;&nbsp;i++);&nbsp;&nbsp;//for&nbsp;setup&nbsp;time&nbsp;until&nbsp;rising&nbsp;edge&nbsp;of&nbsp;IICSCL<br />&nbsp;&nbsp;pIIC-&gtIICCON&nbsp;=&nbsp;0xaf;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//resumes&nbsp;IIC&nbsp;operation.<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;while(!((pIIC-&gtIICCON)&IIC_TXRXINT_PEND));&nbsp;//&nbsp;等待发送完从器件应答<br />&nbsp;&nbsp;//while((pIIC-&gtIICSTAT)&IIC_RXACK);&nbsp;//&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;pIIC-&gtIICDS&nbsp;=&nbsp;(MemAddr)&0xff;&nbsp;//&nbsp;低8位地址<br />&nbsp;&nbsp;for(i=0;&nbsp;i&lt10;&nbsp;i++);&nbsp;&nbsp;//for&nbsp;setup&nbsp;time&nbsp;until&nbsp;rising&nbsp;edge&nbsp;of&nbsp;IICSCL<br />&nbsp;&nbsp;pIIC-&gtIICCON&nbsp;=&nbsp;0xaf;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//resumes&nbsp;IIC&nbsp;operation.<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;//while(!((pIIC-&gtIICCON)&IIC_TXRXINT_PEND));&nbsp;//&nbsp;等待发送完从器件应答<br />&nbsp;&nbsp;//while((pIIC-&gtIICSTAT)&IIC_RXACK);<br />&nbsp;//&nbsp;写入地址发送完<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;while(1)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;while(!((pIIC-&gtIICCON)&IIC_TXRXINT_PEND));&nbsp;//&nbsp;等待发送完从器件应答<br />&nbsp;&nbsp;&nbsp;&nbsp;//while((pIIC-&gtIICSTAT)&IIC_RXACK);<br />&nbsp;&nbsp;&nbsp;&nbsp;//for(i=0;&nbsp;i&lt2;&nbsp;i++);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if((Count--)==0)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pIIC-&gtIICSTAT&nbsp;=&nbsp;0xd0;&nbsp;&nbsp;&nbsp;&nbsp;//stop&nbsp;MasTx&nbsp;condition&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pIIC-&gtIICCON&nbsp;=&nbsp;0xaf;&nbsp;&nbsp;&nbsp;&nbsp;//resumes&nbsp;IIC&nbsp;operation.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;&nbsp;i&lt800;&nbsp;i++);&nbsp;&nbsp;&nbsp;&nbsp;//wait&nbsp;until&nbsp;stop&nbsp;condtion&nbsp;is&nbsp;in&nbsp;effect.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//The&nbsp;pending&nbsp;bit&nbsp;will&nbsp;not&nbsp;be&nbsp;set&nbsp;after&nbsp;issuing&nbsp;stop&nbsp;condition.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;pIIC-&gtIICDS&nbsp;=&nbsp;*pData;&nbsp;&nbsp;//_iicData[0]&nbsp;has&nbsp;dummy.&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;pData++;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;&nbsp;i&lt10;&nbsp;i++);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//for&nbsp;setup&nbsp;time&nbsp;until&nbsp;rising&nbsp;edge&nbsp;of&nbsp;IICSCL<br />&nbsp;&nbsp;&nbsp;&nbsp;pIIC-&gtIICCON&nbsp;=&nbsp;0xaf;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//resumes&nbsp;IIC&nbsp;operation.<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;while(1)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;pIIC-&gtIICDS&nbsp;=&nbsp;SlvAddr;&nbsp;//&nbsp;从器件地址&nbsp;0xa0<br />&nbsp;&nbsp;&nbsp;&nbsp;pIIC-&gtIICSTAT&nbsp;=&nbsp;0xf0;&nbsp;//&nbsp;MasTx,Start<br />&nbsp;&nbsp;&nbsp;&nbsp;pIIC-&gtIICCON&nbsp;=&nbsp;0xaf;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//resumes&nbsp;IIC&nbsp;operation.<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(!((pIIC-&gtIICCON)&IIC_TXRXINT_PEND));&nbsp;//&nbsp;等待发送完从器件应答<br />&nbsp;&nbsp;&nbsp;&nbsp;//while((pIIC-&gtIICSTAT)&IIC_RXACK);&nbsp;//&nbsp;等待&nbsp;应答<br />&nbsp;&nbsp;&nbsp;&nbsp;if(!((pIIC-&gtIICSTAT)&IIC_RXACK))<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;pIIC-&gtIICSTAT&nbsp;=&nbsp;0xd0;&nbsp;&nbsp;&nbsp;&nbsp;//stop&nbsp;MasTx&nbsp;condition&nbsp;<br />&nbsp;&nbsp;pIIC-&gtIICCON&nbsp;=&nbsp;0xaf;&nbsp;&nbsp;&nbsp;&nbsp;//resumes&nbsp;IIC&nbsp;operation.<br />&nbsp;&nbsp;for(i=0;&nbsp;i&lt800;&nbsp;i++);<br />&nbsp;&nbsp;&nbsp;<br />}<br /><br />IIC采用软件查询中断的方式,<br />出现后部分数据写入错误,请大家看看问题在哪?谢谢了!
 楼主| Again_gyf 发表于 2008-6-4 08:39 | 显示全部楼层

请注意MDK里44B0的头文件IIC地址有错误

#define&nbsp;IIC_BASE&nbsp;&nbsp;&nbsp;&nbsp;0x01D16000&nbsp;&nbsp;//&nbsp;IIC&nbsp;Base&nbsp;Address<br />应该为0x01D60000&nbsp;&nbsp;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

48

主题

630

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部