完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
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数据或地址后才出问题。 目的: 当日记写写,记录最近做的事情 自己确实难得找到原因了,有高手的话,帮忙分析,解释一下 |
|
|
|
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
551 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
910 浏览 0 评论
【RA-Eco-RA2E1-48PIN-V1.0开发板试用】(第三篇)ADC采集+PWM输出
575 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十五章 人脸识别实验
572 浏览 0 评论
1221 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11769 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 22:15 , Processed in 0.631275 second(s), Total 65, Slave 47 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号