[ZLG-ARM] I2C问题..

[复制链接]
12154|15
 楼主| huangbingg 发表于 2008-10-15 21:01 | 显示全部楼层 |阅读模式
请问周工:<br />  我买的easy2210板子自带的I2C代码只能读写一个字节,而你们网站上下的可以有多个了,比较全面,但问题是<br />  网站上那个代码里关于I2C中断函数中,switch里没有case18H的代码,而我光盘的那个里虽只能传一字节,但是case18H  后面是有几句语句的,也很好理解,周工解释下,感觉有问题???
 楼主| huangbingg 发表于 2008-10-16 19:27 | 显示全部楼层

周工好

关心下这边好吗.....&nbsp;&nbsp;就这么个小问题解试下&nbsp;&nbsp;谢谢
 楼主| huangbingg 发表于 2008-10-17 14:49 | 显示全部楼层

.......

周工好:<br />   就是少了这一段:<br />&nbsp;&nbsp;&nbsp;case&nbsp;&nbsp;0x18:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;已发送SLA+W,并已接收应答<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(0==I2C_suba_en)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;无子地址,则直接发送数据<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;if(I2C_num&gt0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;I2DAT&nbsp;=&nbsp;*I2C_buf++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I2CONCLR&nbsp;=&nbsp;0x28;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I2C_num--;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;I2CONSET&nbsp;=&nbsp;0x10;&nbsp;&nbsp;//&nbsp;无数据发送,结束总线<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I2CONCLR&nbsp;=&nbsp;0x28;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I2C_end&nbsp;=&nbsp;1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;设置总线操作结束标志<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(1==I2C_suba_en)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;发送子地址<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;I2DAT&nbsp;=&nbsp;I2C_suba;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I2CONCLR&nbsp;=&nbsp;0x28;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(2==I2C_suba_en)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;I2DAT&nbsp;=&nbsp;I2C_suba;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I2CONCLR&nbsp;=&nbsp;0x28;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I2C_suba_en&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;子地址己处理<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />包括你213x书里也没这段代码,请解释?   难道不需要?
 楼主| huangbingg 发表于 2008-10-17 15:14 | 显示全部楼层

补充下/

这里这段我是指单字节从地址的,就想不通为啥这段可以不用,直接从0x18跳到0x28?
zlg_lbq 发表于 2008-10-18 08:43 | 显示全部楼层

关于I2C

&nbsp;huangbingg&nbsp;您好:<br />&nbsp;&nbsp;&nbsp;关于您所说的问题,可以参看ARM7基础教程或有关对I2C协议的其它资料,<br />case18与case28状态后要执行的内容是一样的,所以从case18跳到了case28,&nbsp;如果用户需要case18这段代码,可根据自己的需要添加。<br />&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;by&nbsp;liangbaoqiong
 楼主| huangbingg 发表于 2008-10-19 20:43 | 显示全部楼层

为社么不行啊  代码都是你们通用的啊

  
 楼主| huangbingg 发表于 2008-10-20 09:34 | 显示全部楼层

周公帮忙分析下可能存在的原因阿

上次周工分析的很好啊,我单步做下来,I2C_end=-1也就是I2C中断里是0x20,0x30,0x38,0x48这四种错误情况,不能进行读写,咋回事啊?
 楼主| huangbingg 发表于 2008-10-20 09:35 | 显示全部楼层

  
 楼主| huangbingg 发表于 2008-10-20 09:36 | 显示全部楼层

我接开发板的是256

  
 楼主| huangbingg 发表于 2008-10-20 14:12 | 显示全部楼层

周公帮忙分析下可能存在的原因阿

  
 楼主| huangbingg 发表于 2008-10-22 11:05 | 显示全部楼层

........................................

  
 楼主| huangbingg 发表于 2008-10-23 13:15 | 显示全部楼层

周工:::::

出来答复下吧  谢谢~
ZLG_Dengz 发表于 2008-10-24 09:44 | 显示全部楼层

建议

建议你单步调试以下,比如在I2C接收中断里设上断点,观察数据发送和接收状态.同时观察一下I2C_WriteNByte();I2C_ReadNByte();的返回值.
 楼主| huangbingg 发表于 2008-10-24 10:33 | 显示全部楼层

这个早看过了

反回值都是-1,出错的,所以我说读写I2C_WriteNByte();I2C_ReadNByte();都没有应答.从i2C_end=-1就能看出来<br />   周工再帮忙分析下  看看我的main()的参数都没问题的吧
zlg_lly 发表于 2008-10-25 08:52 | 显示全部楼层

RE:huangbingg

您好!<br />看了您的Main函数,也没什么问题嘛,基本上就是例程上的东西。<br />不如这样试一下啊,用这个程序跑一下实验板上的CAT24C02,不能跑那可能就是程序问题;能跑那就是您的硬件有问题;然后对比程序/硬件和开发板的有什么不同。慢慢的就会找到原因了。
梁喜幸 发表于 2008-11-27 16:59 | 显示全部楼层

看看

呵呵,路过看看!这好热闹啊!<br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

58

主题

270

帖子

0

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