[ZLG-ARM] 查询方式写的一个I2C测试程序(有问题)

[复制链接]
2842|5
 楼主| yeguiyou 发表于 2007-11-5 20:45 | 显示全部楼层 |阅读模式
我用查询方式写的一个I2C测试程序,大家帮我看看<br />void&nbsp;I2C_init(uint32&nbsp;I2C_F)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;if(I2C_F&gt400000)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I2C_F=400000;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;PINSEL0=(PINSEL0&0xffffff0f)|0x50;<br />&nbsp;&nbsp;&nbsp;&nbsp;I2C0SCLH=(Fpclk/I2C_F+1)/2;<br />&nbsp;&nbsp;&nbsp;&nbsp;I2C0SCLL=(Fpclk/I2C_F)/2;&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br />void&nbsp;write_i2c(uint8&nbsp;addr_i2c,uint8&nbsp;data)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;i=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;I2C0CONCLR=0x28;<br />&nbsp;&nbsp;&nbsp;&nbsp;I2C0CONSET=0x40;//初始化为主发送模式<br />&nbsp;&nbsp;&nbsp;&nbsp;I2C0CONSET=0x20;//进入主发送模式<br />&nbsp;&nbsp;&nbsp;&nbsp;do{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i=I2C0STAT&0xf8;<br />&nbsp;&nbsp;&nbsp;&nbsp;}while(i!=0x08);&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;I2C0DAT=addr_i2c;<br />&nbsp;&nbsp;&nbsp;&nbsp;I2C0CONSET=0x04;<br />&nbsp;&nbsp;&nbsp;&nbsp;I2C0CONCLR=0x08;<br />&nbsp;&nbsp;&nbsp;&nbsp;while((I2C0STAT&0xf8)!=0x18);&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;I2C0DAT=data;<br />&nbsp;&nbsp;&nbsp;&nbsp;I2C0CONSET=0x04;<br />&nbsp;&nbsp;&nbsp;&nbsp;I2C0CONCLR=0x08;<br />&nbsp;&nbsp;&nbsp;&nbsp;while((I2C0STAT&0xf8)!=0x28);&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;I2C0CONSET=0x14;<br />&nbsp;&nbsp;&nbsp;&nbsp;I2C0CONCLR=0x08;<br />}<br />我在调试的时候在<br />do{<br />&nbsp;&nbsp;&nbsp;i=I2C0STAT&0xf8;<br />&nbsp;&nbsp;&nbsp;}while(i!=0x08);&nbsp;&nbsp;&nbsp;&nbsp;<br />产生了死循环,i=0x20;<br />若去掉I2C0CONCLR=0x28;则i=0x30,但是我看了相关的资料,在发送了起始信号后,应该返回0x08才对?<br />请高手帮帮忙!
hotpower 发表于 2007-11-5 21:27 | 显示全部楼层

写成函数多清晰???

  
 楼主| yeguiyou 发表于 2007-11-5 21:55 | 显示全部楼层

不明白?请指教!

不明白?请指教!
hotpower 发表于 2007-11-5 22:24 | 显示全部楼层

自己琢磨~~~

1.Init()退出前最好执行Stop().<br />2.函数细分为Start()...Stop()等.<br />3.写法要清晰.<br />&nbsp;&nbsp;如:I2C0CONCLR=0x28;很难知道该语句要干什么.<br />&nbsp;&nbsp;但:I2C0CONCLR=(1&lt&ltSTAC)&nbsp;|&nbsp;(1&lt&ltSIC);清除起始位和中断标志.<br />4.主要解码程序用switch()分析I2C状态较好.<br />&nbsp;&nbsp;加上状态机将会排除误码.<br /> <br /> 相关链接:<a href='http://www.**/blog/hotpower/18019/message.aspx'>http://www.**/blog/hotpower/18019/message.aspx</a>
boy123 发表于 2007-11-6 00:32 | 显示全部楼层

lpc214x at24cxx_demo (I2C演示程序)

读写I2C&nbsp;AT24C16程序(兼容AT24C16~AT24C512读写)<br />实现方试:非中断方式<br /><br />http://www.mcu123.net/bbs/dispbbs.asp?BoardID=28&ID=7116&replyID=&skin=1<br /> <br /> 相关链接:<a href='http://www.mcu123.net/bbs/dispbbs.asp?BoardID=28&ID=7116&replyID=&skin=1'>http://www.mcu123.net/bbs/dispbbs.asp?BoardID=28&ID=7116&replyID=&skin=1</a>
 楼主| yeguiyou 发表于 2007-11-6 10:40 | 显示全部楼层

谢谢!

受益非浅!谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

14

帖子

1

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