1、ARMCortex-M3的STM32系列微型计算机的组成硬件和软件计算机中CPU能直接提供的运算有算术运算和逻辑运算。二进制算数和逻辑运算补码算术运算及溢出判别进行X+Y运算,利用CPU内部的加法器可直接计算得到。加法运算X-Y运算,会被转换为X+(-Y),此时只需将-Y转换为补码,仍可通过加法器来实现。减法运算二进制算数和逻辑运算例:用补码运算计算11-7=?取低八位二进制算数和逻辑运算例:A=17H,B=09H,计算A+B(重点关注对FLAG寄存器各位的影响)执行后:结果为20H标志寄存器中的标志位:CF=0SF=0ZF=0OF=0PF=0000101110000100100100000无
2、进位最高位是01的个数为奇无溢出结果不为0二进制算数和逻辑运算补码算术运算及溢出判别进行带符号数计算时,如果计算的结果超出了二进制带符号数的表达范围,就被称为溢出。对运算结果是否有溢出的判断,可通过“双进位”法来进行。溢出判别逻辑运算是按照二进制的最小单位Bit(位)来进行的,常用的逻辑运算有,与、或、异或、非等。二进制算数和逻辑运算与0相与得0,与1相与保持不变。“与0”运算可以将指定位清0。与运算与1相或得1,与0相或保持不变。“或1”运算可以将指定位置1。或运算逻辑运算0011B0101B0111B0011B0101B0001B二进制算数和逻辑运算与1相异或等于取反,与0相异或保持不变。
3、异或运算可以对指定位求反。异或运算按位取反,利用非运算可以对所有位求反。非运算1001B0011B0101B0110B二进制算数和逻辑运算例1:用逻辑运算将ASCII码实现az和AZ之间的转换解答:首先要清楚大写字母和小写字母的区别小写az对应的ASCII为:61H(01100001B)7AH(01101010B)大写AZ对应的ASCII为:41H(01000001B)5AH(01000001B)小写大写:小写字母&11011111B(DFH)大写字母大写小写:大写字母|00100000B(20H)小写字母二进制算数和逻辑运算问题与思考1.1.计算机硬件包含哪些组成部件?2.2.微型计算机的C
4、PUCPU是如何执行指令的?什么是指令流水线?3.3.什么是内存,内存容量由什么决定,什么是存储单元和内存地址?4.CPU4.CPU是如何访问内存的?需要哪些信号线,各信号的作用是什么?5.5.什么是寄存器?寄存器的物理位置在哪里,作用是什么?CPU?CPU如何访问寄存器?6.6.几个关键的寄存器PCPC、SPSP、FLAGFLAG的作用是什么,它们在什么情况下会发生改变?7.7.堆栈区的功能是什么,通常在什么情况下使用,它是如何访问的?微型计算机的硬件组成微型计算机的冯诺依曼结构指令流控制命令数据流微型计算机系统硬件的五大组成部分最核心的控制器和运算器部分由CPU承担,所有操作都在控制器发出
5、的控制信号的控制下完成的。控制器根据程序产生控制信号,程序则由编程人员编制并存放在存储器中。微型计算机的硬件组成执行算术运算和逻辑运算的部件。由累加器(Accumulator,A)、暂存器(Temporary,TMP)、算术逻辑单元(ArithmaticLogicUnit,ALU)、标志寄存器(FlagRegisters,F)和一些逻辑电路组成。运算器微型计算机的硬件组成控制器是指令执行部件,包括取指令、分析指令(指令译码)和执行指令,由指令寄存器(InstructionRegister,IR)、指令译码器(InstructionDecoder,ID)和定时控制电路(TimingandCont
6、rol)等组成。计算机的所有操作都是在控制器的控制下完成的。控制器微型计算机的硬件组成存储器是计算机中存储程序和数据的部件。计算机的存储器分为两大部分,一部分为内部存储器或主存储器,简称内存或主存;另一部分为外部存储器或辅助存储器,简称外存或辅存。存储器微型计算机的硬件组成计算机的硬件组成如何?运算器的组成及功能?控制器的组成及功能?问题与思考Thanks微型计算机的硬件组成计算机中存储程序和数据的部件。可分为:a)内部存储器(内存)/主存储器(主存)b)外部存储器(外存)/辅助存储器(辅存)存储器微型计算机的硬件组成存储容量描述存储器存储二进制信息量多少。存储二进制信息的基本单位:位(bit
7、,b)8个二进制位组成的通用基本单元:字节(Byte,B)微型计算机中通常以字节为单位表示存储容量。存储容量单位换算1KB=1024B1MB=1024KB1GB=1024MB1TB=1024GB微型计算机的硬件组成存储容量微型计算机的硬件组成信息存入存储器和从存储器中取出所需要的时间,是描述存储器工作快慢程度的指标。存取速度存储器类型半导体存储器。分为随机读写存储器RAM和只读存储器ROM。一般RAM用作数据存储器,存储临时数据,读写速度更快;ROM用作程序存储器,比如计算机BIOS程序就存放在ROM当中。RAM又可以分为SRAM和DRAM。微型计算机的硬件组成高速缓冲存储器技术目的:加快内存
8、的访问速度 为了加快处理速度,在CPUCPU与主存储器之间增设了一级或两级高速小容量存储器,称之为高速缓冲存储器(CacheCache)。高速缓冲存储器的存取速度比主存要快一个数量级,大体与CPUCPU的速度相当。CPUCPU在取指令或取操作数时,首先看其是否在高速缓冲存储器中,不在时才访问主存储器。指令或操作数在高速缓冲存储器中时,称为“命中”,反之称为“未命中”。CPUCacheSRAM高速缓存控制器主存DRAM高速缓存系统微型计算机的硬件组成虚拟存储器技术目的:扩大用户可用内存储器空间CPU物理主内存高速、小容量存储管理机制外部存储器低速、大容量如:硬盘、光盘Cache虚拟主内存 虚拟存
9、储器技术是一种通过硬件和软件结合扩大用户可用存储空间的技术。它在内存储器和外存储器(软盘、硬盘或光盘)之间增加一些的硬件和软件,使两者形成一个有机整体。微型计算机的硬件组成某处理器有30根地址线,可寻址地址空间为()。A16MB.256MC1GD.4GROM和RAM性能的主要区别即各自的应用领域如何?存储器涉及哪些引脚,读写过程是如何实现的?问题与思考讨论与交流Thanks微型计算机的硬件组成是微型计算机的运算和控制指挥中心,由运算器、控制器和寄存器阵列三个主要部件组成微处理器微处理内部结构微型计算机的硬件组成执行算术运算和逻辑运算的部件,由累加器(Accumulator,A)、暂存器(Tem
10、porary,TMP)、算术逻辑单元(ArithmaticLogicUnit,ALU)、标志寄存器(FlagRegisters,F)和一些逻辑电路组成。运算器微型计算机的硬件组成控制器是指令执行部件,包括取指令、分析指令(指令译码)和执行指令,由指令寄存器(InstructionRegister,IR)、指令译码器(InstructionDecoder,ID)和定时控制电路(TimingandControl)等组成。计算机的所有操作都是在控制器的控制下完成的。控制器程序指令1指令2指令3指令n取指令指令译码取操作数执行指令存结果指令周期操作码 操作数执行微型计算机的硬件组成寄存器也是CPU的重
11、要组成部分,用来“寄存”数据处理的当前信息。按照用途可分为:a)通用寄存器,供用户存取数据b)特殊寄存器,用来管理堆栈的寄存器-堆栈指示器SP,还比如用来管理程序步序的程序计数器PC。特殊寄存器一般不允许用户随便使用。寄存器阵列微型计算机的硬件组成一块设在内存中按先进后出(FirstInLastOut,FILO)原则组织的存储区域,用于子程序和中断程序调用时的现场保护和参数传递,也可存放数据。数据存入栈区称为压栈(PUSH),从栈区中取出数据称为弹栈(POP)。PUSH和POP操作每次压入或弹出一个元素,元素的大小根据机型和指令不同而不同。堆栈堆栈指示器SP用于指示当前栈顶元素所在的位置。压栈
12、、弹栈总是在栈顶进行的,随着对堆栈的压入和弹出操作,SP的值会自动变化。微型计算机的硬件组成堆栈区的访问特点?堆栈区的主要用途?四种堆栈访问方式究竟是如何工作的?讨论与交流微型计算机的硬件组成是微型计算机的运算和控制指挥中心,由运算器、控制器和寄存器阵列三个主要部件组成微处理器微处理内部结构微型计算机的硬件组成执行算术运算和逻辑运算的部件,由累加器(Accumulator,A)、暂存器(Temporary,TMP)、算术逻辑单元(ArithmaticLogicUnit,ALU)、标志寄存器(FlagRegisters,F)和一些逻辑电路组成。运算器微型计算机的硬件组成控制器是指令执行部件,包括
13、取指令、分析指令(指令译码)和执行指令,由指令寄存器(InstructionRegister,IR)、指令译码器(InstructionDecoder,ID)和定时控制电路(TimingandControl)等组成。计算机的所有操作都是在控制器的控制下完成的。控制器程序指令1指令2指令3指令n取指令指令译码取操作数执行指令存结果指令周期操作码 操作数执行微型计算机的硬件组成寄存器也是CPU的重要组成部分,用来“寄存”数据处理的当前信息。按照用途可分为:a)通用寄存器,供用户存取数据b)特殊寄存器,用来管理堆栈的寄存器-堆栈指示器SP,还比如用来管理程序步序的程序计数器PC。特殊寄存器一般不允许
14、用户随便使用。寄存器阵列微型计算机的硬件组成一块设在内存中按先进后出(FirstInLastOut,FILO)原则组织的存储区域,用于子程序和中断程序调用时的现场保护和参数传递,也可存放数据。数据存入栈区称为压栈(PUSH),从栈区中取出数据称为弹栈(POP)。PUSH和POP操作每次压入或弹出一个元素,元素的大小根据机型和指令不同而不同。堆栈堆栈指示器SP用于指示当前栈顶元素所在的位置。压栈、弹栈总是在栈顶进行的,随着对堆栈的压入和弹出操作,SP的值会自动变化。微型计算机的硬件组成堆栈区的访问特点?堆栈区的主要用途?四种堆栈访问方式究竟是如何工作的?讨论与交流微型计算机的硬件结构总线微型计算
15、机在硬件上普遍采用总线结构。总线结构使系统构成方便,并具有很好的可维护性和可扩展性。存存储储器器I/OI/O接接口口输输入入设设备备I/OI/O接接口口地址总线地址总线 ABAB输输出出设设备备CPU数据总线数据总线 DBDB控制总线控制总线 CBCBI/OI/O接接口口连接多个功能部件或多个装置的一组公共信号线。连在总线上的所有部件均能使用的公共线路,但使用必须是分时的。计算机总线系统计算机总线系统微型计算机的硬件结构按传输信息类别,总线分为:数据总线(DataBus,DB),传输数据信息地址总线(AddressBus,AB),传输地址信息控制总线(ControlBus,CB),传输控制信息
16、微型计算机的硬件结构数据总线DB是CPU用来传送数据信息的信号线,为双向(双向传送信息)、三态(高、低电平状态,以及高阻抗状态(浮空状态)总线。位数越宽,一次数据传输的信息量就越大。微型计算机的硬件结构与三总线地址总线AB是微型计算机用来传送地址信息的信号线,为单向(单向传送信息)、三态总线,由微处理器发出,寻址存储器或外设。AB的位数越宽,寻址的空间就越大。编址方式独立编址-多种寻址指令统一编址-单个寻址指令微型计算机的硬件结构控制总线CB传送控制信号的一组总线,实现CPU对外部功能部件(包括存储器和I/O接口)的控制及接收外部传送给CPU的状态信号,包括微处理器向存储器发送的读选通信号RD
17、、写选通信号WR,以及外设向微处理器发送的中断请求信号NMI、INTR等。控制总线的各位作用不同,且一般都是单向的。微型计算机的硬件结构讨论与交流深入理解统一编址与独立编址问题,其含义及特点是什么?Thanks无符号数的表示计算机采用二进制:只能认识和处理二进制数即:“0”、“1”以及由“0”“1”组成的信息十进制数、azAZ%、!、$计算机系统十进制数计算机只能操作二进制数,而人们日常只习惯使用十进制,人要和计算机打交道要进行进制之间的转换。先把十进制转换为二进制,交给计算进行运算,计算机运算的结果再转换成十进制输出给用户。由于二进制的缺点:书写冗长、易错,因此引入十六进制数(另有八进制),
18、作为二进制数的简化书写符号。数字末尾标注:二进制:B;十进制:D或省略十六进制:H十进制二进制无符号数的表示整数“除2取余,逆序排列”小数“乘2取整,顺序排列”二进制十进制无符号数的表示从右到左每一位二进制的数乘以2的相应次方,再求和无符号数的表示0、1、29,A、B、C、D、E、F借用十进制的十个符号借用六个英文字母构成十六进制的16个数字符号十六进制“一比四”的对应关系:每一位十六进制数对应四位二进制十六进制二进制00000100012001030011401005010160110701118100091001A1010B1011C1100D1101E1110F1111二进制与十六进制的
19、转换每4位二进制数对应1位十六进制数。无符号数的表示小数点向两侧,每4位分为1组,不足4位则添0凑够4位(19个符号)(6个符号)练习:(11.1)B转换为十进制数是多少?(11.1)H转换为十进制数是多少?无符号数的表示解答:(11.1)B=3.5(11.1)H=17.0625无符号数的表示问题与思考(101.01)B-()D(101.1)H-()D(36.75)H-()B(36.75)D-()B无符号数的表示问题与思考(101.01)B-(5.25)D(101.1)H-(257.0625)D(36.75)H-(110110.01110101)B(36.75)D-(100100.11)B机器
20、数在计算机中,无论数值还是符号,都是用0或1来表示。机器数表示的真实值称为真值。带符号整数的表示带符号整数的机器数通常用最高位做符号位,0表示正数,1表示负数。常用的表示方法有:原码、反码、补码原码最高位表示符号(0正1负),其余位用真值绝对值的二进制表示数值。带符号整数的表示原码优点:简单直观,与真值的对应直观,转换方便。以8位原码为例,表示范围:11111111B01111111B-127+127缺点:0的表示不唯一带符号整数的表示原码00000000B-010000000B+0计算结果出错10000011B-3+00000011B+310000110B-6反码最高位表示符号(0正1负),
21、正数的反码数值位同原码,负数的反码数值位是其原码的按位取反带符号整数的表示反码优点:纠正了原码的运算错误。以8位二进制码为例,表示范围为:反码:10000000B01111111B原码:11111111B01111111B真值:-127+127缺点:0的表示不唯一带符号整数的表示反码与真值转换不直观(反码原码真值)反码:11111111B00000000B原码:10000000B00000000B真值:-0+0补码最高位表示符号(0正1负),正数的补码数值位同原码,负数的补码数值位是其原码按位取反再加1带符号整数的表示补码以8位二进制码为例,表示范围为:补码:10000000B01111111
22、B反码:01111111B原码:01111111B真值:-128+127优点:0的表示是唯一的带符号整数的表示补码做加法时,符号位也参与运算,将减法运算变为加法运算,结果正确。补码:11111101B00000011B反码:11111100B00000011B原码:10000011B00000011B真值:-3+3与真值转换不直观(补码反码原码真值)11111101B-3+00000011B+300000000B0缺点:减1数值位取反不变不变问题与思考X补码=01101101BX原码=BX补码=11010110BX原码=B相同位数的有符号数比无符号数表示的范围大;(对or错)带符号整数的表示补
23、码问题与思考X补码=01101101BX原码=01101101BX补码=11010110BX原码=10101010B相同位数的有符号数比无符号数表示的范围大;(错)带符号整数的表示补码定点数浮点数表示及转换定点数表示数的范围受字长限制,表示数的范围有限,表示的精度有限。常用于表示纯整数、纯小数。浮点数IEEE754标准浮点数由阶码和尾数两个部分组成。单精度格式:32位双精度格式:64位1823S符号位EM阶码尾数11152S符号位EM阶码尾数移码浮点数表示及转换对真值补码的符号位取反,相当于真值增加12810000000-0000000000000000-10000000一般用移码减一作浮点数
24、的阶码。(十进制数+127)B=对应的移码浮点数的表示浮点数表示及转换符号位EM阶码尾数S浮点数的表示浮点数表示及转换例:用32位单精度表示-108.0125-108.0125D=(-1)*1101100.000000110011001100B=(-1)*26*1.101100000000110011001100BS=1BE=6+127=133=10000101B阶数范围-127128M=10110000000011001100110B表示结果:110000101101100000000110011001101823符号位EM阶码尾数即:C2D80666HS浮点数表示及转换几个特殊数值:E为0
25、000000011111111对应-127128当E的二进制位全为1(128)时为特殊数值:此时,若M的二进制位全为0,则n表示无穷大。若S为1则为负无穷大,若S为0则为正无穷大;若M的二进制位不全为0时,表示NaN(NotaNumber),表示这不是一个合法实数。E为全0(-127)时:M全为0时,表示机器0;M不全为0时,表示非规格化的数。单精度数E的取值为1254(-126127)(8位表示),M为23位,共32位;双精度数E的取值为12046(-10221023)(11位表示),M为52位,共64位。思考:浮点数表示及转换将十进制数9转换为IEEE754标准的单精度数是多少?,如果用补
26、码来表示是多少?解答:(1)转换成IEEE754标准的单精度数9=(-1)01001=(-1)0231.001=(-1)02130-1271.001二进制代码为:01000001000100000000000000000000即:41100000H(2)如果表示成补码9=1001即00000009H浮点数表示及转换问题与思考将下列浮点数的内存映像用16进制表示0.15625,-5,13/32浮点数表示及转换问题与思考解(1)0.15625转换成二进制值为0.00101B,在IEEE754中规格化表示为1.0123,e1273124,IEEE754编码为:00111110001000000000
27、000000000000即:3E200000H(2)5转换成二进制值为:101B在IEEE754中规格化表示为1.0122,e1272129,IEEE754编码为:11000000101000000000000000000000即:C0A00000H(3)13/32=(-1)011012-5=(-1)02-5231.101=(-1)02125-1271.101IEEE754编码为:00111110110100000000000000000000即:3ED00000H浮点数表示及转换讨论与交流在计算机内,浮点数的存储误差是如何产生的,如何减小存储误差?Thanks计算机中常用的两种编码BCD码和
28、ASCII码,是为方便在特定场合下进行特定计算而制定的编码规则。ASCII码和BCD码表示方法ASCII码AmericanStandardCodeforInformationInterchange美国标准信息交换码用4位二进制数表示1位十进制数的编码方法。在计算机里,又可分为:分离BCD码、组合BCD码。BCD码-Binary-CodedDecimal二进制编码的十进制数使用指定的7位或8位二进制数组合来表示128或256种可能的字符,包括大小写字母、数字、标点符号,和一些特殊控制字符。ASCII码和BCD码表示方法BCD码十进制数组合BCD码分离BCD码十六进制数00000000000000
29、H10001000000011H20010000000102H30011000000113H40100000001004H50101000001015H60110000001106H70111000001117H81000000010008H91001000010019H二进制编码的十进制数ASCII码和BCD码表示方法四位二进制数的组合十进制数十六进制数000000010010.1001101010111100110111101111012.9101112131415012.9ABCDEFBCD非法BCD二进制数码1)BCD码是用来表示十进制数的。它不是用09这10个符号,而是用四位“0”和
30、“1”来表示一位十进制数2)BCD表达的是十进制数,应当保持十进制数的特点:“逢十进位”,“借一作十”。3)BCD不是纯二进制数ASCII码和BCD码表示方法BCD码既不是二进制,也不是十进制。是二进制编码的十进制数十进制十进制“二进制BCD看起来和十进制一样”ASCII码和BCD码表示方法BCD码的十进制调整BCD码加法的十进制调整方法:1.对非法BCD码加6修正2.低位向高位有进位,低位加6修正例:计算(01000010)BCD+(00011001)BCD42+19=6101000010+0001100101011011非法BCD调整+00000110(06调整)0110000161D调整
31、后的BCDASCII码和BCD码表示方法BCD码的十进制调整例1(30)BCD+(99)BCD00110000+1001100111001001BCD非法11001001+01100000(60调整)100101001总和:129D进位CCPU中标志寄存器的进位标志位例2(08)BCD+(09)BCD00001000+0000100100010001有进位00010001+00000110(06调整)00010111ASCII码和BCD码表示方法关于ASCII码。必须了解:“A”“Z”的ASCII码41H5AH“a”“z”的ASCII码61H7AH“0”“9”的ASCII码30H39H问题:9
32、用BCD码表示:00001001(09H)数值9用ASCII码表示:00111001(39H)符号注意:*1输入设备一般用ASCII、BCD向计算机输入数值、字母和字符;*2输出设备所能接收的通常也是ASCII、BCD以及八段码思考:十进制数23用BCD码和ASCII码分别怎样表示?23表示成BCD码为:23H23表示成ASCII码为:“23”即32H33HASCII码和BCD码表示方法问题与思考将下列BCDBCD码转换为十进制数(00111000.0101011000111000.01010110)BCD BCD ()D D讨论与交流为什么会出现BCDBCD码,BCDBCD码调整的原理是什么
33、,是如何实现的?ThanksCM3微控制器结构及CM3微处理器特点uCortex-M3微控制器结构Cortex-M3内核调试系统Cortex-M3 微处理器内部总线外设存储器时钟和复位I/O由由ARMARM设计设计由芯片制造商由芯片制造商(如(如STST)设计)设计开发开发Cortex-M3微控制器CM3微控制器结构及CM3微处理器特点uCortexM3处理器结构CM3微处理器结构简化图CM3微控制器结构及CM3微处理器特点uCortexM3处理器特点CM3处理器主要具有以下一些特点:(1)三级流水线设计;(2)哈佛总线架构;(3)32位寻址,支持4G存储器空间;(4)基于ARMAMBA技术的
34、片上接口,支持高吞吐量的流水线总线操作;(5)嵌套向量中断控制器(NVIC),支持11个系统异常,最多240个中断请求,以及8256个中断优先级;(6)支持操作系统的多种特性;(7)休眠模式和多种低功耗特性,降低了处理器的功耗;(8)支持可选的MPU(存储器保护单元);(9)通过位带操作支持两个特定存储器区域中的位数据访问;(10)支持Thumb-2指令集。CM3微控制器结构及CM3微处理器特点谢谢SchoolofElectricalEngineering,ChongqingUniversity重庆大学电气工程学院CM3处理器的3级流水线和指令缓冲区例如:一条指令的执行要经过3个阶段:取指令、
35、译码、执行,每个阶段都要花费一个机器周期,如果没有采用流水线技术,那么执行以下所示的4条指令,需要12个机器周期MOV R8,R3;指令1MVN R7,R3;指令2SUB R0,R2,R3;指令3MOV PC,LR;指令4CM3处理器的3级流水线和指令缓冲区如果采用了指令流水线技术,完成以下4条指令的执行,只需要6个机器周期MOV R8,R3;指令1MVN R7,R3;指令2SUB R0,R2,R3;指令3MOV PC,LR;指令4(1)有些指令的执行需要多个时钟周期,会造成流水线暂停;CM3处理器的3级流水线和指令缓冲区u影响流水线执行的因素(2)当程序转移时,会清空流水线。CM3处理器的3
36、级流水线和指令缓冲区u程序转移对指令流水线的影响CMPR2,#0;指令1CMPNER3,#0;指令2BEQreturn;指令3CMPR2,R3;指令4BEQstrcmp;指令5returnSUBR0,R2,R3;指令6(1)CortexM3处理器使用一个3级流水线;(2)当运行的指令大多数都是16位时,处理器会每隔一个周期做一次取指;(3)为了改善转移指令清空流水线的情况,CM3支持一些的v7M新指令,可以避免很多短程跳转,使CM3不再预取不满足条件的指令。例如:IF-THEN(IT)指令;(4)由于流水线的存在,以及出于对Thumb代码兼容的考虑,读取PC会返回当前指令地址+4的值。CM3处
37、理器的3级流水线和指令缓冲区uCortex-M3指令流水线的特点:u指令缓冲区CM3处理器的3级流水线和指令缓冲区指令缓冲区允许后续的指令在执行前先在里面排队,能在执行未对齐的32位指令时,避免流水线“断流”。指令存储器32 10NA1N+4B1A2N+8C1B2N+0 xCDC2指令缓冲区取指解码执行(Inst&)(Inst)(Inst)A1B1A2A(Inst)存储器中的未对齐的32位Thumb-2指令流水线级数指令解码取指B1C1B2BC1ADC2CB执行u异常和中断的概念在Cortex-M3中,凡是打断程序顺序执行的事件,都被称为异常。除了外部中断外,当有指令执行了“非法操作”,或者访
38、问被禁的内存区间等产生的各种错误,以及不可屏蔽中断发生时,都会打断程序的执行,这些情况统称为异常。Cortex-M3处理器的异常类型和优先级Cortex-M3支持大量异常,包括10个系统异常,和最多240个外部中断(简称IRQ)。编号类型优先级简介1复位-3(最高)复位2NMI-2不可屏蔽中断(来自外部NMI输入脚)3硬(hard)fault-1所有被除能的fault,都将“上升”(escalation)成硬fault。只要FAULTMASK没有置位,硬fault服务例程就被强制执行。Fault被除能的原因包括被禁用,或者FAULTMASK被置位4MemManagefault可编程存储器管理f
39、ault,MPU访问犯规以及访问非法位置均可引发。企图在“非执行区”取指也会引发此fault5总线fault可编程从总线系统收到了错误响应,原因可以是预取中止或数据访问错误6用法(usage)Fault可编程由于程序错误导致的异常。通常是使用了一条无效指令,或者是非法的状态转换,例如尝试切换到ARM状态7-10保留N/AN/A11SVCall可编程执行系统服务调用指令(SVC)引发的异常12调试监视器可编程调试监视器(断点,数据观察点,或者是外部调试请求)13保留N/AN/A14PendSV可编程可挂起的系统服务15SysTick可编程系统滴答定时器(也就是周期性溢出的时基定时器)系统异常Co
40、rtex-M3处理器的异常类型和优先级16IRQ#0可编程外中断#017IRQ#1可编程外中断#1.255IRQ#239可编程外中断#239外部中断u异常类型特殊功能寄存器IPSR。在NVIC的中断控制及状态寄存器(ICSR)中,有一个VECTACTIVE位段;Cortex-M3处理器的异常类型和优先级Cortex-M3有两个地方记录了当前正服务异常的编号:u优先级优先级对于异常来说很关键的,它会影响一个异常是否能被响应,以及何时可以响应。Cortex-M3处理器的异常类型和优先级Cortex-M3用最多8位表达优先级,可支持:3个固定的高优先级256级的可编程优先级128级抢占优先级优先级号
41、是以MSB对齐,设计时会裁掉表达优先级的几个低端有效位,达到减少优先级数的目的。表达优先级允许使用的最少位数为3位,因此CM3至少要支持8级优先级。Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0用于表达优先级未使用,读回零例:使用了3个位来表达优先级,则优先级配置寄存器的结构会如下图所示使用3个位来表达优先级的情况我们能够使用的优先级有8个分别为:0 x00(最高)、0 x20、0 x40、0 x60、0 x80、0 xA0、0 xC0、0 xE0(最低)Cortex-M3处理器的异常类型和优先级Cortex-M3处理器的异常类型和优先级Cortex-M3处理器的异常优先级分
42、组为了使抢占机能变得更可控,CM3把256级优先级按位分成高低两段,分别是抢占优先级和子优先级。抢占优先级决定异常响应的抢占行为:当系统正在响应某低抢占优先级异常L时,如果来了抢占优先级更高的异常H,则H可以抢占L;子优先级则决定同抢占优先级的异常响应行为:当抢占优先级相同的异常有不止一个悬起时,则优先响应子优先级最高的异常。NVIC中有一个寄存器是“应用程序中断及复位控制寄存器”(AIRCR),它里面有一个位段名为“优先级组”(PRIGROUP)。位段名称类型复位值描述31:16VECTKEYR/W-访问钥匙:任何对该寄存器的写操作,都必须同时把0 x05FA写入此段,否则写操作被忽略。若读
43、取此半字,则0 xFA0515ENDIANESSR-指示端设置。1大端(BE8),0小端。此值是在复位时确定的,不能更改10:8PRIGROUPR/W0优先级分组2SYSRESETREQW-请求芯片控制逻辑产生一次复位1VECTCLRACTIVEW-清零所有异常的活动状态信息。通常只在调试时用,或者在OS从错误中恢复时用0VECTRESETW-复位CM3处理器内核(调试逻辑除外),但是此复位不影响芯片上在内核以外的电路该位段的值对每一个优先级可配置的异常都有影响。Cortex-M3处理器的异常优先级分组AIRCR寄存器的PRIGROUP的值决定了分组位置,如下表所示。Cortex-M3处理器的
44、异常优先级分组抢占优先级最多是7个位,所以最多只有128级抢占优先级。优先级分组为7时,所有的位都表达子优先级,没有任何位表达抢占优先级,因而所有优先级可编程的异常之间不会发生抢占在计算抢占优先级和子优先级的有效位数时,必须先求出下列值:芯片实际使用了多少位来表达优先级;优先级组是如何划分的。Cortex-M3处理器的异常优先级分组例如:如果只使用3个位来表达优先级(7:5),并且优先级组的值是5(从bit5分组),则你得到4级抢占优先级,且在每个抢占优先级的内部有2个子优先级,如下图所示。Cortex-M3处理器的异常优先级分组Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0
45、抢占优先级子优先级未使用注意:即使在表达优先级中未使用的位,也允许进行分组。Cortex-M3处理器的异常优先级分组例如:如果优先级分组的值是1(即bit0bit1为子优先级,其余为抢占优先级),则所有可用的8个优先级都是抢占优先级,如下图所示。Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0抢占优先级5:3抢占优先级2:0(未使用,总是为0)子优先级1:0(未使用,总是为0)Cortex-M3处理器的异常类型和优先级如果优先级完全相同的多个异常同时悬起,则先响应异常编号最小的那一个。如IRQ#3会比IRQ#5先得到响应。优先级的分组都要预先经过分析论证,并且尽可能在开机初始化
46、时一次性地设置好,以后就不再更改了。Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0011未使用Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0010未使用异常1异常2例如:0 x600 x400 x400 x40如果设置了软件优先级不同,就以软件优先级为准,先响应软件优先级数值小的中断。而中断嵌套须由抢占优先级决定Cortex-M3处理器的异常类型和优先级问题与思考寄存器NVIC-IPR1对应中断4,5,6,7的优先级设置,如果该寄存器的值为0 x70806050,则这四个中断的优先级顺序为()。A.中断6中断7中断5中断4B.中断4中断5中断6中断7C.中断
47、4中断5中断7中断6D.中断7中断6中断5中断4在STM32F103向量中断控制器管理下,可将中断分为()组A.4B.5C.6D.7STM32中断优先级分组的位段在寄存器(AIRCR的810位)中,如需将某中断的抢占优先级设为7,响应优先级设为1,请问应将该位段的值设置为()。中断优先级分组寄存器AIRCR的810位设为6,两个中断源的优先级寄存器的高4位分别设为3和4,则这两个中断源不能产生中断嵌套。()Cortex-M3处理器的异常类型和优先级问题与思考寄存器NVIC-IPR1对应中断4,5,6,7的优先级设置,如果该寄存器的值为0 x70806050,则这四个中断的优先级顺序为(C)。A
48、.中断6中断7中断5中断4B.中断4中断5中断6中断7C.中断4中断5中断7中断6D.中断7中断6中断5中断4在STM32F103向量中断控制器管理下,可将中断分为(B)组A.4B.5C.6D.7STM32中断优先级分组的位段在寄存器(AIRCR的810位)中,如需将某中断的抢占优先级设为7,响应优先级设为1,请问应将该位段的值设置为(4)。中断优先级分组寄存器AIRCR的810位设为6,两个中断源的优先级寄存器的高4位分别设为3和4,则这两个中断源不能产生中断嵌套。(对)Cortex-M3处理器的向量表、中断输入及挂起行为u向量表当发生了异常并且要响应异常时,CM3需要定位异常处理例程的入口
49、地址。这些入口地址所在的存储区域即是“(异常)向量表”。每个向量(异常处理例程的入口地址)占用4字节。地址异常编号值(32位整数)0 x0000_0000-MSP的初始值0 x0000_00041复位向量(PC初始值)0 x0000_00082NMI向量(NMI服务例程的入口地址)0 x0000_000C3硬fault向量(硬fault服务例程的入口地址)0 x0000_00104MemManage错误向量(MemManage错误服务例程的入口地址)0 x0000_00145总线错误向量(总线错误服务例程的入口地址)其它异常服务例程的入口地址Cortex-M3处理器的向量表、中断输入及挂起行为
50、缺省情况下,CM3的“向量表”位于0地址处,CM3允许向量表重定位,即可以从其它地址处开始定位各异常向量。重定位地址区域可以是代码区,但也可以是RAM区。为了实现向量表重定位功能,CM3提供了一个“向量表偏移量寄存器”(VTOR),通过修改该寄存器的值就能重定位向量表。Cortex-M3处理器的向量表、中断输入及挂起行为注意:向量表的起始地址是有要求的。必须先求出系统中共有多少个向量,再把这个数字向上增大到2的整次幂,而且起始地址必须对齐到后者的边界上。位段名称描述29TBLBASE向量表是在Code区(0),还是在RAM区(1)28:7TBLOFF向量表的起始地址例:微控制器有32个中断源向