第二章 ARM Cortex体系架构
2.1ARM Cortex体系概述
-
ARM(Advanced RISC Machine)公司在经典处理器ARM11以后的产品都改用Cortex命名,主要分成A、R和M三类,旨在为各种不同的市场提供服务,A 系列处理器面向尖端的基于虚拟内存的操作系统和用户应用;R系列处理器针对实时系统;M系列处理器针对微控制器。
-
CISC和RISC:
指令集可分为复杂指令集(Complex Instruction Set Computing,CISC)和精简指令集(Reduced Instruction Set Computing ,RISC)两部分。2.2 Cortex-M4内核基础
-
基本技术:
- 32-bit微控制器: 32-bit 寄存器组、存储器接口。
- 哈佛架构:独立的指令总线和数据总线。
- 存储空间:4GB。
- 寄存器:寄存器 (R0 到 R15) 和 特殊功能寄存器。
- 运行模式:线程模式和处理模式;特权级和用户级。
- 中断和异常:内置嵌套向量中断控制器;支持11 种系统异常外加240种外部 IRQ。
- 总线接口:若干总线接口允许 Cortex-M4 。
- MPU:一个可选的存储器保护单元允许对特权访问和用户程序访问制定访问规则。
- 指令集:Thumb-2指令集;允许 32位指令和16位指令被同时使用。
- 内部调试组件:提供在线调试功能,例如:断点、单步、变量查看
-
处理器工作模式:用户、系统、快中断、中断、管理、中止、未定义模式,共七种处理器模式
其中,除用户模式外,其它模式均为 特权模式
其中,快中断、中断、管理、中止、未定义五种为异常模式 -
寄存器 的功能是CPU内部用来存放 二进制代码的一些小型存储区域,用来 暂时存放 参与运算的数据和运算结果。它是由具有存储功能的 触发器 组合起来构成的。一个触发器可以存储1位二进制代码,故存放n位二进制代码的寄存器,需用n个触发器来构成。
-
寄存器也不尽相同。寄存器最起码具备以下几种功能。
清除数码:将寄存器里的原有数码清除。
接收数码:在接收脉冲作用下,将外输入数码存入寄存器中。
存储数码:在没有新的写入脉冲来之前,寄存器能保存原有数码不变。
输出数码:在输出脉冲作用下,才通过电路输出数码。
仅具有以上功能的寄存器称为数码寄存器;有的寄存器还具有 移位功能,称为移位寄存器。 -
寄存器组:r0~r12 ,为13个通用目的寄存器
低组寄存器 , r0-r7可以被指定通用寄存器的所有指令访问
高组寄存器 , r8-r12可以被指定通用寄存器的所有32位指令访问 ,16位Thumb指令不能访问它们,32位的Thumb-2指令则不受限制。 -
R13,两个堆栈指针 主堆栈和进程堆栈 :
Cortex-M4内核有两个堆栈指针:MSP和PSP
结束复位后,所有代码都使用主堆栈 -
程序计数器R15(PC) 存储当前执行的指令地址。
-
不同工作模式和处理器状态下,程序员访问的寄存器也不尽相同。
-
CPSR(Current Program Status Register)是当前程序状态寄存器,用于存储处理器的当前状态信息。在处理异常时,处理器会切换到异常模式,并且每种异常模式都有一个专用的SPSR(Saved Program Status Register),即程序状态保存寄存器
每种异常都有自己的SPSR,在进入异常时它保存CPSR的当前值,异常退出时可通过它恢复CPSR。 -
控制寄存器:用来定义特权级和堆栈指针的选择。
这个寄存器有两位。 -
操作模式:两种模式和两种特权等级。操作模式决定控制器运行正常程序或运行异常处理程序。
软件在特权访问级别可以使程序转换到用户访问级别。
用户程序不能够通过写控制寄存器直接变回特权状态。 -
工作模式和特权级别:
工作模式 用于区别普通 应用程序的代码和异常服务 例程的代码(包括中断服务例程的代码)
特权级别 可以提供一种存储器访问的 保护机制,使得普通的用户程序代码不能意外地,甚至是恶意地执行涉及到要害的操作。
特权访问和用户访问(非特权访问)的区别 -
线程模式和处理器模式:
线程模式:
在复位时控制器进入线程模式
异常返回时控制器进入线程模式
特权和用户(非特权)代码能够在线程模式下运行
处理器模式:
出现异常时控制器进入处理器模式
在处理器模式中,所有代码都是特权访问的
2.3存储器系统
-
存储器(Memory)是系统中的记忆设备,用来 存放程序和数据。
-
存储器的分类
按作用分:主存储器、辅助存储器、缓冲存储器;按存取方式分:随机存储器(RAM)、只读存储器(ROM)、顺序存储器(SAM)和直接存取存储(DAM)器四类;
按存储介质分: 半导体存储器、磁表面存储器和光盘存储器;
按存取原理分:单体单字存储器、单体多字存储器 、多体单字交叉存取存储器、多体多字交叉存取存储器
-
TM(存储周期):连续启动一个存储体所需要的时间间隔。
-
存储器频宽:是指存储器可以提供的数据传送率,一般用每秒钟所传送的信息位数来衡量
-
单体 指只有一套地址寄存器和地址译码器,CPU每次访问可同时读出多个存储字。
-
Cortex-M4内核的存储器系统的主要特性:
可寻址 4GB(2^32)线性地址物理空间。
支持 小端和大端的存储器系统。Cortex-M4处理器可以选择使用小端或者大端的存储器系统。 -
存储器介质:
RAM: SRAM和DRAM
ROM: ROM、PROM、EPROM、EEPROM
FLASH: NOR FLASH、NAND FLASH -
大端存储:字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中。
-
小端存储:与大端存储格式相反,即低地址中存放字数据的低字节,高地址存放字数据的高字节。
-
小端格式存储是Cortex-M4内核 默认的存储器格式
-
高速缓冲存储器(Cache):
作用:存放当前使用得最多的程序代码和数据(即主存中部分内容的副本);
嵌入式系统中Cache全部都集成在嵌入式微处理器内;
种类:数据Cache、指令Cache或混合Cache;
不同的处理器其Cache的大小不一样;一般32位的嵌入式微处理器都内置Cache。 -
Cache命中:CPU每次读取主存时,Cache控制器都要检查CPU送出的地址,判断CPU要读取的数据是否在Cache中,如果在就称为命中。
-
Cache未命中:读取的数据不在Cache中,则对主存储器进行操作,并将有关内容置入Cache。
-
写入方法:
通写:写Cache时,Cache与对应内存内容同步更新。
回写:写Cache时,只有写入Cache内容移出时才更新对应内存内容。 -
高速缓存(Cache)的分类:统一Cache、独立的数据/程序Cache
-
存储器映射:给存储器地址命名的过程,就叫存储器映射
例:各款M4微控制器的NVIC 和MPU 都在相同的位置布设寄存器,使得它们变得通用。 -
存储空间4GB被 划分为多个存储区域
2.4 异常和中断
-
中断处理的 执行硬件:Cortex-M4处理器都会提供一个 **嵌套向量中断控制器(NVIC)**完成中断处理。
-
Cortex-M4微处理器的 NVIC支持中断源:
多达240个 IRQ(中断请求),由外设产生,如定时器产生、I/O端口和通信接口(例如,UARTI2C);
非屏蔽中断(NMI),由外设产生,如看门狗定时器;
SysTick定时器中断(System Tick),来自处理器内核;
系统异常。来自处理器内核或软件生成 -
Nested vectored interrupt controlled, 嵌入向量中断控制器,属于内核(M3/4/7)一个外设;
作用:控制着芯片的中断相关功能; -
中断向量表:定义一块固定的内存,以4字节对齐,存放各个中断服务函数程序的首地址;编号1-15是系统异常,编号16以上为中断输入,大多数异常,包括所有的中断,有可编程的优先级,少部分的系统异常有固定优先级。
-
中断向量表 入口 定义在 启动文件,当发生中断,CPU会自动执行对应的中断服务函数
-
STM32中断优先级基本概念
抢占优先级(pre):高抢占优先级可以打断正在执行的低抢占优先级中断;
相应优先级(sub):当抢占优先级可相同时,相应优
先级高的先执行,但是不能相互打断;
当抢占和响应优先级相同时,自然优先级越高的,先执行;
自然优先级:中断向量表的优先级;
数值越小,表示的优先级越高;
习题
-
列举出三家公司生产的Cortex-M3和Cortex-M4内核控制器。
M3 STM32F1系列
M4 STM32F4系列 -
列举Cortex-M3/M4处理器使用的寄存器组,并说明R13、R14、R15的功能
Cortex-M3/M4处理器使用的寄存器组包括以下内容:
通用寄存器(R0-R12)
特殊功能寄存器(R13-R15)
状态寄存器(xPSR)其中,R13、R14、R15的功能如下:
R13(SP,堆栈指针):用于指向当前堆栈的顶部。Cortex-M处理器有两个堆栈指针:主堆栈指针(MSP)和进程堆栈指针(PSP),R13可以指向其中一个。
R14(LR,链接寄存器):用于存储函数调用返回地址。当执行函数调用时,返回地址会被存储在R14中,以便函数执行完毕后能够返回调用点。
R15(PC,程序计数器):用于存储当前正在执行的指令地址。程序计数器会自动递增,以指向下一条要执行的指令地址。
-
试说明Cortex-M3/M4处理器两种模式和两种特权的使用。
-
两种模式
-
线程模式(Thread Mode):
这是处理器在复位后默认的运行模式。
主要用于执行应用程序代码。
可以在特权级别和非特权级别下运行。
处理模式(Handler Mode):
主要用于处理异常和中断。
总是在特权级别下运行。
两种特权级别 -
特权级(Privileged):
可以访问所有的系统资源,包括特殊功能寄存器和所有内存区域。
可以切换堆栈指针(SP)和模式。
线程模式和处理模式都可以在特权级下运行。 -
非特权级(Unprivileged):
只能访问有限的系统资源,不能访问某些特殊功能寄存器和受保护的内存区域。
不能切换堆栈指针(SP)和模式。
仅线程模式可以在非特权级下运行。
-
什么是大端格式和小端格式?
大端格式
定义:高字节存储在低地址,低字节存储在高地址
小端格式
低字节存储在低地址,高字节存储在高地址 -
试说明存储器分类及其用途。
按作用分:主存储器、辅助存储器、缓冲存储器;
按存取方式分:随机存储器(RAM)、只读存储器(ROM)、顺序存储器(SAM)和直接存取存(DAM)器四类;
按存储介质分: 半导体存储器、磁表面存储器和光盘存储器;
按存取原理分:单体单字存储器、单体多字存储器 、多体单字交叉存取存储器、多体多字交叉存取存储器
-
试说明异常响应过程。
异常检测、处理器判断异常优先级、按照异常向量表查找入口地址、处理器保存上下文、跳转到异常处理程序、执行异常处理程序、异常返回恢复向前保存的上下文程序、恢复正常执行
-
Cortex-M3/M4处理器中断向量处存放的是对应中断的什么信息?
中断向量表存放的是对应中断处理程序的入口地址。中断向量表是一个存储在固定地址的表格,每个表项对应一个中断或异常,表项中存放的是该中断或异常的处理程序的起始地址。
-
Cortex-M3/M4处理器复位后执行的第一项操作是什么?第二项操作是什么?
第一项操作:加载初始堆栈指针值
第二项操作:跳转到复位处理程序