6.2
SHPR3 (System Handler Priority Register 3)
如果您的设备未实现 SysTick
计时器,则此字段为保留字段
Address: 0xE000 ED20
Reset value: 0x0000 0000
SVCall、PendSV和SysTick可编程的中断多用于在操作系统之上的软件开发中。SVC用于产生系统函数的调用请求,例如,操作系统不让用户程序直接访问硬件,而是通过提供一些系统服务函数,用户程序使用SVC发出对系统服务函数的呼叫请求,以这种方法调用它们来间接访问硬件。因此,当用户程序想要控制特定的硬件时,它就会产生一个SVC异常,然后操作系统提供的SVC异常服务例程得到执行,它再调用相关的操作系统函数,后者完成用户程序请求的服务。
另一个相关的异常是 PendSV,它和 SVC 协同使用。一方面, SVC异常是必须立即得到响应的(若因优先级不比当前正处理的高, 或是其它原因使之无法立即响应, 将上访成Hardfault),应用程序执行 SVC 时都是希望所需的请求立即得到响应。另一方面,PendSV则不同,它是可以像普通的中断一样被挂起的(不像SVC那样会上访)。OS可以利用它“延期执行”一个异常——直到其它重要的任务完成后才执行动作。挂起 PendSV 的方法是:程序中往NVIC的PendSV挂起寄存器中写 1。挂起后, 如果优先级不够高,则将延期等待执行。PendSV 的典型使用场合是在上下文切换时(在不同任务之间切换)。有两个就绪的任务,上下文切换被触发的场合可以是:
执行一个系统调用
系统滴答定时器(SysTick)中断,(轮转调度中需要)
ARMv7-M和ARMv6-M都有的SCB寄存器名称相同,但是ARMv7-M寄存器数量和有效控制bit位比ARMv6-M丰富了不少。一般来说,ARMv6-M向上兼容ARMv7-M,这意味着应用层和系统为ARMv6-M开发的级别软件无需修改即可在 ARMv7-M 上执行,这也是Arm从一个平台切换到另一个平台可以很快速的完成切换的原因,有兴趣深入研究可以参考《ARMv6-M Architecture Reference Manual》白皮书。