完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我不清楚MCP23 S17如何处理几乎彼此一致的多个中断条件。当一个中断被服务,并且INTF寄存器和GPIO寄存器在ISR中被读取时,如果另一个中断发生*在GPIO寄存器的读取期间,第二个中断丢失了吗?例如,考虑这种情况:1。端口发生中断0位。国际语协会被断言。MCU在响应中调用ISR。2。ISR读取Itf来确定原因(位0)和GPIO以清除未决中断。3。在GPIO寄存器的读取过程中,另一个中断发生在端口4.4位。SPI事务完成(GPIO对MCU的最低有效位)。未决中断被清除,Itf被重置。我们在步骤3中丢失了关于中断的信息吗?从我正在实验观察的结果来看,答案似乎是肯定的,但是我希望得到关于行为是什么的确认。这似乎暗示您最多可以同时发生两个中断(一个在端口A上,一个在端口B上),但不是在同一个端口上,因为读取GPIO为该端口的所有位清除未决中断状态和Itf。听起来正确吗?
|
|
相关推荐
2个回答
|
|
您可能不想读取ISR中的寄存器,SPI不是那么快。你是对的,你是有限的。通常,在程序中保留GPIO的“副本”,ISR设置了发生某些事情的标志之后,您读取GPIO并将其与“副本”进行比较,以查看哪些管脚发生了更改——可能存在多个更改。然后将你的副本替换为只读取的值,并对已更改的引脚进行必要的操作。你可能会错过活动,就像当同一个插针在你动作之前触发两次。
|
|
|
|
好点。在这种情况下,我必须阅读INTF以找出哪个端口位导致了中断,GPIO清除挂起的中断,以便将来可以重新调用它。我认为这两个读操作是最小的要求,所以我不能减少开销。我让ISR唤醒一个FreeRTOS任务,它实际执行读操作,我之前还不清楚。我同意,否则ISR单独处理它就太长了。出现这个问题是因为在我的应用程序中,每20ms发生两次中断(源不同步,但周期稳定),所以它们各自的中断脉冲经常在相位上漂移在一起。导致几乎重合的边缘,并且读取GPIO寄存器似乎消除了一个或者另一个的状态,因为它们都在端口A上。
|
|
|
|
只有小组成员才能发言,加入小组>>
5160 浏览 9 评论
1998 浏览 8 评论
1927 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3170 浏览 3 评论
请问电源和晶体值之间有什么关系吗?PIC在正常条件下运行4MHz需要多少电压?
2225 浏览 5 评论
727浏览 1评论
612浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
501浏览 1评论
PIC Kit3出现目标设备ID(00000000)与预期的设备ID(02c20000)不匹配。是什么原因
626浏览 0评论
524浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 02:51 , Processed in 1.198062 second(s), Total 80, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号