首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >I2C ISR和中断

I2C ISR和中断
EN

Stack Overflow用户
提问于 2009-03-13 12:15:55
回答 3查看 8.2K关注 0票数 2

平台- ARM9

我有一个通过I2C连接到ARM9的第三方设备。我的问题是I2C的读/写出现了问题。当存在要读取的数据时,IRQ行似乎被断言,但从未被取消断言。当第三方设备对地址分组进行NACKs时,读取失败。因此任何后续写入都会失败。

我想知道我的中断处理是否正常。在为IRQ提供服务的ISR中,我禁用中断,注销中断处理程序,然后向任务发出信号以从I2C总线读取。最后,我重新启用中断。

当任务服务于上面发布的信号时,我尝试从I2C总线读取数据,但失败了。最后,我总是在任何读取尝试之后重新注册ISR。在处理读取信号期间不会发生中断禁用/启用。

我的问题是,在读/写I2C总线时,是否需要禁用中断?

选择的编程语言是使用适当的RTOS的c。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-03-13 12:47:32

重要的是你的RTOS/系统是否准备好支持嵌套异常。除非有充分的理由这样做,否则如果您避免嵌套异常,并在进入ISR时禁用所有中断并在离开时重新启用,则事情会更简单。

如果您希望在为I2C中断提供服务时允许发生其他更高优先级的中断,则仅禁用I2C中断。在进入ISR时注销中断处理程序是相当不寻常的。这可能会导致意外的行为,当没有注册的处理程序时,中断本身被启用并发生中断。因此,不是取消注册处理程序,而是简单地禁用I2C中断(可能您已经在这样做了,但在我看来,注册处理程序和启用中断是两件不同的事情)。

解决问题的一个好策略是尝试不中断地与设备通信。尝试以串行方式对其进行读/写,如果所有内容都阻塞,这并不重要--它只是测试而已。这更容易调试,并且在成功之后,您可以转移到中断版本。

票数 3
EN

Stack Overflow用户

发布于 2009-03-13 23:40:32

大多数中断需要确认或清除。您提到了启用/禁用、注册/注销和处理中断。只需检查中断是否得到确认和/或清除/复位。这通常涉及将中断号或位写回中断挂起寄存器。检查特定的ARM手册或RTOS手册。

票数 1
EN

Stack Overflow用户

发布于 2009-03-13 19:01:28

您是否需要为目标平台启用/禁用中断取决于您特定的硬件/RTOS实现。不幸的是,每个ARM微控制器供应商(STMicro、飞思卡尔、Oki等)都有能力实现不同的I2C硬件,并且在如何清除IRQ方面可能有不同的要求。

我建议您找到一份硬件数据表的副本(和/或在此处张贴特定的硬件部件号,以便我们可以帮助您倾诉供应商文档)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/642400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档