如何有选择地禁用BusFault异常并将其升级到HardFault,并启用其他异常?

时间:2017-07-06 12:00:40

标签: arm cortex-m stm32f4discovery

我正在尝试禁用某些代码的BusFaultexсeption的上升。我想有可能使异常上升标志,但不会上升任何类型的处理程序。编程手册(PM0214第230页)中的BFHFNMIGN位描述与我正在寻找的内容完全相同:“启用优先级为-1或-2的处理程序,以忽略由加载和存储指令引起的数据总线故障。< .. >”中。 这是我的尝试:

SCB->SHCSR ^= SCB_SHCSR_BUSFAULTENA_Msk; //Disable only BusFault_Handler
SCB->CCR |= SCB_CCR_BFHFNMIGN_Msk; //Enable BFHFNMIGN
*(uint32_t *)(0x000FFFFE) =  0xAA; //Test if BFHFNMIGN flag works
i+=1; //Any stuff

我希望执行能够进一步发展,但是在“任何东西”行之后,执行会到达HardFault_Handler,就像我没有使用BFHFNMIGN位一样。在调试器的帮助下,我通过地址检查了BFHFNMIGN位是否已设置,以及其他寄存器中是否存在BusFault的所有属性。 那么为什么HardFault不会忽略BusFault?

1 个答案:

答案 0 :(得分:0)

Cortex-M4设备通用用户指南,第4.3.9章。明确指出:

  

如果禁用系统处理程序并发生相应的故障,处理器会将故障视为硬故障。

其他Cortex-M变体应该以相同的方式运行。