cortex-M3内核简单分析
1、cortex - M3内核:只是arm公司提供的一个内核
基于cortex - M3的MCU:包括内核+内存+外设等一些其他的器件。
2、cortex -M3架构的特点:
(1)处理器内核,数据路径,寄存器,存储器接口都是32位的。
(2)采用哈佛结构,数据总线和指令总线是独立的,取指令和读数据可以同时进行。
(3)支持大段模式和小端模式
3、寄存器R0-R12 通用寄存器 一般16位的thumb指令能访问R0-R7 ;
4、异常的概念:
凡是打断程序执行顺的事件都被称为异常。
5、CM3支持两种操作模式:handler mode 和 thread mode
同时还是支持两级特权操作: 特权级和用户级
从用户级切换到特权级唯一的途径就是异常。
6、特权级线程模式和用户级线程模式都可以触发异常到特权级handler mode,并且会异常返回。
复位进入特权级线程模式,特权级线程模式通过修改控制寄存器进入到用户级线程模式。
7、内建的嵌套中断控制器
*可嵌套中断支持
当异常发生时,硬件会自动比较异常的优先级是否比当前的优先级高,如果必当前的优先级高就会服务新来的中断,–立即强占
*向量中断支持
当中断响应后,CM3会自动定位到一张向量表,并且根据中断号从表中找出ISR的入口地址,跳转过去执行。(节省时间延迟时间缩短)
*动态优先级调整
软件运行期间可以更改中断的优先级,如果修改了当前的优先级,当前中断是不会自己打断自己的,从而没有重入风险。
*中断延迟大大缩短
*中断可屏蔽
可以任意屏蔽中断序号,也可以全部屏蔽。是为了让时间关键的任务能在死线到来之前完成,而不被干扰。
8、存储器映射
存储器大小是4G,分成6个区间,Cortex-M3内部拥有一个总线基础设施,在此基础上,甚至允许这些区间之间“越权使用”。
9、指令流水线
取指令(F)–解码(D)–执行(X)三级指令,
pc指向预取指令,pc地址与执行的地址相差8 (pc-8=x)
0x1000 mov (执行此处)
0x1004 sub (解码此处)
0x1008 mul (pc指向此时)
0x100c dev
当发生指令跳转时:
跳转到目的地后用LR记录返回地址,并且将当前的D、X,清空,如果预取指令再一周期将LR的值减去4
10、复位发生后指向默认的MSP,而PC的值是4,
11、UAL(统一汇编语言),但是仍然允许使用传统的 Thumb 语法。不过有一项必须注意:如果
使用传统的 Thumb 语法,有些指令会默认地更新 APSR,即使你没有加上 S 后缀。如果使用
UAL 语法,则必须指定 S 后缀才会更新。
12、
在UAL 下,你可以让汇编器决定用哪个,也可以手工指定是用 16 位的还是 32 位的:
ADDS R0, #1 ;汇编器将为了节省空间而使用