当Exception发生并由 Cortex-M3 处理时,处理器将需要定位 Exception handler 的起始地址,会存储在中的VECTOR TABLE中,默认情况下,VECTOR TABLE 从地址0开始。由於地址 0x0 应该是boot code,通常 VECTOR TABLE 会放在 Flash 或 ROM 中,并且在运行时不能更改该值,但是,VECTOR TABLE可以relocated到 RAM 区域中,以便我们可以在运行时更改 handler,通过在 NVIC 中设置一个称为 vector table offset register 来完成的。
System Control Block (SCB),提供系统实作讯息和系统控制,包括
Exception 的配置、控制,有一些 Registers 用於控制 fault exceptions。
/** @brief System Control Block (SCB) register structure definition */
typedef struct
{
__I uint32_t CPUID; /*!< Offset: 0x00 CPU ID Base Register*/
__IO uint32_t ICSR; /*!< Offset: 0x04 Interrupt Control State Register*/
__IO uint32_t VTOR; /*!< Offset: 0x08 Vector Table Offset Register*/
__IO uint32_t AIRCR; /*!< Offset: 0x0C Application Interrupt / Reset Control Register*/
__IO uint32_t SCR; /*!< Offset: 0x10 System Control Register*/
__IO uint32_t CCR; /*!< Offset: 0x14 Configuration Control Register*/
__IO uint8_t SHP[12]; /*!< Offset: 0x18 System Handlers Priority Registers (4-7, 8-11, 12-15) */
__IO uint32_t SHCSR; /*!< Offset: 0x24 System Handler Control and State Register */
__IO uint32_t CFSR; /*!< Offset: 0x28 Configurable Fault Status Register*/
__IO uint32_t HFSR; /*!< Offset: 0x2C Hard Fault Status Register*/
__IO uint32_t DFSR; /*!< Offset: 0x30 Debug Fault Status Register */
__IO uint32_t MMFAR; /*!< Offset: 0x34 Mem Manage Address Register*/
__IO uint32_t BFAR; /*!< Offset: 0x38 Bus Fault Address Register*/
__IO uint32_t AFSR; /*!< Offset: 0x3C Auxiliary Fault Status Register*/
__I uint32_t PFR[2]; /*!< Offset: 0x40 Processor Feature Register*/
__I uint32_t DFR; /*!< Offset: 0x48 Debug Feature Register*/
__I uint32_t ADR; /*!< Offset: 0x4C Auxiliary Feature Register*/
__I uint32_t MMFR[4]; /*!< Offset: 0x50 Memory Model Feature Register*/
__I uint32_t ISAR[5]; /*!< Offset: 0x60 ISA Feature Register*/
} SCB_Type;
SCB的资料结构,属於CMSIS Cortex-M3
#define SCS_BASE (0xE000E000) /*!< System Control Space Base Address */``
#define SCB ((SCB_Type *)SCB_BASE) /*!< SCB configuration struct * /
通过以上步骤,我们就可以使用指向 SCB 资料结构的指标来access SCB内部所定义的暂存器,比如给系统控制暂存器 (SCR) 赋值:SCB->SCR=0xFF。
Configuration and Control Register (CCR)
控制 UsageFault 和 被零除和未对齐记忆体访问的行为
System Handler Control and State Register (SHCSR)
SHCSR 负责 enable/disable System exception,例如:Memory Management Fault, Bus Fault, and Usage Fault exceptions 可以使用以下语法Eable Exception
SCB->SHCSR |= SCB_SHCSR_USGFAULTENA_Msk
| SCB_SHCSR_BUSFAULTENA_Msk
| SCB_SHCSR_MEMFAULTENA_Msk; //enable Usage-/Bus-/MPU Fault
Configurable Fault Status Register (CFSR)
CFSR Register 可以被分三组
0 代表代表没有发生 Fault,1 代表发生Fault 会记录着原因。
今天介绍了 Exception registers 和 操作方式,但还有许多 Register 尚未介绍,但其实在ARM -M系列的相关文件都讲得相当清楚,这边只举几个当作范例。
Definitive Guide To the ARM Cortex-M3
>>: [DAY 11] _软件实现I2C协议以三轴感测器为例 (ADXL345)
上次说过下拉式选单的写法了,今天来说说选单内的群组 程序码示范 <select> <...
Icebear终於完成简易的食谱搜寻系统啦!!今天就献丑一下啦!! 明天Icebear会整理系统缺点...
1.钢笔工具去背 (影片Ps5) (1)用钢笔画出要去背的物件 a.拉,按着左键不要放>Alt...
哎呀,自学了两个月後刚好碰到2021的铁人赛开打,顺便来分享一下我的学习过程好了,有错的在劳烦各位大...
根据官方说明,因为历史资料的查询蛮耗资源的,有可能会拖慢系统的速度,所以官方不建议使用,而且有每5秒...