完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
嗨!我在以前的项目中做过Master I2C编码,但是那时代码是在主函数中执行的。举个代码为例:这个代码有缺点,当做这个状态时,CPU被占用。石斑鱼类。我仔细阅读了中程MCU手册(设备是16F1824btw)以找到一些模式,并且我弄明白了。整个过程分为六个步骤有一些共同点。启动条件:模块最终将设置BCLIF或SSPIFRepeated Start条件:模块最终将设置BCLIF或SSPIF,tooMaster Transmit:模块最终将设置BCLIF或SSPIF,tooMaster Receiver:模块最终只设置SSPIFAcknowledge:模块最终将设置BCLIF或SSPIF,工具停止条件:模块最终将设置BCLIF或SSPIF,也就是说,我可以使用这两个标志BCLIF和SSPIF来消除占用问题,但是当我开始编写代码时,遇到一些我无法处理的情况。项目的要求是启动I2C通信时只断言RB5负边,即:然后在ISR中设置TASK1标志,然后执行类似操作这主要功能:这是解决办法吗?我不确定,因为下一条语句可能在断言中断之前已经执行,即设置SEN位->SSP1BUF=地址(下一条语句已经执行)->SSP1IF标志设置(这个标志应该属于SEN会话),我记得主qb说过:硬件比软件快得多。如果我没有正确引用,请教我大师qb。但问题是:这个规则也在大师传输会话中吗?因为在主传输会话中,模块需要将数据超时8次,然后等待从机响应,然后将ACK位放入ACKSTAT,最后设置SSP1IF。如果这种方式不起作用,我想我需要在ISR中执行整个I2C代码。但是……还有另一个问题。如果我把整个I2C代码都写在ISR中,ISR函数中的硬件就不会打断它。所以我想我只能选择第一种方法来处理,如果有什么建议吗?谢谢你
|
|
相关推荐
1个回答
|
|
现在,我将通过引用MCC i2c code来编写基于中断的i2c代码的简化版本。让我困惑的是:这是ISR函数:根据规范,以下事件将导致SSP1中断标志位:也就是说,必须有一个开始条件来调度:ch SSP1中断,但是在这个ISR函数中,很容易看出开关情况中包括了启动条件。那么……如何调度SSP1中断?
|
|
|
|
只有小组成员才能发言,加入小组>>
5161 浏览 9 评论
1999 浏览 8 评论
1928 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3171 浏览 3 评论
请问电源和晶体值之间有什么关系吗?PIC在正常条件下运行4MHz需要多少电压?
2226 浏览 5 评论
731浏览 1评论
613浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
503浏览 1评论
PIC Kit3出现目标设备ID(00000000)与预期的设备ID(02c20000)不匹配。是什么原因
629浏览 0评论
527浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 19:58 , Processed in 1.301695 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号