我如何在ARM Cortex M4上输入主管模式以禁用中断



im试图找出我如何禁用并启用STM32L4X6RG核的中断?

一点点谷歌搜索后,我找到了宏__disble_irq()和__enable_irq(),但我不相信这些正在破坏中断。

在进行了更多调查之后,似乎CPSID指令此宏地图仅在主管环境中运行时才会产生效果。因此,问题变成了如何转到主管模式以禁用中断并返回?

我找到了宏__disble_irq()和__enable_irq(),但我不是 确信这些正在禁用中断。

他们这样做,除非您(或您正在使用的OS)明确将特权模式与MSR control, Rn指令或__set_CONTROL()函数相同。

所以问题变成了我如何转到主管模式以禁用 中断然后返回??

重置后处理器处于特权模式,除非您另有说明,否则请留在其中。执行异常处理程序时,它还暂时进入特权模式。

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

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

如果您自己切换到无私人模式,则可以使用svc指令触发SVC-Exception和处理程序以在特权模式下执行。

最新更新