如何在ARM Cortex m4上进入监控模式以禁用中断?

如何在ARM Cortex m4上进入监控模式以禁用中断?,arm,stm32,cortex-m,Arm,Stm32,Cortex M,我想知道如何在STM32L4x6RG核子上禁用和启用中断 在谷歌搜索了一下之后,我发现了宏uuu disble_irq()和uu enable_irq(),但我不相信这些是禁用中断 经过进一步调查,似乎该宏映射到的cpsid指令只有在主管上下文中运行时才有效。所以问题变成了我如何切换到管理模式来禁用中断并再次返回 我发现了宏uu disble_irq()和uu enable_irq(),但我没有 确信这些是禁用中断 除非您(或您正在使用的操作系统)明确带着指令离开,或者带着执行相同操作的\u s

我想知道如何在STM32L4x6RG核子上禁用和启用中断

在谷歌搜索了一下之后,我发现了宏uuu disble_irq()和uu enable_irq(),但我不相信这些是禁用中断

经过进一步调查,似乎该宏映射到的cpsid指令只有在主管上下文中运行时才有效。所以问题变成了我如何切换到管理模式来禁用中断并再次返回

我发现了宏uu disble_irq()和uu enable_irq(),但我没有 确信这些是禁用中断

除非您(或您正在使用的操作系统)明确带着指令离开,或者带着执行相同操作的
\u set\u CONTROL()
函数离开

因此,问题变成了如何切换到主管模式以禁用 中断并再次返回

重置后处理器处于特权模式,除非您另行通知,否则处理器将保持特权模式。在执行异常处理程序时,它也会临时进入特权模式

您可以使用从用户代码调用SVC异常处理程序,并在特权模式下运行一些代码。但是有一个问题是,SVC处理程序调用也会被
\uu disable\u irq()
阻止,因此以后无法重新启用它们。您可以调整以有选择地禁用低优先级中断,并将SVC优先级设置为更高,从而使其不会被阻塞,而不是
\u禁用\u irq()

我发现了宏uu disble_irq()和uu enable_irq(),但我没有 确信这些是禁用中断

除非您(或您正在使用的操作系统)明确带着指令离开,或者带着执行相同操作的
\u set\u CONTROL()
函数离开

因此,问题变成了如何切换到主管模式以禁用 中断并再次返回

重置后处理器处于特权模式,除非您另行通知,否则处理器将保持特权模式。在执行异常处理程序时,它也会临时进入特权模式


您可以使用从用户代码调用SVC异常处理程序,并在特权模式下运行一些代码。但是有一个问题是,SVC处理程序调用也会被
\uu disable\u irq()
阻止,因此以后无法重新启用它们。您可以调整以有选择地禁用低优先级中断,而不是
\u disable\u irq()
,并将SVC优先级设置得更高,这样它就不会被阻止。

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


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

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


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

为什么不?文档的哪一部分让您不确定。这些宏只是CMSIS的一部分-我建议您阅读ARM站点上的文档,而不是“相信”或“不相信”。PS当您尝试使用ARM uC执行某些操作时,谷歌搜索并不是最好的方法。互联网充满了神话-最好阅读官方文档,这是相当好的。你需要做一个SVC调用进入特权模式。在SVC处理程序中,您可以通过更改控制寄存器的位0来更改为特权模式。查一下,网上有很多关于它的东西。为什么不呢?文档的哪一部分让您不确定。这些宏只是CMSIS的一部分-我建议您阅读ARM站点上的文档,而不是“相信”或“不相信”。PS当您尝试使用ARM uC执行某些操作时,谷歌搜索并不是最好的方法。互联网充满了神话-最好阅读官方文档,这是相当好的。你需要做一个SVC调用进入特权模式。在SVC处理程序中,您可以通过更改控制寄存器的位0来更改为特权模式。查找一下,网上有很多关于它的信息。我没有使用操作系统,我使用的是低级(LL)库调用。因此,假定处理器处于特权模式,除非ST引导代码将其设置为非特权模式?@err没有将处理器设置为非特权模式的“ST引导代码”。您正在尝试解决一个不存在的问题。我没有使用操作系统,我正在使用低级(LL)库调用。因此,假定处理器处于特权模式,除非ST引导代码将其设置为非特权模式?@err没有将处理器设置为非特权模式的“ST引导代码”。您正在尝试解决一个不存在的问题。