找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4084|回复: 3
打印 上一主题 下一主题
收起左侧

AVR集成TWI学习中遇到的问题

[复制链接]
跳转到指定楼层
楼主
ID:50962 发表于 2013-7-20 22:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
MEGA8和MEGA16的中文资料是这样说的:
发送START 之后软件必须清零TWSTA
MEGA16的英文资料是这样说的:
TWSTA is cleared by the TWI hardware when the START condition has been transmitted.
MEGA32的英文资料是这样说的:
TWSTA must be cleared by software when the START condition has been transmitted.
都说中文资料是由英文资料翻译过来的,英文资料更权威,更准确。但是这次两种英文资料相矛盾了,估计是MEGA16的英文资料错了。
百度上查找参考源程序,不见有软件清零的过程。
实际上如果不用软件清零,程序将再成功发送一byte数据或地址后,重发START信号,总线重新启动。TWINT能置位,程序不会陷入死循环。但是状态会出错。查看TWSR发现处于重复START信号已发送状态。
如果软件清零TWSTA,则成功发送一个byte数据或地址后,再继续发送将是TWINT无法置位,程序陷入死循环。
从机为高度集成,功能完善的芯片,无需人为干预。且更换过多个芯片,均有同样的现象。
可以排除有由从机错误引起的整体出错。
程序卡住后断开时钟线,从机的时钟线和数据线都为高电平,基本上可以排除由线与引起的时钟线被从机拉低而使时钟无法继续的情况。
主机能够成功发出START信号和一byte数据或地址,并能够成功接收到来自从机的应答。基本上可以排除外围器件的硬件连接错误。
暂时可以做出的解释为:
在置位TWSTA发出START信号,在此之后发送一byte的数据或地址,这一byte的数据或地址,无论清零TWSTA与否都能成功发送,并接到正确的答复。在这之后如果马上清零TWSTA或者在发送完START信号之后就马上清零TWSTA,都会在清零TWSTA后再成功发送一byte数据或地址,并得到正确的答复,然后继续发送数据或地址将会导致TWINT无法置位,程序被卡死——陷入死循环。如果此时在死循环到来前依然使TWSTA置位,将会在程序卡死之前重启总线,从而防止程序卡死,但是程序会因为错误的总线重启而进入错误的状态。
暂时无法解决的事情:
1.无法找到错误的具体位置
2.TWSTA到底要不要由软件清零
3.为什么TWSTA不清零不会马上重启总线,清零也不会马上导致TWINT不能置位而使程序陷入死循环,而是在成功发送一byte数据或地址后才出问题。
目的:
当日记写写,记录最近做的事情
自己确实难得找到原因了,有高手的话,帮忙分析,解释一下
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:51868 发表于 2013-7-19 11:36 | 只看该作者
今天不是19号吗
回复

使用道具 举报

板凳
ID:98591 发表于 2016-3-21 14:23 | 只看该作者
汗,原来不用手动清除啊,资料有错,看他们都没有清除
回复

使用道具 举报

地板
ID:98591 发表于 2016-3-21 15:45 | 只看该作者
求怎么使用twi与24c02模块的源程序。验证了下,发完从机地址后在发24c02要读取的地址后,状态确实是在重复发送状态。我读取的twdr寄存器内容是从机地址。读不到内容
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表