s3c44b0 IIC查询 ZLG7290键盘 求助

[复制链接]
2152|1
 楼主| wlecust06 发表于 2008-4-8 22:37 | 显示全部楼层 |阅读模式
我的程序如下&nbsp;想读取ZLG7290键盘值&nbsp;通过IIC但不用中断&nbsp;不知道为什么读出来值&nbsp;就是我设定的值OX71<br />不明白&nbsp;请问下大家&nbsp;如何通过&nbsp;操作寄存器&nbsp;产生ACK信号??&nbsp;发送&nbsp;地址加读写位的时候&nbsp;是把七位地址加读<br />写位一起&nbsp;写到寄存器&nbsp;rIICDS&nbsp;后&nbsp;它就自动发送吗?&nbsp;谢谢各位指教!<br />void&nbsp;Iicinit7290(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;int&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;uint8&nbsp;conreg;<br />&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;iicstat;<br />&nbsp;&nbsp;&nbsp;&nbsp;//0x1010&nbsp;1111&nbsp;0xaf<br />&nbsp;&nbsp;&nbsp;&nbsp;rPCONF|=0xa;//PF0&nbsp;IICSCL&nbsp;PF1&nbsp;IISDA<br />&nbsp;&nbsp;&nbsp;&nbsp;rPUPF|=0x3;//禁止内部上拉<br />&nbsp;&nbsp;&nbsp;&nbsp;rIICCON=(1&lt&lt7)|(0&lt&lt6)|(0&lt&lt5)|(0&lt&lt4)|(0xf);&nbsp;//Enable&nbsp;interrupt,&nbsp;IICCLK=MCLK/16,&nbsp;Enable&nbsp;ACK<br />&nbsp;&nbsp;&nbsp;&nbsp;Delay(1000);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//66Mhz/16/(15+1)&nbsp;=&nbsp;257Khz<br />&nbsp;&nbsp;&nbsp;&nbsp;Uart_Printf(&quot;read&nbsp;7290&nbsp;start&nbsp;
&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;rIICADD=0x10;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;S3C44B0X&nbsp;slave&nbsp;address<br />&nbsp;&nbsp;&nbsp;&nbsp;rIICSTAT=0x10;&nbsp;&nbsp;&nbsp;&nbsp;//使能RX&nbsp;TX<br />&nbsp;&nbsp;&nbsp;&nbsp;//开始设立地址<br />&nbsp;&nbsp;&nbsp;&nbsp;rIICDS=0x70;&nbsp;&nbsp;//ZLG7290&nbsp;七位地址0x38+1位读0&nbsp;0x70<br />&nbsp;&nbsp;&nbsp;&nbsp;rIICSTAT=0xf0;//产生Start信号&nbsp;主发送模式&nbsp;主机发送地址完成后&nbsp;置位IPF位<br />&nbsp;&nbsp;&nbsp;&nbsp;loop1:<br />&nbsp;&nbsp;&nbsp;&nbsp;iicstat=&nbsp;rIICSTAT;<br />&nbsp;&nbsp;&nbsp;&nbsp;if(iicstat&0x01)<br />&nbsp;&nbsp;&nbsp;&nbsp;goto&nbsp;loop1;//此循环&nbsp;等待收到ACK信号<br />&nbsp;&nbsp;&nbsp;&nbsp;rI_ISPC=BIT_IIC;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;发送数据<br />&nbsp;&nbsp;&nbsp;&nbsp;rIICDS=ZLG7290_Key;&nbsp;发送第要读ZLG7290的寄存器地址<br />&nbsp;&nbsp;&nbsp;&nbsp;loop2:<br />&nbsp;&nbsp;&nbsp;&nbsp;iicstat=&nbsp;rIICSTAT;<br />&nbsp;&nbsp;&nbsp;&nbsp;if(iicstat&0x01)<br />&nbsp;&nbsp;&nbsp;&nbsp;goto&nbsp;loop2;//&nbsp;&nbsp;&nbsp;&nbsp;rI_ISPC=BIT_IIC;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;Delay(5);<br />&nbsp;&nbsp;&nbsp;&nbsp;//延时后&nbsp;产生RESTART信号<br />&nbsp;&nbsp;&nbsp;&nbsp;//开始读7290&nbsp;重新发送start信号&nbsp;&nbsp;七位地址0x38+1位读1&nbsp;0x71<br />&nbsp;&nbsp;&nbsp;&nbsp;rIICDS=0x71;//0x38&lt&lt1+1<br />&nbsp;&nbsp;&nbsp;&nbsp;rIICSTAT=0xb0;//再次产生Start信号,主机设为主接收模式,发送地址加读<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;rIICDS上数据在&nbsp;START信号后自动传输<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;loop3://等待收到ACK<br />&nbsp;&nbsp;&nbsp;&nbsp;iicstat=&nbsp;rIICSTAT;<br />&nbsp;&nbsp;&nbsp;&nbsp;if(iicstat&0x01)<br />&nbsp;&nbsp;&nbsp;&nbsp;goto&nbsp;loop3;&nbsp;//发送完写地址后&nbsp;等待接收键值<br />&nbsp;&nbsp;&nbsp;&nbsp;rI_ISPC=BIT_IIC;<br />&nbsp;&nbsp;&nbsp;&nbsp;Delay(1000);//等待收到数据<br />&nbsp;&nbsp;&nbsp;&nbsp;rIICSTAT=0x9f;//停止信号发出<br />&nbsp;&nbsp;&nbsp;&nbsp;i=rIICDS;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;Uart_Printf(&quot;key&nbsp;value&nbsp;is&nbsp;0x%x
&quot;,i);<br />&nbsp;&nbsp;&nbsp;&nbsp;Uart_Printf(&quot;Read&nbsp;test&nbsp;data&nbsp;from&nbsp;7290&nbsp;is&nbsp;over
&quot;);
 楼主| wlecust06 发表于 2008-4-9 12:17 | 显示全部楼层

怎么没人理

怎么没人顶啊&nbsp;大家帮帮忙啊&nbsp;谢谢了啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

20

帖子

0

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