移植ucosII到STM32F103ZE(一)
6.
Cortex-M3使用一个3级流水线,分别是:取指,解码和执行。


7.
Cortex-M3异常类型:
Cortex-M3异常类型分为两种,分别是系统异常(编号1-15,0号为没有异常在运行)和外部中断(大于等于16号)。原则上,CM3支持3个固定的高优先级和多大256级的可编程优先级。后240个是外部中断,也就是“意外突发事件”,来自各种片上外设和外扩的外设,属于异步的,而前15种异常是CM3内部活动产生的,对CM3来说是同步的。
NVIC中,每个中断都有一个优先级配置寄存器(1个byte),用来配置该中断的优先级。但该寄存器并不是每个位都被使用,不同制造商生产的芯片不相同,例如STM32使用4位,也就是说stm32支持16个可编程优先级。
注意该寄存器是以MSB对齐的,因此stm32每个中断的优先级配置寄存器7:4位有效,3:0位无效。
《STM32_RM_CH_V10_1所有型号中文参考手册》130

Cortex-M3异常类型
Cortex-M3 中断优先级:
对于优先级,CM3又分为抢占优先级和亚优先级,NVIC中的应用程序中断及复位控制寄存区(AIRCR)的优先级分组(10:8)描述如何划分抢占优先级和亚优先级。(具体看数据手册)

Cortex-M3异常向量表
向量表:当发生了异常并且要响应它时,CM3需要定位其服务例程的入口地址,这些入口地址存储在异常向量表中。

SVC和PendSV
SCV(系统服务调用,也简称系统调用)和PendSV(可悬起系统调用),这两个多用在上了操作系统的软件开发中。SVC用于产生系统函数的调用请求,例如操作系统通常不让用户程序直接访问硬件而是通过提供一些系统服务函数,让用户程序通过SVC发出对系统服务函数的呼叫请求。主要是用于分特权级和用户级的操作系统,ucosii不区分特权级和用户级。移植时这个可以删除。
PendSV,可悬起的系统调用,可以像普通中断一样被悬起,PendSV一般是使用在上下文切换时,就是任务切换,是ucosii移植过程中最重要的中断。主要有两点:
a、
b、
8.
NVIC,向量中断控制器,是cortex-M3不可分离的部分,与内核的逻辑紧密耦合。NVIC的寄存器以存储器映射的方式来访问,除了包含控制寄存器和中断处理的控制逻辑外,还包含MPU,SysTick定时器以及调试控制相关的寄存器。 NVIC的访问地址为0xE000_E000。(具体看数据手册)
每个外部中断都在NVIC的下列寄存器中“挂号”:
Ø
Ø
Ø
Ø
另外,下列寄存器也对中断处理有重大影响:
Ø
Ø
Ø
Ø
9.
当CM3开始响应一个中断时:
1.xPSR, PC, LR, R12以及R3‐R0入栈;
2.取向量;
3.选择堆栈指针MSP/PSP,更新堆栈指针SP,更新连接寄存器LR,更新程序计数器PC。
对移植ucosii 来说,需要注意1,3
嵌套的中断:
CM3内核以及NVIC,已经内建了对中断嵌套的全力支持,根本无需使用汇编去写封皮代码(wrapper code),注意中断嵌套不能过深即可。
10.
评论