首页 关于
树枝想去撕裂天空 / 却只戳了几个微小的窟窿 / 它透出天外的光亮 / 人们把它叫做月亮和星星
目录

Cortex-M4的系统控制模块SCB

系统控制模块(System Control Block, SCB)提供了系统实现信息,系统控制接口, 也包含了配置、控制、报告系统异常的功能。 该模块的寄存器被映射到了系统控制空间(System Control Space, SCS)中了。

1. ACTLR

默认情况下该寄存器为Cortex-m4提供了最优的性能,一般是不需要更改的。 但是,我们也可以在Privileged的权限下关闭一些功能。

此外还有DISFPCA和DISOOFP,干什么用的也还没弄明白。

2. CPUID

CPUID包含了处理器的版本号等实现信息。是一个只读的寄存器。

3. ICSR

中断控制和状态寄存器,提供了NMI的置位标志和PendSV、SysTick的置位和清除位。 同时还记录了正在执行和将要执行的中断编号,也标志了是否有中断被抢断了。 需要注意的是,对该寄存器进行写操作时不能同时对PENDST(SV)CLR和PENDST(SV)SET写1, 系统的运行情况将不可知。

4. VTOR

中断向量表偏移地址寄存器。中断向量表是128个word对齐的,也就是说它的低9位都是0。 对该寄存器的设置将修改中断向量表的起始地址。 而该寄存器的第29位标志了中断向量表是在SRAM中还是代码段中,有时也称该位为TBLBASE位。

5. AIRCR

应用中断和复位控制寄存器,提供了中断的优先级分组控制,记录了数据的大小端存储方式, 以及系统的复位控制。为了安全,对该寄存器的写操作必须保证VECTKEY字段写入0x5FA, 否则将忽略该写操作。

6. SCR

系统控制寄存器,控制着系统进入和退出低电压状态的方式和特征。

7. CCR

配置和控制寄存器,控制着进入Thread模式的方式和特性,也用于使能非对齐访问和除零的异常trap。

8. SHPR

系统异常服务优先级寄存器,System Handler Priority Registers。 一共有三个这样的寄存器,标记为SHPR1,SHPR2,SHPR3,它们可以按字节访问。 SHPR1用于配置memory management fault(PRI_4), bus fault(PRI_5)和Usage fault(PRI_6); SHPR2用于配置SVCall(PRI_11);SHPR3则用于配置PendSV(PRI_14)和SysTick(PRI_15)。 虽然每一个PRI_n都有8位,但低4位是只读的,只有高4位可以用来配置。

9. SHCSR

系统异常服务控制和状态寄存器,System Handler Control and State Regester。 该寄存器用于激活系统异常服务,使能fault异常中断,记录系统异常中断触发事件。

如果关闭了系统异常服务,而且产生了fault异常中断,则会触发hard fault异常事件。

10. CFSR

可配置错误异常状态寄存器,Configurable Fault State Register。 该寄存器实际上可以拆分为MEMFSR,BFSR,UFSR三个子寄存器,它们可以被单独访问。

MEMFSR对应CFSR[7:0],可以通过地址0xE000ED28直接访问,涉及的位定义如下:

BFSR对应CFSR[15:8],可以通过地址0xE000ED29直接访问,我们也可以通过0xE000ED28半字访问MEMFSR和BFSR。涉及的位定义如下:

UFSR对应CFSR[31:16],可以通过地址0xE000ED2A直接访问,涉及的位定义如下:

11. HFSR

硬件错误状态寄存器。该寄存器是可读的,对该寄存器写1将清除对应位。

12. MMAR

当MMFSR中的MMARVALID置位时,该寄存器将记录出错的地址。

13. BFAR

当BFSR中的BFARVALID置位时,该寄存器将记录出错的地址。

14. AFSR

其它错误寄存器,Auxilliary Fault State Register。由具体的处理器实现定义。

参考书目

  1. STM32F3,STM32F4 and STM32L4 Series Cortex-M4 Programming Manual, PM0214.



Copyright @ 高乙超. All Rights Reserved. 京ICP备16033081号-1