微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ARM CORTEX-M3 内核架构理解归纳

ARM CORTEX-M3 内核架构理解归纳

时间:11-21 来源:互联网 点击:
在我看来,Cotex-M3内核的主要包括:嵌套向量中断控制器(NVIC),取值单元,指令译码器,算数逻辑单元(ALU),寄存器组,存储器映射(4GB统一编址各区域功能的划分与界定),对于开发者而言,其实主要关注的主要分为三大块:

1、寄存器组2、地址功能划分映射3、中断机制(NVIC)。

1)寄存器组

Cortex-M3内核共有19组32位寄存器:

R0——R12(通用寄存器);

低寄存器组R0——R7

32位Thumb-2指令与16位Thumb指令均可访问

高寄存器组R8——R12

32位Thumb-2指令与极少数16位Thumb指令可访问

R13(堆栈指针寄存器);

主堆栈寄存器MSP(main-SP)/进程堆栈寄存器PSP(Process-SP)同一时间只能使用其中一个。MSP供操作系统内核及中断(异常)处理子程序使用,PSP只供用户的应用程序代码使用(详细使用详见3、嵌套向量中断控制器(NVIC)的总结)。

堆栈指针是4字节对齐的,故最低两位永远是00;

R14(连接寄存器)

用于存储程序返回的地址及PC的返回地址;

R15(程序寄存器)指向当前程序执行的地址;

2)特殊功能寄存器组

xPSR(程序状态字寄存器组),32位,可分为三个寄存器分别进行访问,也可以PSR或xPSR的名字直接组合访问。

应用程序PSR(APSR)

中断号PSR(IPSR)

执行PSR (EPSR)

中断屏蔽寄存器

PRIMASK单一比特位,置位后,除NMI与硬fault外,其他中断都不响应;

FAULTMASK单一比特位,置位后,除NMI外,其他中断都不响应;

BASEPRI共有9位,中断号小于等于该寄存器设置值的中断都不响应;

控制寄存器control

Control[0]0决定特权级线程模式;1用户级线程模式;

Control[1]0主堆栈;1进程堆栈;

控制寄存器只能在特权级模式下改写,handler模式永远是特权级,且只允许使用主堆栈MSP

复位后,处理器进入特权级+线程模式下;

2、地址功能划分映射

Cortex-m3是一个32位处理器,其地址总线、数据总线都是32位的,故可在4G的地址范围上资源寻址。Cortex-m3内核把4G空间划定了基本的框架,定义不同的使用用途。

0x0000 0000 ----0x1FFF FFFF (512MB)该区域为code区(flash区),供指令总线与数据总线取指取数使用;可以执行指令;

0x2000 0000 ----0x3FFF FFFF (512MB)该区域为片上SRAM区,芯片制造商可在此布设RAM,可以将代码复制到此处运行,该区域也是可以执行指令code的;低1MB空间可位寻址,通过位带别名可扩展为32Mb的位寻址。

0x4000 0000 ----0x5FFF FFFF (512MB)该区域为“片上外设”区 ,主要为片上外设的相关寄存器,即特殊功能寄存器区,同理低1MB也可位寻址;该区域不可执行代码;

0x6000 0000 ----0x9FFF FFFF(1G)该区域为片外RAM区,该区域可执行代码;

0xA000 0000 ----0xDFFF FFFF(1G)该区域为片外外设区,该区域不可执行代码;

0xE000 0000 ----0xFFFF FFFF(1G)该区域为系统区,该区域不可执行代码;

所以不同地址片段的起始地址可简记为:0,2,4,6,10,E,

该系统区又分为两部分:

内部私有外设区0xE000 0000 ----0xE003 FFFF(256KB)主要有NVIC,FPB,DWT,ITM等

外部私有外设区0xE004 0000 ----0xE00F FFFF(512+256=768KB)有ROM表,ETM,TPIU等

数据的大小端模式:CM-3既支持大端模式也支持小端模式,其中对于大端模式,ARM7中使用的是字不变大端模式,CM3中则为字节不变大端模式。虽说大小端模式都支持,但依然建议在绝大多数情况下使用小端模式,如果一些外设是大端模式,可以通过REV/REVH指令便可轻松完成端模式的转换。

3、中断机制(NVIC)

既然称之为MCU而非MPU,那么就是以控制为主,控制的一个关键指标就是实时性,能够及时对变化的情况作出反应,而这主要是通过中断机制来完成的,可以说除却运算性能,cortex-M3内核的主要修为都体现在控制的实时性上——也即中断的即时响应机制。

CM3对中断是怎么定义的呢?

一个是CM3内核异常导致当前运行程序的中断,一个是外部事件引入导致的。

系统异常主要是CM3内核层面的,复位,NMI,硬fault,这三者优先级固定且最高,此外还有总线fault、内存管理fault、用法fault等,svc系统调用服务、systick等的优先级可以通过编程来设定;这些都放在一个向量表里,存储的是中断服务函数的入口地址,32位,共256项,前16个是系统内的中断,除去保留位,系统中断共有16-5-1=10个,剩余240个外部中断IRQ,其中有三个的优先级是固定的:复位,NMI,硬fault,中断号分别为-3,-2,-1,中断号越小,优先级也就越高,其他优先级都是可编程的。此外,对于复位启动过程,M3内核的MCU与传统的单片机复

上一篇:ARM 伪指令讲解
下一篇:ARM问答

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top