1 PPB内存映射总览
由Cortex-M7的内存映射模型可知,0xE000_0000~0xE00F_FFFF地址空间为私有外设总线 (Private peripheral bus,PPB)的内存区域,其具体的地址映射如表1所示。
表1 PPB寄存器内存映射
注释后缀的相关含义如下:
a,表示该外设是可选的;
b ,软件可以通过读MPU Type Register(位于地址0xE000ED90),以确认是否配有MPU;
其中,Cortex-M7处理器的核心外设包括以下几个部分:
① Nested Vectored Interrupt Controller
嵌套向量中断控制器,包含一个不可屏蔽中断(non-maskable interrupt, NMI),最大支持256个中断优先级,其 “向量” 指示着中断服务函数(interrupt service routines, ISRs)响应的方式不再通过软件编程来实现,即由硬件堆叠的寄存器组和相应可挂起的多指令加载和存储指令(可被中断打断,给中断让路),来实现从中断响应到ISR入口的快速选择这一过程;
② System Control Block
系统控制块(SCB),为软件提供了处理器控制接口,包含系统控制、配置和异常上报等,中断向量表偏移通常也是通过系统控制块中的Vector Table Offset Register来配置的;
③ System timer
系统时钟(SysTick),是一个24位的自减(count-down)计时器,可以作为RTOS的系统时钟,与其他硬件定时器相比,其优点在于,作为内核的私有外设,非特权的用户级代码无权染指,安全性也就更好;
④ Integrated instruction and data caches(可选)
可选的集成指令和数据高速缓存;
⑤ Memory Protection Unit(可选)
MPU,内存保护单元,最大支持8或16个不同内存区域(regions)的属性设置,还支持一个可选的预定义的基础背景内存区域(background region)设置;
⑥ Floating-point unit(可选)
FPU,可选,支持符合IEEE754标准的32位单精度浮点运算和64位双精度浮点数运算;
此外,PPB的内存区域为不可执行(Execute Never,XN)的强排序内存区域(Strongly-ordered memory),如果尝试对该内存区域取指执行,会直接触发错误异常。
2 寄存器通用描述
2.1 寄存器类型(register type)
寄存器类型描述如表2所示:
RW | Read and write,可读可写 |
RO | Read-only,只读 |
WO | Write-only,只写 |
RAZ | Read As Zero,读回0 |
WI | Write Ignored,写忽略 |
2.2 寄存器访问权限
寄存器的访问权限主要有Privileged和unprivileged两种,具体来说:
① Privileged
特权级,只有特权级的软件可以访问该寄存器。这也意味着只有在中断处理函数或特权级的线程模式下才可以访问该寄存器;如果在非特权级线程模式下访问该寄存器,则会直接触发BusFault异常。
② unprivileged
非特权级,特权级和非特权级的软件都可以访问该寄存器。