一、ARM Cortex-M3处理器的构成部分
ARM Cortex-M3微处理器由ARM Cortex-M3内核和调试系统构成。
1.内核结构:
将CPU(Cortex-M3内核)、存储器、定时器/计数器、I/O等集成在一个芯片上。
2.寄存器:
存储器是用来存储二进制数据的,实际是一个时序逻辑电路,一个触发器可以存储一位二进制数据,触发器由多个与非门等基本门电路构成。
寄存器有两大类:
- CPU内部的寄存器,比如Cortex-M3中的通用寄存器R0、R15(PC)等。一般没有特殊说明,寄存器多指CPU内部的寄存器。
- 外设I/O接口中的寄存器,I/O接口与存储器统一编址,通过软件编程对寄存器进行读或者写操作,即可实现对外设的控制。
寄存器一般分为两类:
- 通用寄存器:保存指令执行过程中临时存放的寄存器操作数和中间结果。
- 特殊功能寄存器:用于外设控制相关的操作。
3.存储器:
ARM Cortex-M3系列微处理器采用存储器与I/O设备(外设)统一编址的方式,设置部分存储器地址范围用于外设的访问,将这种通过存储器地址访问外设的方式,称为存储器地址映射。(也可以通过访问不同的存储器地址来区分内存单元和I/O口。)
存储器映射,就是将芯片中或芯片外的FLASH、RAM和外设接口等进行统一编址,用于程序存储、数据存储、寄存器和外设。
uARM Cortex-M3能够寻址的最大空间是4GB,寻址范围为 0x00000000~0xFFFFFFFF。
4.中断与异常:
-
打断程序正常执行顺序的事件,都被称为异常。
-
中断一般指来自外部的片上外设或外扩的外设的中断请求事件。
Cortex-M3内核可支持256种异常和中断:
- 中断编号1~15为系统异常。
- 大于等于16的则全是外部中断,共240个外部中断通常外部中断写作IRQs, Cortex-M3具有256级的可编程中断优先级设置,功能十分强大。
Cortex-M3内核集成了一个外设——NVIC用于专门负责中断。
作用:
- 统一管理和配置中断
- 通过优先级来控制中断的嵌套和调度(在NVIC中,优先级的数值越小,则优先级越高)。
特性:
-
可嵌套中断支持,即高优先级的中断可以打断低优先级的中断。
-
向量中断支持,缩短中断延迟时间。
-
动态优先级调整支持。软件可以在运行期间更改中断的优先级。
-
引入新特长新技术,中断延迟大大缩短。
-
中断可屏蔽。
中断过程:
-
保存现场:处理器将相关的寄存器xPSR、PC、LR、R12及R0~R3压入堆栈中。如果当前使用的是PSP,则压入进程堆栈,否则压入主堆栈。
-
取向量:从中断向量表中找到相应的中断服务程序的入口地址。
-
更新寄存器:将堆栈指针进行更新,在向量取出后,程序寄存器指针(PC)指向中断服务程序的入口地址,更新程序寄存器指针(PC)以及更新链接寄存器(LR)。
二、冯·诺依曼结构与哈佛结构
计算机的构成
计算机由运算器、控制器、存储器、输入设备和输出设备五大部件组成,早期的计算机多是以运算器为中心的冯·诺依曼结构计算机。随着微电子技术和集成电路的发展,将运算器和控制器集成在一块芯片上,统称为CPU,现代计算机则以存储器为中心,采用总线技术进行各部件间的信息传输。
1.冯·诺依曼结构
冯·诺依曼结构也称普林斯顿结构,十一周指令和数据采用二进制表示,且存储在同一个存储器中,并经同一条总线传输的存储器结构。
特点:
-
指令地址和数据地址指向同一个存储器的不同物理位置,统一编址,宽度相同。
-
由于指令和数据放在同一个存储器中,因此冯诺依曼结构的计算机不能同时既取指令又取数据
2. 哈佛结构
特点:
- 指令存储器和数据存储器独立编址、独立访问
- 数据和指令分别存储在两个独立的存储器中
- 使用两条独立的总线分别与CPU进行信息交换
- 数据和指令的存储可以同时进行
- 容易实现指令流水
三、ARM存储模式
计算机的存储器是以字节为单位进行划分的,每个地址单元都对应着一个字节,一个字节占8位(bit)。
当数据由多个字节组成时,数据在内存中的存储方式有两种:大端模式和小端模式。
-
大端模式:数据的高字节存放在内存低地址处,数据的低字节存放在内存高地址处。
-
小端模式:数据的低字节存放在内存低地址处,数据的高字节存放在内存高地址处
大小端的举例说明:
现有一个32位的数据0x12345678,存放在内存地址为0x4000~0x4003处,若按小端模式进行存放,则其最低字节数据0x78存放在内存地址_____处;若以大端模式存储,则最高字节数据0x12存放在内存_____处。
内存地址 | 0x4000 | 0x4001 | 0x4002 | 0x4003 | |
数据(十六进制数) | 小端 | 0x78 | 0x56 | 0x34 | 0x12 |
大端 | 0x12 | 0x34 | 0x56 | 0x78 |
四、CISC和RISC
CISC既有简单指令也有复杂指令,后来人们发现典型程序中80%的语句都是使用计算机中20%的指令,而这20%的指令都属于简单指令;因此花再多时间去研究复杂指令,也仅仅只有20%的使用概率,并且复杂指令会影响计算机的执行速度。既然典型程序的80%都是使用简单指令完成,那剩下的20%语句用简单语句来重新组合一下模拟这些复杂指令就行了,而不需要使用这些复杂指令,于是RISC就出现了。
1. RISC
全称Reduced Instruction Set Compute,精简指令集计算机。
特点:
-
选用使用频度较高的一些简单指令 。
-
指令的指令长度固定。
-
指令格式和寻址方式的种类较少。
-
便于指令的流水线操作。
-
绝大部分指令的操作均在运行速度最快的寄存器内完成。
-
采用优化的编译程序来生成高效的目标代码。
2.CISC
CISC全称Complex Instruction Set Computers,复杂指令集计算机。
特点:
- 指令系统比较丰富。
-
指令字长不固定。
-
指令格式较多。
-
寻址方式多。
-
绝大多数指令需要多个时钟周期才能执行完毕。
-
更多地应用于桌面、高性能计算机领域
3.CISC和RISC对比
指标 | CISC | RISC |
价格 | 硬件结构复杂,芯片成本高 | 硬件结构较简单,芯片成本低 |
流水线 | 减少代码尺寸,增加指令的执行周期数,注重硬件执行指令的功能性 | 使用流水线降低指令的执行周期数,增加代码密度 |
指令集 | 指令长度不固定,大量的混杂型指令集,有专用指令完成特殊功能 | 指令长度固定,简单的单周期指令,不常用的功能由多个简单指令组合完成 |
功耗与体积 | 含有丰富的电路单元,功能强,体积大,功耗大 | 处理器结构简单,体积小,功耗小 |
设计周期 | 长 | 短 |
应用范围 | 通用桌面机、高性能计算机 | 嵌入式领域、移动设备 |
五、流水线技术
每条指令分解为多步,并让各步操作重叠,从而实现几条指令并行处理的技术,称为流水线技术。
ARM Cortex-M3微控制器采用的三级流水线:取指—译码—执行。
1 . 取指(FI):将指令从存储器中取出。
2 . 译码(DI):对所取到的指令进行翻译。
3 . 执行(EI):执行指令。
流水线的技术指标通常用吞吐率、加速比和效率三项指标来衡量。
1.吞吐率:
单位时间内流水线所完成的指令数或输出结果的数量。
流水线执行n条指令所需时间:所需时间=完成一条指令所需时间 +(指令条数n-1)× 时间最长的指令段。
吞吐率表示为:吞吐率=指令条数/指令流水线所需时间
指令所需时间举例说明:
现有一个三级指令流水线分为取指、分析和执行三个部分,其中,取指周期为1ns,分析指令周期为3ns,执行指令周期为2ns,则完成100条指令其吞吐率为多少?
完成第一条指令需要1+3+2=6ns,即若不采用指令流水操作,完成一条指令需6ns。由于分析指令所用时间最长为3ns,那么从第二条指令开始,每隔3ns就能完成一条指令,完成100条指令所需要的流水时间为:
6ns+(100-1)×3ns=303ns,
则吞吐率为:
100/303ns。
六、ARM
1.ARM基础介绍:
ARM专门从事基于RISC技术芯片的设计开发,不直接生产芯片,而是转让技术设计许可,由合作公司生产各具特色的芯片。
-
ARM是一家公司,在全球半导体行业技术领先,其主要业务是设计16位和32位嵌入式处理器。
-
ARM是一种技术的名称,是一个Advanced RISC Machines 32位RISC处理器体系结构。
-
ARM是一类微处理器芯片或产品的统称,是采用ARM技术开发的RISC处理器的通称。
2.ARM体系结构:
- 体系结构主要包括微处理器所支持的指令集和基于该体系结构下微处理器的编程模型。
- 对于程序开发人员来说,体系结构最重要的部分是此微处理器提供的指令系统和寄存器组。
七、STM32扩展
1.时钟系统:
由于STM32的外设时钟复杂,因此需要有一套完整的时钟系统来进行时钟管理,这就是STM32的时钟系统。STM32的时钟系统由RCC(Reset and Clock Control,复位与时钟控制器)产生,用来为系统和各种外设提供所需的时钟频率,以确定各外设的工作速度。
其具有5个时钟源:
- HSI:High Speed Internal,高速内部时钟,由内部8MHz的RC振荡器生成,可作为系统时钟或2分频后作为PLL输入;(特点:时钟频率精度差,不稳定。)
- HSE:High Speed External,高速外部时钟,可外接一个外部时钟源,或者通过OSC_IN和OSC_OUT引脚外接晶振,允许外接的晶振频率范围为4~16MHz,通常使用8MHz。(特点:精度高,稳定。)
- LSI:Low Speed Internal,低速内部时钟,由内部RC振荡器产生,频率约40kHz,主要为独立看门狗(IWDG)和自动唤醒单元提供时钟。
- LSE:Low Speed External,低速外部时钟,通过OSC32_IN和OSC32_OUT引脚外接频率为32.768kHz的晶振,主要为RTC(Real-Time Clock,实时时钟部件)提供低速高精度的时钟源。
- PLL:Phase Locked Loop,锁相环,保证外部输入时钟信号与内部振荡信号同步(频率和相位相同),以保证输出频率的稳定。另一方面,也可用于倍频HSI或HSE,其时钟输入源可选择为HSI/2,HSI或者HSE,倍频可选择2~16倍,但其输出频率最大不得超过72MHZ。
存储空间及其地址分配:
0xFFFFFFFF | 内部外设 |
0xE0000000 | |
0xDFFFFFFF | Not Used |
0xC0000000 | |
0xBFFFFFFF | FSMC Register |
0xA0000000 | |
0x9FFFFFFF | FSMC Bank3-Bank4 |
0x80000000 | |
0x7FFFFFFF | FSMC Bank1-Bank2 |
0x60000000 | |
0x5FFFFFFF | 片上外设 |
0x40000000 | |
0x3FFFFFFF | SRAM区 |
0x20000000 | |
0x1FFFFFFF | Flash代码区 |
0x00000000 |