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和处理程序以在特权模式下执行。