【发布时间】:2018-08-22 07:02:47
【问题描述】:
我有一个简单而愚蠢的问题,我可以通过写入ICER 寄存器来禁用 Cortex-M0 架构中的 PendSV 异常吗?
正如“Cortex-M0 设备通用用户指南”所说:
特权软件可以禁用第 2-20 页的表 2-11 所示的异常 具有可配置的优先级,请参阅第 4-5 页的中断清除启用寄存器。
它可以在特权模式下完成。
但是在我的代码中,虽然我通过 NVIC_DisableIRQ(PendSV_IRQn) 禁用了 PendSV_IRQn,但通过执行 SCB->ICSR |= SCB_ICSR_PENDSVSET 仍然会发生 PendSV 异常(PendSV_Handler ISR)! (我确定 MCU 处于特权模式 [CONTROL = 0])。我的错在哪里?
提前致谢。
【问题讨论】:
-
其他 ARM 架构支持特权或非特权软件执行的概念。此处理器不支持不同的特权级别。软件执行始终具有特权,这意味着软件可以访问处理器的所有功能。
-
我倾向于避开架构参考手册、技术参考手册以及有时 amba/axi/ahb 手册以外的文档。像这样的程序员手册往往存在与解决方案一样多的问题。我第一次查看这些附加文件中的一个时发现了大问题并移开了视线。有一两次极少数情况下,其中一个文档包含 ARM 或 TRM 所没有的内容,请始终交叉引用您找到并希望与 ARM 和 TRM 一起使用的任何内容。
-
谢谢@old_timer。似乎“Cortex-M0 设备通用用户指南”不太准确。
-
假设所有文档都有错误,因为它们通常是错误的,有时只是拼写错误,有时是更大的问题。但是按照这个假设去做,结果你自己做黑客/测试来确认文档,你总体上会更好。
-
然后有时你会在你最终来到这里的地方结束,这似乎没有意义