如何在ARM Cortex m4上进入管理程序模式以禁用中断?

时间:2017-11-22 10:21:15

标签: arm stm32 cortex-m

我试图找出如何在STM32L4x6RG Nucleo上禁用和启用中断?

经过一段谷歌搜索后,我找到了宏__disble_irq()和__enable_irq(),但我不相信这些是禁用中断。

经过更多调查后,这个宏映射到的cpsid指令似乎只有在超级用户上下文中运行时才有效。那么问题就变成了如何进入管理程序模式以禁用中断并再次返回?

2 个答案:

答案 0 :(得分:3)

  

我找到了宏__disble_irq()和__enable_irq(),但我没有   确信这些都是禁用中断。

他们这样做,除非您(或您正在使用的操作系统)明确地将privileged modeMSR control, Rn指令或__set_CONTROL()功能明确地保持一致。

  

所以问题就变成了如何移动到管理员模式来禁用   中断又回来了?

处理器在复位后处于特权模式,并保留在其中,除非您另有说明。它在执行异常处理程序时也会暂时进入特权模式。

您可以使用SVC instruction从用户代码调用SVC异常处理程序,并以特权模式运行某些代码。但是存在一个问题,即__disable_irq()也会阻止SVC处理程序调用,因此之后无法重新启用它们。您可以调整BASEPRI register而不是__disable_irq()来有选择地禁用较低优先级的中断,并将SVC优先级设置得更高,以便不会被阻止。

答案 1 :(得分:2)

处理器以特权模式启动,因此除非您在操作系统上运行应用程序或者自己切换到非特权模式,否则您应该已处于特权模式。如果您在操作系统上运行应用程序,则应使用其服务来处理中断,如果不存在此类服务,则应单独保留中断。

如果您自己切换到非特权模式,则可以使用svc指令触发svc异常,并在特权模式下执行异常处理程序。