在ARM Cortex-M4F MCU(特别是TM4C1294NCPDT)中,要处理中断(GPIO中断),使中断工作的步骤之一是清除I位。
我搜索了很多,但我找不到任何有用的信息,谁能告诉我在哪里找到确切的位和如何编辑它,如果我需要一些特殊的程序?
如果在解释之后告诉我在哪里可以找到这些信息,那就太好了(以学习如何回答任何其他问题)。
CMSIS为基于Cortex-M的设备提供了一个标准的跨厂商软件接口。CMSIS定义了许多与NVIC和PRIMASK交互的函数,包括本函数__disable_irq()
/__enable_irq()
ARM Cortex-M中断系统是非常复杂和非常周到的。它由CPU寄存器和紧耦合中断控制器(NVIC)组成。中断是优先级和矢量的。对于较小的8/16位mcu,没有单个中断使能标志。
对于每个中断,有两个arm内核实例将事件门送到CPU: CPU PRIMASK
寄存器(单比特),可以看到它与经典的中断使能标志最相似。第二个是NVIC中的一个使能位。对于这些,在CMSIS
头文件中有一个ARM标准。它们为PRIMASK位提供了__enable_irq()
和__disable_irq()
函数。外围中断本身必须由NVIC_EnableIRQ(IRQn_Type IRQn)
控制,其中IRQn
是在mcu特定头文件中定义的中断号。
最后,在大多数情况下,每个外设模块中也有中断使能位,这是较小的mcu所知道的。
注意,要使中断通过,所有门必须打开(所有位设置为"使能")。使用CMSIS函数来操作这些位。他们很可能不会接受比手工制作的版本更多的指令。
编辑:实际上不需要摆弄汇编程序或寄存器。只使用CMSIS功能,你很可能不会做得更好,但可能更糟。这实际上是CMSIS的意图。
(结束编辑)
开始阅读MCU的参考手册和供应商的主页。这应该为设备提供参考和应用程序注释。你还应该阅读ARM的技术参考手册,架构参考手册。实际上,只需仔细查看CPU (M4)的所有相关文件。这些都是免费的,有些需要注册。
对于NVIC,您不应该直接访问它,而是使用TI为该MCU提供的CMSIS头文件(头文件需要一些特定于设备的设置)。如果不可用,您可以从ARM获得它们,但必须自己提供特定于设备的设置(它们很少,并且在MCU的参考手册中给出)。
由于ARM Cortex-M4有多个中断,您需要它们的符号名称来启用/禁用。这些必须在定义所有外设模块的MCU头中定义(可能有多个这样的头)。名称以_IRQn
结尾,只需搜索它。
要使用Cortex-M4,您应该阅读给出的文档,或者您可以尝试与一本好书。然而,由于本网站不是教程网站,也不允许推荐书籍,请自行搜索。
好的,我的问题最简单的答案是:
使用" CPSID I
"或" CPSIE I
"内联汇编码分别设置或清除PRIMASK (I)位。(当然,这只会在特权模式下工作)。
两个汇编指令分别相当于CMSIS中的__disable_irq()
和__enable_irq()
函数。