在哪里可以找到 I bit 以及如何编辑它以在 ARM Cortex-M4 中启用中断

Where to find I bit and how to edit it to enable interrupts in ARM Cortex-M4

在 ARM Cortex-M4F MCU(特别是 TM4C1294NCPDT)中,要处理中断(GPIO 中断),使中断工作的步骤之一是清除 I BIT。

我搜索了很多,但找不到任何有用的信息,如果我需要一些特殊程序,谁能告诉我在哪里可以找到那个位以及如何编辑它?

如果我在解释之后被告知在哪里可以找到该信息,那就太好了(学习如何回答任何其他问题)。

ARM Cortex-M 中断系统相当复杂且经过深思熟虑。它由 CPU 个寄存器和一个紧密耦合的中断控制器 (NVIC) 组成。中断被优先化和向量化。对于较小的 8/16 位 MCU,没有单个 interrupt-enable 标志。

对于每个中断,有两个 ARM-core 实例将事件门控到 CPU: CPU PRIMASK 寄存器(一位),可以是与经典的 interrupt-enable 标志最相似。第二个是 NVIC 中的一个使能位。对于这些,在 CMSIS header 中有一个 ARM 标准。这些为 PRIMASK 位提供函数 __enable_irq()__disable_irq()。外设中断本身必须由 NVIC_EnableIRQ(IRQn_Type IRQn) 控制,其中 IRQn 是 MCU-specific header 文件中定义的中断编号。

最后,在大多数情况下,每个外围模块中也有较小的 MCU 知道的中断允许位。

请注意,要让中断通过 所有 门必须打开(所有位设置为 "enable")。使用 CMSIS 函数来操作位。他们很可能不会接受比 hand-crafted 版本更多的指令。

编辑:

实际上不需要 fiddle 自己使用汇编程序或寄存器。仅使用 CMSIS 功能,您自己很可能不会做得更好,反而可能更糟。这实际上是 CMSIS 的意图。

(结束编辑)

开始阅读 MCU 的参考手册和供应商的主页。那应该为设备提供参考和 app-notes。您还应该阅读 ARM 的技术参考手册和体系结构参考手册。实际上,只需仔细查看 CPU(适合您的 M4)的所有相关文档。这些都是免费的,有些需要注册。

对于 NVIC,您不应直接访问它,而应使用 TI 为该 MCU 提供的 CMSIS header 文件(header 需要一些 device-specific 设置).如果没有,你可以从 ARM 获得它们,但必须自己提供 device-specific 设置(它们很少,在 MCU 的参考手册中给出)。

由于 ARM Cortex-M4 有多个中断,您需要将它们的符号名称设为 enable/disable。这些必须在定义所有外围模块的 MCU header 中定义(可能有多个这样的 header)。名称以 _IRQn 结尾,只需搜索即可。

要使用 Cortex-M4 你应该阅读给定的文档,或者你可以尝试一本好书。不过本站不是教程站,也不允许推荐书籍,请自行搜索。

CMSIS provides a standard cross-vendor software interface to Cortex-M based devices. The CMSIS defines a number of functions for interacting with the NVIC 和 PRIMASK 包括内部函数 __disable_irq()/__enable_irq()

好的,我的问题最简单的答案是:

使用“CPSID I”或“CPSIE I”内联汇编代码分别设置或清除 PRIMASK (I) 位。 (当然这只能在特权模式下工作)。

这两条汇编指令分别相当于CMSIS中的__disable_irq()__enable_irq()函数。