嵌入式系统定义
嵌入式系统是以应用为中心、以计算机技术为基础,软、硬件可裁剪,对功能、可 靠性、成本、体积、功耗有严格要求的专用计算机系统。
嵌入式系统的特点
“嵌入性”:由于是嵌入到对象系统中,因此必须满足对象系统的环境 要求,如物理环境(小型)、电气环境(可靠)、成本(价廉)等要求。
“专用性”:软硬件的裁剪性;满足对象要求的最小软硬件配置等。
“计算机系统”:嵌入式系统必须是能满足对象系统控制要求的计算机 系统。
嵌入式系统的分类
按形态的差异,一般可将嵌入式系统分为:芯片级、板级、设备级。
按体系结构,一般可将嵌入式系统分为:普林斯顿结构(冯·诺依曼结构 )和哈佛结构。
按指令集,一般可将嵌入式系统分为:CISC(复杂指令系统)和 RISC(精简指令系统)。
CISC 和 RISC 的特点
CISC 指令丰富,程序设计方便,代码量小,执行性能高。
RISC 只包含少量常用指令和必要的支持操作系统和高级语言的指令。
CISC 和 RISC 的区别
CISC 的技术复杂性在于硬件,由硬件完成部分软件功能,芯片成本高。
RISC 的技术复杂性在于软件,由软件完成部分硬件功能,芯片成本低。
CISC 代码尺寸小,指令的执行周期数多且不固定,指令集复杂庞大,编码长度可变寄存器较少,寻址模式复杂,高级语言支持由软件完成。
RISC 代码尺寸大,指令的执行周期数少且固定,指令集简单精简,编码长度固定, 寄存器较多,寻址模式简单,高级语言支持由硬件完成
普林斯顿结构和哈佛结构的区别
普林斯顿结构是由一个中央处理单元(CPU)和单存储空间组成,也称为冯诺依曼结构,即存储器存储了数据和程序,内部使用单一的地址总线和数据总线。不能同时进行取指令和取数据操作,工作速度较慢。例如 ARM7
哈佛结构是存储器分为数据和程序两个存储空间,各自有独立的程序总线和数据总线,可以进行独立编址和独立访问,有更高的性能。例如 ARM9,Cortex系列微处理器
嵌入式系统内核种类
嵌入式微处理器(MPU)由通用计算机的微处理器演变而来,芯片内部没有存储器,I/O 接口电路也很少。在嵌入式应用中,只保留与嵌入式应用紧密相关的功能部件,以保证它能以最低的资源和功耗实现嵌入式应用需求。也称单板机。
优点是可拓展性强
缺点是要配备总线和外设接口
微控制器(MCU)一般以某种微处理器为核心,集成存储器和 I/O 接口等必要功能,也称单片机。
优点是功耗低成本低
缺点是处理速度有限
数字信号处理器(DSP)更适合执行数字信号处理算法,编译效率较高,指令执行速度较高,不适合使用操作系统
ARM 处理器的主要特征
采用 RISC 体系结构
指令长度固定(32/16 位)
流水线操作,1 个时钟可执行 1 条指令
每条指令均可按条件执行
大多数数据操作都在寄存器中完成
可通过协处理器扩展指令
有高密度编码的 Thumb(16 位)
Cortex-M0
最小的 ARM CPU,功耗低,开发简单,优良的互联性
CM1
CM1 处理器是第一个专为实现 FPGA 功能而设计的 ARM 处理器。
CM3
采用较高代码密度的 Thumb-2 指令集,中断的性能提高,低功耗、低成本,高性能、易使用,ARMv7-M 体系结构。
CM3 处理器内核是嵌入式微控制器的中央处理单元,MPU微处理器,stm32f103是基于cm3内核设计的单片机,MCU微控制器
CM3 特点
• 哈佛结构
• 内核支持低功耗模式(睡眠模式、停止模式、待机模式)
• 引入分组堆栈指针机制
• 统一的存储器映射
• 位绑定操作
• 三级流水线和转移预测
• 内置嵌套向量中断控制器
CM3 中引入模式的目的
区别普通应用程序的代码 与 异常和中断服务例程的代码。
CM3 中设置两种权限的目的
提供存储器访问的保护机制,使得普通的用户程序代码不能意外地或恶意地执行涉及要害的操作。
特权级 | 用户级 | |
异常程序代码 | 处理者模式 | XXXXXX |
主程序代码 | 线程模式 | 线程模式 |
通用寄存器
R0-R7 为低组寄存器,可被所有指令访问 。
R8-R12 为高组寄存器,可以被所有的 32 位指令访问,但不能被 16 位指令访问。
堆栈寄存器 R13
CM3 处理器内核中有两个堆栈指针(PSP、 MSP),支持两个堆栈,两种堆栈都指向 R13,因此在任何时候 只有一个是可见的。当引用 R13(或写作 SP)时,引用到的 是当前正在使用的那一个,另一个必须用特殊的指令来访问(MRS,MSR 指令)。
主堆栈指针 MSP 是默认的堆栈指针,由需要特权访问的应用程序代码使用。
进程堆栈指针 PSP 用于不处于异常服务例程中的常规的应用程序代码。
MSP 可用于处理模式和线程模式,PSP 只可用于线程模式。
控制寄存器 control
用途:定义特权级别和选择当前使用的指针
control[0]=0,特权级线程模式;control[0]=1,用户级线程模式。
control[1]=0,选择 MSP(复位后的默认值);control[1]=1,选择 PSP。
仅在特权级线程模式或特权级处理者模式下操作时才允许更改 control[0];仅在特 权级线程模式下操作时才允许更改 control[1]
由于处理者模式一定是特权级且使用 MSP,所以处理者模式中 control[1]一定等于0,control 仅用于定义线程模式的特权级别和在线程模式中选择堆栈指针。
当在特权级模式下,令 control[0]=1 进入了用户级线程模式后,唯一返回特权级的途径就是触发一个中断,再由服务例程改写该位。
程序计数器 R15
存储的是当前正在执行的指令的地址,因为 CM3 内部使用了指令流水线,所以读 PC 时返回的值是当前指令的地址+4。位[0]总为 0,指令按字或半字对齐。
链接寄存器 R14
调用子程序时存储返回地址,也用于异常返回
AMBA 规范包括 AHB 系统总线和 APB 外设总线,分别适用于高速与相对低速设备的连接。
CM3 包含 5 个总线,都是 32 位,I-code 存储器总线(AHB)、D-code 存储器总线(AHB)、系统总线(AHB)、外部专用外设总线(APB)、内部专用外设总线(AHB)
存储区格式
字是 4 个字节,半字是 2 个字节
大端格式:字数据的高字节存储在低地址中,低字节存储在高地址中
小端格式:字数据的高字节存储在高地址中,低字节存储在低地址中
CM3 处理器支持非对齐的传送,数据存储器的访问无须对齐
位绑定操作
定义:位绑定操作把别名区的一个字映射到位绑定区的一位,位绑定区中每一位都映射到别名地址区的一个字,对别名地址的访问最终会变成对位绑定区的访问。对此别名区的操作只有字的最低位是有效的。
好处:提高位操作的速度;使代码量小,速度更快,效率更高,更安全;用于化简跳转程序;其他总线活动不能中断位绑定操作。
支持位绑定操作的两个内存区
0x2000 0000~0x200F FFFF(SRAM 区中的最低 1MB)
0x4000 0000~0x400F FFFF(片上外设区中的最低 1MB)
计算 位绑定区和位绑定别名区的对应关系
对于 SRAM 位绑定区的某个位,记它所在字节地址为 A,位序号位为 n(0<=n<=7), 则该位在别名区的地址为
Address = 0x2200 0000+(A-0x2000 0000)×32+4×n
对于片上外设位绑定区的某个位,记它所在字节地址为 A,位序号位为 n
(0<=n<=7),则该位在别名区的地址为
Address = 0x4200 0000+(A-0x4000 0000)×32+4×n
Cortex-M3 处理器能支持所有的 16 位 Thumb 指令集和基本 32 位 Thumb-2 指令集。
CM3 处理器使用 3 级流水:取指、解码和执行。
充分利用现有的硬件资源,提高了微处理器的运行效率。取指、解码和执行 3 步的时间是一样的,这样才实现了流水线的重叠技术。
程序计数器 R15(PC)总是指向“正在取指”的指令,而不是指向“正在执行”的指令或“正在译码”的指令。
一般来说,人们习惯性约定将“正在执行”的指令作为参考点,则:PC 值=当前程序执行位置+8 注:ARM 状态时,每条指令为 4 字节
思考题:PC 初始指向 0x4000,问执行完指令“ADD PC,PC,#4”后,PC 的值为多少?
①PC 指向 0x4000 地址,取指 ADD 指令。
②PC 指向 0x4004 地址,解码 ADD 指令。
③PC 指向 0x4008 地址,执行 ADD 指令。
④指令内容是 pc=pc+4
所以执行完指令后,PC 的值为 0x400C。
中断和异常的区别
中断来自片上外设或外扩的外设;异常因 CM3 内核的活动产生
在 CM3 中,优先级的数值越小,优先级越高。除 3 个系统异常外(优先级为负数), 所有的异常都是可编程的,但不能被编程为负数。
向量中断控制器 NVIC 的功能支持向量中断、可屏蔽中断、嵌套中断、动态优先级调整
中断、异常过程
保存现场->取向量->更新寄存器
保存现场:把 8 个寄存器的值压入当前正在使用的栈(PSP 或 MSP),进入了服务例程后就一直使用 MSP
取向量:从向量表中找出对应的服务程序入口地址
更新寄存器:选择堆栈指针 MSP/PSP,更新堆栈指针 SP,更新连接寄存器 LR,更新程序计数器 PC。
占先
在中断处理过程中,当一个新的中断比当前的中断优先级更高时,处理器将打断当前的流程,响应优先级更高的中断,此时产生中断嵌套。占先是一种对更高优先级中断的响应机制。
末尾连锁
在当前的中断执行返回后,系统处理挂起的中断时,继续使用上一个中断已经压栈 的成果。末尾连锁是处理器用于加速中断响应的一种机制。
迟来
如果前一个中断服务程序尚未进入执行阶段,并且迟来中断的优先级比前一个中断的优先级高,则迟来的中断弄够抢占前一个中断得到优先服务,这种现象称为迟来。是加速占先的一个机制
返回
在没有挂起中断或没有比压栈的中断优先级更高的中断时,处理器执行出栈操作,并返回到被压栈的中断服务程序或线程模式。若在状态恢复过程中出现一个中断,且该中断的优先级比正在返回的中断服务程序或线程更高,则处理器放弃状态恢复操作,并将新的中断作为末尾连锁处理。
APB2 总线:GPIO 端口 A~G,TIM1、8,USART1(高速外设)
APB1 总线:TIM2、3、4、5,USART2、3、4、5(低速外设)