在哪里可以找到 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()
函数。
在 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()
函数。