嵌入式系统原理与应用 课件 第2章 ARM Cortex-M3处理器_第1页
嵌入式系统原理与应用 课件 第2章 ARM Cortex-M3处理器_第2页
嵌入式系统原理与应用 课件 第2章 ARM Cortex-M3处理器_第3页
嵌入式系统原理与应用 课件 第2章 ARM Cortex-M3处理器_第4页
嵌入式系统原理与应用 课件 第2章 ARM Cortex-M3处理器_第5页
已阅读5页,还剩83页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

嵌入式系统设计第二章ARMCortex-M3微处理器体系结构本章学习目的熟悉ARMCortexM3的主要组成部件和功能,了解微处理器的基本工作原理。准确理解CortexM3处理器支持的两种工作模式:处理器模式(Handlermode)和线程模式(Threadmode),支持的两种特权级别:特权级(Privileged)和用户级(User/Unprivileged),以及引入两种工作模式和两种特权级别在确保系统安全可靠运行方面所起的作用。掌握寄存器的命名和使用方法,理解特殊功能寄存器的作用和使用方法。理解和掌握CortexM3存储器映射、堆栈操作以及存储器保护等。了解CortexM3处理器嵌套向量中断控制器NVIC的功能;掌握CortexM3处理器中断和异常处理机制;了解中断(异常)向量表的结构和作用;掌握系统启动(复位)的响应过程。了解Cortex-M3核的硬件资源与工作原理,以便后续汇编语言程序设计和嵌入式系统开发时能够清楚如何使用这些资源第二章ARMCortex-M3微处理器体系结构目录ARMCortex体系结构概述CortexM3的组成寄存器阵列存储器系统中断与异常第二章ARMCortex-M3微处理器体系结构---ARMCortexM3体系结构基本概念ARM架构(V1-V9)V7对应指令系统CortexM3IP核对应不同的软核STM32F103系列微控制器芯片对应不同的微控制器芯片ARMCortex-M3处理器初探单片机市场的规模可以用“巨无霸”来形容;ARM上一个久经岁月的洗礼依旧光芒绽放的IP核为ARM7TDMI(1994年)--ARMV4架构;ARMCortex‐M3处理器(2004年,v7架构),作为Cortex系列的处女作,为了让32位处理器入主坐庄单片机市场,轰轰烈烈地诞生了!由于采用了最新的设计技术,它的门数更低,性能却更强。许多曾经只能求助于高级32位处理器或DSP的软件,都能在CM3上跑得很快很欢。相信用不了多久,CM3就一定能在32位嵌入式处理器市场中脱颖而出,像当年8051推动整个业界那样,再次放飞设计师的梦想,实现多年的夙愿!CM3作为ARM7的后继者,大刀阔斧地改革了设计架构,从而显著地简化了编程和调试的复杂度,处理能力也更加强大。CM3还突破性地引入了很多时尚的甚至崭新的技术,专门满足单片机应用程序的需求。比如,服务于“使命‐关键”应用的不可屏蔽中断,极度敏捷并且拥有确定性的嵌套向量中断系统,原子性质的位操作,还有一个可选的内存保护单元。这些令人惊艳和振奋的新特性,让老的ARM玩家们再次找到“初恋”时烈焰迸发的感觉,也使萍水相逢就有激爽触电般的体验!相信读者一旦有机会用到了它,就会为它的秀外慧中而赞叹,爱不释手!第二章ARMCortex-M3微处理器体系结构---ARMCortexM3体系结构基本概念最近的几年,基于从ARMv6开始的新设计理念,ARM进一步扩展了它的CPU设计,成果就是ARMv7架构(2004年)的闪亮登场。在这个版本中,内核架构首次从单一款式变成3种款式。款式A(ApplicationProcessors):设计用于高性能的“开放应用平台”——越来越接近电脑了款式R(Real-timeProcessors):用于高端的嵌入式系统,尤其是那些带有实时要求的——又要快又要实时。款式M(MicrocontrollerProcessors):用于深度嵌入的,单片机风格的系统中——本书的主角。第二章ARMCortex-M3IP核体系结构---ARM处理器架构进化史

ARM处理器架构进化史1994年(ARM7TDMI)---------2004年(CortexM3)

1、Cortex-A面向性能密集型系统的应用处理器内核ApplicationProcessors(应用处理器)–面向移动计算,智能手机,服务器等市场的的高端处理器。这类处理器运行在很高的时钟频率(超过1GHz),支持像Linux,Android,MSWindows和移动操作系统等完整操作系统需要的内存管理单元(MMU)。如果规划开发的产品需要运行上述其中的一个操作系统,你需要选择ARM应用处理器.2、Cortex-R面向实时应用的高性能内核

Real-timeProcessors(实时处理器)–面向实时应用的高性能处理器系列,例如硬盘控制器,汽车传动系统和无线通讯的基带控制。多数实时处理器不支持MMU,不过通常具有MPU、Cache和其他针对工业应用设计的存储器功能。实时处理器运行在比较高的时钟频率(例如200MHz到>1GHz),响应延迟非常低。虽然实时处理器不能运行完整版本的Linux和Windows操作系统,但是支持大量的实时操作系统(RTOS)。3、Cortex-M面向各类嵌入式应用的微控制器内核MicrocontrollerProcessors(微控制器处理器)–微控制处理器通常设计成面积很小和能效比很高。通常这些处理器的流水线很短,最高时钟频率很低(虽然市场上有此类的处理器可以运行在200Mhz之上)。并且,新的Cortex-M处理器家族设计的非常容易使用。因此,ARM微控制器处理器在单片机和深度嵌入式系统市场非常成功和受欢迎。ArchitectureV82011年推出华为获授权ArchitectureV92021年3月推出64位安全、AIARM处理器家族和体系架构对照表体系结构典型内核Cache(I/D)MMU特点和应用ARMv4TARM7TDMI无无AppleiPod,LegoNXT,GBAARM720T均为8KB有3级流水线ARM9TDMI无无5级流水线ARM920T均为16KB有GarminNavigationDevicesARMv4StrongARMSA1均为16KB有HPJornadaPDAARMv5[E]ARM926EJ-S有有SonyEricssonMobilePhoneARM1020E均为32KB有6级流水线PXA270均为32KB有7级流水线,HTCPhoneARMv6ARM1136J-S有有8级流水线,NokiaN93ARMv6-MARMCortex-M0无无ApplePDAARMv7-MARMCortex-M3有有MPU高速公路ETC读卡机ARMv7-RARMCortex-R4有有MPUBroadcomARMv7-AARMCortex-A7有有

ARMCortex-A8有有AppleiPad/iPhone/iPodTouchARMCortex-A9有有LGOptimus2XMobilePhoneARMCortex-A15有有

满足不同应用的ARM处理器高端基于虚拟内存的复杂操作系统应用(带MMU)实时信号处理或控制应用微控制器低成本低功耗应用Cortex-M0Cortex-M3Cortex-M4取代传统意义的单片机到了ARMv7时代,ARM改革了一度使用的,冗长的需要“解码”的数字命名法,转到另一种看起来比较整齐的命名法。比如,ARMv7的三个款式都以Cortex作为主名。这不仅更加澄清并且“精装”了所使用的ARM架构,也避免了新手对架构号和系列号的混淆。例如,ARM7TDMI并不是一款ARMv7的产品,而是辉煌起点——v4T架构的产品。第二章ARMCortex-M3IP核体系结构---处理器名字处理器名字指令集的详细说明:《ARMv7‐MArchitectureApplicationLevelReferenceManual(Ref2)》由于历史原因(从ARM7TDMI开始),ARM处理器一直支持两种形式上相对独立的指令集,它们分别是:32位的ARM指令集。对应处理器状态:ARM状态16位的Thumb指令集。对应处理器状态:Thumb状态这两种指令集也对应了两种处理器执行状态。在程序的执行过程中,处理器可以动态地在两种执行状态之中切换。实际上,Thumb指令集在功能上是ARM指令集的一个子集,但它能带来更高的代码密度,给目标代码减肥。这对于要勒紧裤腰带的应用还是很经济的。

但程序在两种状态之间的切换,花费了大量的开销!第二章ARMCortex-M3IP核体系结构---架构与指令集演进Thumb-2指令集体系体系结构Thumb‐2真不愧是一个突破性的指令集。它强大,它易用,它高效。Thumb‐2是16位Thumb指令集的一个超集,在Thumb‐2中,16位指令首次与32位指令并存,结果在Thumb状态下可以做的事情一下子丰富了许多,同样工作需要的指令周期数也明显下降。在支持了both16位和32位指令之后,就无需烦心地把处理器状态在Thumb和ARM之间来回的切换了;但这也意味着Cortex‐M3作为新生代处理器,不是向后兼容的。因此,为ARM7写的ARM汇编语言程序不能直接移植到CM3上来。第二章ARMCortex-M3IP核体系结构---架构与指令集演进第二章ARMCortex-M3IP核体系结构---ARMCortexM3体系结构基本概念CPU地址数据程序计数器(PC)存储器冯诺依曼体系结构CPU程序存储器地址数据数据存储器地址数据程序计数器(PC)哈佛体系结构第二章ARMCortex-M3IP核体系结构---ARMCortexM3体系结构基本概念指令集类别CISCRISC指令数目指令数量很多较少,通常少于100条执行时间有些指令的执行时间很长,如需要访问存储器来获得操作数的指令执行时间通常较长所有运算所涉及的操作数都直接从寄存器获得,指令的执行时间短,且较固定。编码长度指令的编码长度可变,1~15字节指令的编码长度固定,通常为4个字节寻址方式寻址方式复杂,增加了硬件实现的复杂度寻址方式简单操作可对存储器操作数和寄存器操作数进行算术和逻辑操作只能对寄存器操作数进行算术和逻辑操作,Load/Store体系结构编译难以用优化编译器生成高效的目标代码程序采用优化编译技术,可生成高效的目标代码程序复杂指令系统CISC与精简指令系统RISC比较第二章ARMCortex-M3IP核体系结构---ARMCortexM3体系结构基本概念复杂指令系统CISC与精简指令系统RISC比较X86复杂指令系统指令编码(1-6字节不等)Thumb-2精简指令系统指令编码(4字节或2字节)第二章ARMCortex-M3IP核体系结构---ARMCortexM3体系结构基本概念操作模式和特权级别操作模式实际上就是指Cortex-M3核当前的运行模式,有线程模式和处理器模式两种。若Cortex-M3核正在运行的是用户的应用程序,那么当前的操作模式就是线程模式;若Cortex-M3核正在运行的是异常(中断)服务程序,那么当前的操作模式就是处理器模式。特权级别是指在当前操作模式下,程序代码对系统硬件资源访问和使用的优先级别,包括用户级和特权级两种。特权级能够使用所有的指令访问所有的资源。用户级不能执行特权级指令(如MSR/MRS),有限制的访问存储器和外围模块。引入用户级和特权级两级特权级别的目的,是为了提供一种存储器访问的保护机制,使得普通的用户程序代码不能意外地,甚至是恶意地执行涉及到要害的操作。

特权级别CortexM3核运行的代码特权级用户级异常(中断)服务程序代码(处理器模式)合法非法用户应用程序代码(线程模式)合法合法第二章ARMCortex-M3IP核体系结构---ARMCortex-M3处理器特权级别CortexM3处理器模式与优先级切换状态图---实现嵌入式系统安全稳定运行的保护机制本次课内容就介绍完了,同学们,再见!第2次作业1、查阅资料,总结Intelx86系列微机、80C51单片机、SRTM32F103系列嵌入式系统的启动过程。2、查阅资料,总结Intelx86系列微机、80C51单片机、SRM32F103系列嵌入式系统的中断处理机制。3、熟悉一个纯汇编工程,理解异常向量表的初始化方法和系统启动过程(1-100addcall---上次已经发给大家),进一步理解本次授课能容。(也是我们下一章学指令系统时的训练平台)嵌入式系统设计西安邮电大学计算机学院王忠民第二章ARMCortex-M3微处理器结构目录ARMCortexM3体系结构概述CortexM3的组成寄存器阵列存储器系统中断与异常第二章ARMCortex-M3微处理器体系结构---ARMCortexM3体系结构基本概念ARM架构(V1-V9)V7对应指令系统CortexM3IP核对应不同的软核STM32F103系列微控制器芯片对应不同的微控制器芯片第二章ARMCortex-M3微处理器体系结构--CortexM3内核整体结构框架CortexM3内核由四部分组成:处理器核(ProcessorCoreSystem)—包括CPU、NVIC(NestedVectoredInterruptController)、存储器接口单元(MemoryInterface)、跟踪接口单元(TraceInterface)内存保护单元(MemoryProtectionUnit--MPU)---可选内部总线接口(BusInterconnect)为了方便跟踪和调试的可选的TraceSystem和DebugIntertface单元组成Trace第二章ARMCortex-M3微处理器体系结构--CortexM3内核整体结构框架Cortex-M3的三级流水线PC指针始终指向取指阶段由于流水线的存在,以及出于对Thumb代码兼容的考虑,读取PC会返回当前执行指令的地址+4的值。这个偏移量总是4,不管是执行16位指令还是32位指令,这就保证了在Thumb和Thumb2之间的一致性。Cortex-M3的三级流水线TraceALU:ArithmeticLogicUnit寄存器组:RegisterBank译码器:Decoder取指令单元:InstructionFetchUnit嵌套向量中断控制器NVIC:NestedVectoredInterruptController存储器接口:MemoryInterface跟踪接口:TraceSystem第二章ARMCortex-M3微处理器体系结构---Cortex‐M3内部结构1.处理器核(ProcessorCoreSystem)TraceCortex‐M3有一个可选的存储器保护单元。配上它之后,就可以对特权级访问和用户级访问分别施加不同的访问限制。当检测到犯规(violated)时,MPU就会产生一个fault异常,可以由fault异常的服务例程来分析该错误,并且在可能时改正它。

MPU有很多玩法。最常见的就是由操作系统使用MPU,以使特权级代码的数据,包括操作系统本身的数据不被其它用户程序弄坏。MPU在保护内存时是按区管理的。它可以把某些内存region设置成只读,从而避免了那里的内容意外被更改;还可以在多任务系统中把不同任务之间的数据区隔离。一句话,它会使嵌入式系统变得更加健壮,更加可靠(很多行业标准,尤其是航空的,就规定了必须使用MPU来行使保护职能)第二章ARMCortex-M3微处理器体系结构---Cortex‐M3内部结构2.内存保护单元(MemoryProtectUmit)Trace这部分内容是给SoC设计师看的。如果你不是他们,你是不能直接访问这里讲到的到总线接口的。但是,开发者是要知道4G地址空间上的存储器、片上外设的寄存器等资源是挂到哪些总线上的,这些总线各自有什么特点。通常情况下,芯片厂商都会钩住(hook

up)所有送往存储器和外设的总线信号。并且在少数情况下,你会发现芯片厂商把总线连接到了总线桥上,并且允许外部总线系统连接到芯片上。CM3处理器的总线接口是基于AHB‐Lite(AdvancedHigh-performanceBusLite)

和APB(AdvancedPeripheralBus)

协议的,它们的规格在AMBA(AdvancedMicrocontrollerBusArchitecture)规格书中给出第二章ARMCortex-M3微处理器体系结构---Cortex‐M3内部结构3.内部总线接口(BusInterconnect)TraceARM相关接口协议概念:AHB-Lite:AHB-Lite是一种轻量级版本的高性能总线协议,用于连接高性能设备(如处理器、高速存储器等)。它提供了一种高效的数据传输机制,支持高带宽和低延迟的数据传输。AHB-Lite总线通常用于连接处理器核心和其他高性能设备。APB:APB是一种较慢的外设总线,用于连接低速外设(如定时器、GPIO控制器等)。APB总线相对于AHB-Lite总线的优势在于其简单性和低成本。APB总线通常用于连接外设和低速控制器,不需要高带宽和低延迟的数据传输。AMBA(AdvancedMicrocontrollerBusArchitecture)规范是由ARM公司提出的一系列总线协议和接口标准。它定义了一套用于片上系统(SoC)中处理器、内存、外设和其他系统组件之间通信的标准接口和数据传输规范。AMBA规范包括多个版本,其中最常见的是AMBA2.0、AMBA3.0和AMBA4.0。每个版本都有不同的特性和功能,以满足不同的系统需求。AMBA规范描述了总线的信号、传输协议、时序要求以及连接和交互的规则,为设计者提供了一个统一和可互操作的通信框架。通过遵循AMBA规范,系统设计者可以更容易地集成和连接不同的IP核和硬件模块,实现高效、可靠的数据传输和通信。AMBA规范被广泛应用于ARM架构的SoC设计中,并为片上系统的设计提供了标准化的解决方案。第二章ARMCortex-M3微处理器体系结构---Cortex‐M3内部结构3.内部总线接口(BusInterconnect)TraceI-Code总线

I‐Code总线是一条基于AHB‐Lite总线协议的32位总线,负责在0x0000_0000

–0x1FFF_FFFF之间的取指操作。取指以字的长度执行,即使是对于16位指令也如此。因此CPU内核可以一次取出两条16位Thumb指令。D-Code总线

D‐Code总线也是一条基于AHB‐Lite总线协议的32位总线,负责在0x0000_0000

–0x1FFF_FFFF之间的数据访问操作。尽管CM3支持非对齐访问,但你绝不会在该总线上看到任何非对齐的地址,这是因为处理器的总线接口会把非对齐的数据传送都转换成对齐的数据传送。因此,连接到D‐Code总线上的任何设备都只需支持AHB‐Lite的对齐访问,不需要支持非对齐访问。第二章ARMCortex-M3微处理器体系结构---Cortex‐M3内部结构3.内部总线接口(BusInterconnect)系统总线

系统总线也是一条基于AHB‐Lite总线协议的32位总线,负责在0x2000_0000

–0xDFFF_FFFF和0xE010_0000

0xFFFF_FFFF之间的所有数据传送,取指和数据访问都算上。和D‐Code总线一样,所有的数据传送都是对齐的。私有外设总线这是一条基于APB总线协议的32位总线。此总线来负责0xE0040000

0xE00F_FFFF之间的私有外设访问。但是,由于此APB存储空间的一部分已经被TPIU、ETM以及ROM表用掉了,就只留下了0xE004_2000‐E00F_F000这个区间用于配接附加的(私有)外设。调试访问端口总线

调试访问端口总线接口是一条基于“增强型APB规格”的32位总线,它专用于挂接调试接口,例如SWJ‐DP和SW‐DP。第二章ARMCortex-M3微处理器体系结构---Cortex‐M3内部结构3.内部总线接口(BusInterconnect)

TraceSystem(跟踪系统):Cortex-M3处理器的TraceSystem支持实时跟踪功能,可以记录程序执行过程中的关键事件和信息,如指令执行、数据访问等。它提供了一种轻量级的追踪功能,可帮助开发人员分析程序性能、调试问题和优化代码。TraceSystem通常与调试器或跟踪设备配合使用,以便实时捕获和记录程序执行的相关信息。DebugInterface(调试接口):Cortex-M3处理器的DebugInterface系统用于与外部调试器或调试工具进行通信,以支持调试和监控处理器的运行状态。通过DebugInterface,开发人员可以在程序执行过程中暂停、单步执行、设置断点、查看寄存器状态等,有助于定位和解决代码中的问题。DebugInterface还提供了与处理器内部调试逻辑的接口,使得开发人员可以远程控制和监视处理器的行为。第二章ARMCortex-M3微处理器体系结构---Cortex‐M3内部结构4.跟踪与调试系统

(TraceSystem-DebugIntertface)TraceARMCortex-M3处理器结构堆栈指针和运行模式选择指令和数据总线均32位CPU:CM3ProcessorCoreSW-DP/SWJ-DPARMCortex-M3处理器的总线接口低速APBPC中南桥由MCU制造商(ST)设计高速AHBPC中北桥由内核设计者ARM公司设计本次课内容就介绍完了,同学们,再见!第2次作业(续第二次课作业)

1、查阅资料,总结Intelx86系列微机、80C51单片机、SRM32F103系列嵌入式系统的启动过程。2、查阅资料,总结Intelx86系列微机、80C51单片机、SRM32F103系列嵌入式系统的中断处理机制。3、熟悉一个纯汇编工程,理解异常向量表的初始化方法和系统启动过程(1-100addcall---上次已经发给大家),进一步理解本次授课能容。(也是我们下一章学指令系统时的训练平台)---下次上课前交,没有确定项目名称的下次一并交题目嵌入式系统设计西安邮电大学计算机学院王忠民第二章ARMCortex-M3微处理器体系结构目录ARMCortex体系结构概述CortexM3的组成寄存器阵列存储器系统中断与异常通用寄存器R0-R7:R0‐R7也被称为低组寄存器。所有指令都能访问它们。(绝大多数的16位指令只能使用R0‐R7);通用寄存器R8-R12:R8‐R12也被称为高组寄存器。这是因为只有很少的16位

指令能访问它们,32位的指令则不受限制;第二章ARMCortex-M3微处理器体系结构---通用寄存器组ARMCortex-M3寄存器组组第二章ARMCortex-M3微处理器体系结构---通用寄存器组在实际的程序编写过程中,没有必要纠结指令将被汇编成16位机器指令或32位机器指令;考虑到代码效率,编程时尽量使用低组寄存器就可以了,剩下的就交给ARM的汇编器考虑去了。低组寄存器和高组寄存器对指令编码的影响堆栈指针R13:R13是堆栈指针。在CM3处理器内核中共有两个堆栈指针,于是也就支持两个堆栈。(1)主堆栈指针(MSP),或写作SP_main。这是缺省的堆栈指针,它由OS内核、异常服务例程以及所有需要特权访问的应用程序代码来使用。(2)进程堆栈指针(PSP),或写作SP_process。用于常规的应用程序代码。

要注意的是,并不是每个应用都必须用齐两个堆栈指针。简单的应用程序只使用MSP就够了。第二章ARMCortex-M3微处理器体系结构---堆栈指针寄存器ARMCortex-M3寄存器组组工程装入系统后,指向第一条要执行的指令,考虑以下问题:1、当前的SP值是多少?如何赋的初值?2、地址0x00000000-0x00000003四个单元放的内容是什么?3、地址0x00000004-0x00000007四个单元放的内容是什么?4、若地址0x00000004-0x00000007四个单元放的是标号“start”所在的地址,但start所在位置的地址为0x00000008,那为什么0x00000004-0x00000007四个单元放的值是0x00000009?第二章ARMCortex-M3微处理器体系结构---堆栈指针寄存器堆栈指针与程序入口主堆栈和进程堆栈Cortex-M3内核有两个堆栈指针:MSP和PSP结束复位后,所有代码都使用主堆栈所有异常都使用主堆栈异常处理程序(例如SVC)可以通过改变其在退出时使用的EXC_RETURN值来改变线程模式使用的堆栈。在线程模式中,使用MSR指令对CONTROL[1]执行写操作也可以从主堆栈切换到进程堆栈。堆栈指针r13是分组寄存器,在SP_main和SP_process之间切换。在任何时候,进程堆栈和主堆栈中只有一个是可见的,由r13指示。R13,两个堆栈指针第二章ARMCortex-M3微处理器体系结构---堆栈指针寄存器堆栈与微控制器模式的对应关系通过MSR指令修改CONTROL[1]进行堆栈切换CONTROL[1]主堆栈进程堆栈10控制寄存器的第1位一般通过中断返回进行堆栈切换,MSR指令切换用的极少。R13,两个堆栈指针第二章ARMCortex-M3微处理器体系结构---堆栈指针寄存器在Cortex‐M3中,有专门的指令负责堆栈操作——PUSH和POP。它俩的汇编语言语法如下例所演示:PUSH{R0};POP{R0};第二章ARMCortex-M3微处理器体系结构---堆栈指针寄存器在程序中为了突出重点,可以使用SP表示R13。在程序代码中,MSP和PSP都被称为R13/SP。不过,我们可以通过MRS/MSR指令来指名道姓地访问具体的堆栈指针。MSP,亦写作SP_main,这是复位后缺省使用堆栈指针,服务于操作系统内核和异常服务例程;而PSP,亦写作SP_process,典型地用于普通的用户线程中。通常在进入一个子程序后,第一件事就是把寄存器的值先PUSH入堆栈中,在子程序退出前再POP曾经PUSH的那些寄存器。另外,PUSH和POP还能一次操作多个寄存器,如下所示:pushpop工程演示向下生长(SP减小往下生长)的满堆栈R14是连接寄存器(LR):用于在程序转移前保存当前的地址(系统自动完成),以便程序的返回(用户程序完成)。在一个汇编程序中,你可以把它写作LR或R14。LR用于在调用子程序时存储返回地址。例如,当你在使用BL(分支并连接,BranchandLink)指令时,就自动填充LR的值。第二章ARMCortex-M3微处理器体系结构---连接寄存器R14LR工程演示R15是程序计数器,在汇编代码中你也可以使用名字“PC”来访问它。因为CM3内部使用了指令流水线,读PC时返回的值是当前指令的地址+4。比如说:0x1000:MOVR0,PC;R0=0x1004可以通过直接给把R14(LR)寄存器的值送R15(PC),实现程序的返回。第二章ARMCortex-M3微处理器体系结构---程序计数器R15除了通用寄存器外,Cortex‐M3还在内核水平上搭载了若干特殊功能寄存器,包括:程序状态字寄存器组(PSRs或xPSR---包括APSR,IPSR,EPSR三个独立的寄存器,也可作为一个整体访问)中断屏蔽寄存器组(包括PRIMASK,FAULTMASK,BASEPRI三个寄存器)控制寄存器(CONTROL)除APSR外,其他6个寄存器只能在特权级

被专用的MSR和MRS指令访问:MRS<gp_reg>,<special_reg> ;读特殊功能寄存器的值到通用寄存器MSR<special_reg>,<gp_reg> ;写通用寄存器的值到特殊功能寄存器第二章ARMCortex-M3微处理器体系结构---特殊功能寄存器程序状态寄存器在其内部又被分为三个子状态寄存器:应用程序PSR(APSR)中断号PSR(IPSR)执行PSR(EPSR)通过MRS/MSR指令,这3个PSRs即可以单独访问,也可以组合访问(2个组合,3个组合都可以)。当使用三合一的方式访问时,应使用名字“xPSR”或者“PSRs”。xPSR、IPSR、EPSR寄存器只能在特权模式下被访问,

APSR可以在特权或非特权(用户级)访问。第二章ARMCortex-M3微处理器体系结构---程序状态寄存器Cortex‐M3中的程序状态寄存器(xPSR)第二章ARMCortex-M3微处理器体系结构---程序状态寄存器合体后的程序状态寄存器(xPSR)N---NegtiveZ---ZeroC---CarryV---OverflowQ---饱和标志。在运算过程中,如果触发了饱和(即运算结果超出了可以表示的范围),饱和标志(Q)就会被置位。饱和运算概念:饱和运算(saturatedoperation)是一种算术运算,当运算结果大于一个上限或小于一个下限时,结果就等于这个上限或下限。这种运算方式在数字信号处理、图像处理等领域中非常常见,用于确保运算结果始终保持在有效范围内,避免溢出或下溢导致的错误。例如,在BYTE运算中,如果最大值是255,那么当两个数相加的结果超过255时,饱和运算的结果就会是255,而不是实际的溢出值。同样地,如果运算结果小于0,饱和运算的结果就会是0。饱和运算通过限制运算结果的范围,可以确保系统的稳定性和可靠性,防止由于数值错误导致的系统崩溃或性能下降。同时,饱和运算也可以简化硬件设计,降低实现复杂度,提高处理速度。在嵌入式系统中,特别是那些对性能和功耗有严格要求的系统中,饱和运算被广泛应用。它允许在有限的硬件资源下实现高效且可靠的数据处理,对于提高系统性能和降低能耗具有重要意义。总之,饱和运算是一种有效的算术运算方式,它通过限制运算结果的范围来确保系统的稳定性和可靠性,并在嵌入式系统等领域得到广泛应用。第二章ARMCortex-M3微处理器体系结构---程序状态寄存器xPSR工程演示 EXPORTmycode AREA ADDCODE, CODE,READONLY mycode

LDR R0,=0xFFFFFFFF ADD R0,#0x10

LDR R0,=0xFFFFFFFF ADDS R0,#0x10

LDR R0,=0xFFFFFFFF EOR R0,R0

LDR R0,=0xFFFFFFFF EORS R0,R0

MOV R0,#3 MOV R1,#1 CMP R0,R1

deadloop B deadloop END第二章ARMCortex-M3微处理器体系结构---程序状态寄存器合体后的程序状态寄存器(xPSR)ICI/IT(Interrupt-ContinuableInformation/If-Then):ICI标志位与中断的继续执行相关,通过检查ICI标志位,处理器可以确定是否可以在中断后安全地继续执行特定的指令;IT标志位与If-Then指令的基础条件有关,IT标志位存储了这些条件的状态,从而帮助处理器确定是否应该执行接下来的指令。总之,ICI和IT标志位在Cortex-M3的EPSR中扮演着重要的角色,它们共同协作以支持条件执行和中断处理等功能,从而确保处理器能够高效地执行程序。T:Thumb状态标志位(总是1;如果试图将该位清零,会引起故障异常)。ExceptionNumber:线程模式下为0,Handler模式下存放异常号(8位—0-255)。PRIMASK:(外部中断)关中断,中断屏蔽寄存器(相当于X86的IF)FAULTMASK:(内部中断)关异常,留给操作系统用。BASEPRI:关闭优先级大于某值的中断(不响应优先级低的中断)只有在特权级下,才允许访问这3个寄存器。第二章ARMCortex-M3微处理器体系结构---中断屏蔽寄存器组Cortex-M3的中断屏蔽寄存器第二章ARMCortex-M3微处理器体系结构---控制寄存器Cortex‐M3的CONTROL寄存器---用于控制和确定处理器的操作模式以及当前执行任务的特性当处理器处在线程状态下时,既可以使用特权级,也可以使用用户级;另一方面,handler模式总是特权级的。在复位后,处理器进入线程模式+特权级。在线程模式+用户级下,对系统控制空间(SCS)的访问将被阻止——该空间包含了配置寄存器

以及调试组件的寄存器s。除此之外,还禁止使用MSR访问特殊功能寄存器——除了APSR有例外。谁若是以身试法,则将fault伺候。在特权级下的代码可以通过置位CONTROL[0]来进入用户级。而不管是任何原因产生了任何异常,处理器都将以特权级来运行其服务例程,异常返回后将回到产生异常之前的特权级。用户级下的代码不能再试图修改CONTROL[0]来回到特权级。它必须通过一个异常handler,由那个异常handler来修改CONTROL[0],才能在返回到线程模式后拿到特权级。第二章ARMCortex-M3微处理器体系结构---模式切换特权级和处理器模式的改变图

把代码按特权级和用户级分开对待,有利于使架构更加安全和健壮。例如,当某个用户代码出问题时,不会让它成为害群之马,因为用户级的代码是禁止写特殊功能寄存器和NVIC中寄存器的。另外,如果还配有MPU,保护力度就更大,甚至可以阻止用户代码访问不属于它的内存区域。本次课内容就介绍完了,同学们,再见!嵌入式系统设计西安邮电大学计算机学院王忠民第二章ARMCortex-M3微处理器体系结构目录ARMCortex体系结构概述CortexM3的组成寄存器阵列存储器系统中断与异常第二章ARMCortex-M3微处理器体系结构---地址映射CortexM3预定义的存储器映射4G地址空间划分为6个区域:CortexM3内核将0x00000000~0xFFFFFFF共4G地址空间从低地址到高地址依次划分为6个区域,分别是代码区,片内SRAM区,片内外设区,片外RAM区,片外外设区,系统私有外设区。方便了对存储单元和片上外设寄存器的访问:CortexM3之前的ARM架构的存储器映射关系是半导体厂家说了算,Cortex-M3预先定义好了这种“粗线条的”存储器映射,通过把片上外设的寄存器映射到外设区,就可以简单地以访问内存的方式来访问这些外设的寄存器,从而控制外设的工作。因此,片上外设可以使用C语言来操作。方便了不同微控制器芯片之间的移植:这一事先预定义的单一固定的存储器映射极大地方便了软件在各种CortexM3微控制器芯片间的移植,比如不同半导体厂家生产的CortexM3微控制器芯片的NVIC和MPU都在相同的位置布设寄存器(I/O端口),使得它们变得通用。第二章ARMCortex-M3微处理器体系结构---地址映射1.代码区512M(0x00000000-0x1FFFFFFF)该区域大小为512MB。用于存储程序的二进制指令和数据,即存放可执行代码的区域。系统启动后中断向量表也被默认地存放在该区域0x00000000~0x000003FF的1024个单元中(看工程进一步理解中断向量表)。通过I-code和D-code总线连接,实现与微处理器的通信---读指令,读变量的值等哈佛结构实现指令和数据的并行访问大端模式与小端模式第二章ARMCortex-M3微处理器体系结构---地址映射2.片内SRAM区512M(0x20000000~0x3FFFFFFF)该区域大小为512MB。芯片制造商可在此区域布设RAM,通常用于存储程序的变量、堆栈以及其他临时数据,它位于处理器核心附近,可以快速读取和写入,具有低延迟和高带宽。在SRAM区中的最底层还有一个大小为1MB的空间,称为位带区,即该存储空间可以按位寻址,同时该位带区还对应一个32MB的位带别名区,可实现对8M个位变量进行操作(后续介绍)。看工程如何把堆栈设置在SRAM区第二章ARMCortex-M3微处理器体系结构---地址映射3.片内外设区512M(0x40000000~0x5FFFFFFF)主要用于映射片内外设的相关寄存器,这些寄存器用于配置和控制芯片内置的外设(如定时器、串口通信等),通过读写这些寄存器可以配置和控制相应的外设功能。ARM将该片内外设区预留给芯片制造商,根据芯片所具备的外设实现具体的寄存器到地址的映射,若该款芯片不具备某个片内外设,则该地址范围保留。具体到某款CortexM3微控制器片内外设寄存器的地址映射关系,开发者可参考芯片手册提供的详细信息。嵌入式工程师可以通过汇编语言或C语言以访问内存单元的方式来访问这些片内外设的寄存器,从而控制这些外设实现具体功能。该区域的最低1MB区可以按位寻址,同样对应一个32MB的位带别名区(后续介绍)。第二章ARMCortex-M3微处理器体系结构---地址映射4.片外RAM区1G(0x60000000~0x9FFFFFFF)片外RAM区(0x60000000~0x9FFFFFFF):该区域大小为1GB。当片内RAM空间不足时,可以通过扩展片外RAM来提供更多的储存空间。与片内RAM区不同,片外RAM区没有位带区。由系统开发人员在微控制器芯片外进行扩展第二章ARMCortex-M3微处理器体系结构---地址映射5.片外外设区1G(0xA0000000~0xDFFFFFFF)片外外设区(0xA0000000~0xDFFFFFFF):该区域大小为1GB。这个区域用于映射片外外设的寄存器,类似于片内外设区,这里的寄存器用于配置和控制与微控制器连接的外部设备。由系统开发人员在微控制器芯片外进行扩展第二章ARMCortex-M3微处理器体系结构---地址映射6.系统私有外设区0.5G(0xE0000000~0xFFFFFFFF)系统私有外设区(0xE0000000~0xFFFFFFFF):该区域大小为512MB。用于访问Cortex-M3的特色外设(如NVIC、MPU以及片上调试组件等)该区域分为三个部分:内部私有外设区,外部私有外设区和预留给半导体厂商的外设区。第二章ARMCortex-M3微处理器体系结构---位带操作为什么要进行位带操作例如,将地址0x20000000开始4个单元中存放的32位二进制数的bit2位置1,传统的方法通过“读取-修改-写回”三个步骤来实现,代码如下:LDR R0,=0x20000000 ;要读取字单元的地址送R0LDR R1,[R0] ;0x20000000字单元内容送R1ORR R1,#0x4 ;将第2位置1STR R1,[R0] ;写回0x20000000字单元Bit-band-1工程演示无法满足原子操作传统的“读取-修改-写回”位操作方法不仅代码复杂,执行时间长,更重要的是无法满足多线程或并发编程对“原子操作”的需求。所谓原子操作是指在执行过程中不可被中断的单个操作,原子操作通常用于多线程或并发编程中,确保对共享资源的访问和修改是安全的。在并发环境下,多个线程可能同时访问和修改共享资源,这可能导致数据一致性问题。原子操作可以通过硬件支持或软件实现,硬件支持的原子操作是由处理器提供的特定指令,这些指令可以在一个时钟周期内完成,并且是不可中断的。软件实现的原子操作通常使用锁或其他同步机制来确保操作的原子性。第二章ARMCortex-M3微处理器体系结构---位带操作为什么要进行位带操作为了解决这个问题,CortexM3从硬件层面引入位带操作,如图2.14所示。Cortex-M3存储器映射包括两个位带区(BitBandRegion),分别为SRAM和外设存储区域中的最低的1MB。这两个位带区中的地址除了可以像普通RAM一样使用外,它们还都有自己的位带别名区(BitBandAlias),位带区中每个位(bit)“膨胀”为位带别名区的一个32位的字(Word),位带别名区的字只有LSB(字的最低位)有意义。当通过位带别名区访问这些字时,实际上达到访问原始位带区上每个位的效果。也就是说,开发者只需要给位带别名区中的字单元(4个单元)送1或0,硬件系统就自动实现了位带区对应位的置1或清0,从而实现了“原子操作”。(a)片内SRAM区的位带区与位带别名区(b)片内外设区的位带区与位带别名区第二章ARMCortex-M3微处理器体系结构---位带操作对SRAM位带区的某个bit位,设它所在字节单元地址为A,位序号为n(0<=n<=7),则该bit位在别名区对应的四个单元的首地址为:AliasAddr=0x22000000+((A-0x20000000)*8+n)*4第二章ARMCortex-M3微处理器体系结构---位带操作例如,将地址0x20000000开始4个单元中存放的32位二进制数的bit2位置1传统的方法通过“读取-修改-写回”三个步骤来实现,代码如下:LDR R0,=0x20000000 ;要读取字单元的地址送R0LDR R1,[R0] ;0x20000000字单元内容送R1ORR R1,#0x4 ;将第2位置1STR R1,[R0] ;写回0x20000000字单元例如,将地址0x20000000开始4个单元中存放的32位二进制数的bit2位置1通过直接对位带别名区操作实现对该位的置1,代码如下: LDR R0,=0x22000008 ;对应的位带别名区地址送R0 MOV R1,#1 ; STR R1,[R0] ;将1送别名区0x22000008从而实现置1操作Bit-band-2工程演示小端格式(Intel处理器)

小端格式,又称小字节序或者低字节序,是一种将高字节数据存放在高地址、低字节数据存放在低地址的存储格式(“高高低低”)。例如,使用小端格式将字数据0x1234E0存放到地址0x20002000上时,其存储如下图所示。第二章ARMCortex-M3微处理器体系结构---存储格式大端格式(Motorola、IBM处理器)

大端格式,又称大字节序或者高字节序,是一种将高字节数据存放在低地址、低字节数据存放在高地址的存储格式(“高低低高”)。例如,在下图的存储分布中,使用大端格式读取地址0x20009FFC上的字数据为0x0A9B000C。第二章ARMCortex-M3微处理器体系结构---存储格式在绝大多数情况下,基于CM3的单片机都使用小端模式——为了避免不必要的麻烦,在这里推荐读者清一色地使用小端模式。本次课内容就介绍完了,同学们,再见!课后练习--下次课堂操作内容1、通过传统的“读取-修改-写回”方式,将地址0x20000000开始4个单元中存放的32位二进制数的bit31位(最高位)置1,传统的方法通过“读取-修改-写回”三个步骤来实现,代码如下:LDR R0,=0x20000000 ;要读取字单元的地址送R0LDR R1,[R0] ;0x20000000字单元内容送R1ORR R1,#0x80000000 ;将第2位置1STR R1,[R0] ;写回0x20000000字单元2、通过给位带别名区对应单元写“1”,完成与上题相同的操作:0x20000000开始4个单元中存放的32位二进制数的bit31位(最高位)置1---通过练习,更好理解在Cortex-M3微控制器中,通过位带别名区的操作实现原子操作的途径,以满足多线程并发操作对相关存储器单元保护的需求。嵌入式系统设计西安邮电大学计算机学院王忠民第7次课_课堂操作要求1、通过传统的“读取-修改-写回”方式,将地址0x20000000开始4个单元中存放的32位二进制数的bit31位(最高位)置1,传统的方法通过“读取-修改-写回”三个步骤来实现,代码如下: LDR

R0,=0x20000000

;要读取字单元的地址送R0 LDR

R1,[R0]

;0x20000000字单元内容送R1 ORR

R1,#0x80000000

;将第2位置1

STR

R1,[R0]

;写回0x20000000字单元

2、通过给位带别名区对应单元写“1”,完成与上题相同的操作:

0x20000000开始4个单元中存放的32位二进制数的bit31位(最高位)置1

3、通过对位带别名区操作实现:将位带区0x20000000开始4个单元中存放的32位二进制数的bit4(第5位)置1,然后再清0

---通过练习,更好理解在Cortex-M3微控制器中,通过位带别名区的操作实现原子操作的途径,以满足多线程并发操作对相关存储器单元保护的需求。第二章ARMCortex-M3微处理器体系结构---位带操作对SRAM位带区的某个bit位,设它所在字节单元地址为A,位序号为n(0<=n<=7),则该bit位在别名区对应的四个单元的首地址为:AliasAddr=0x22000000+((A-0x20000000)*8+n)*4第二章ARMCortex-M3微处理器体系结构目录ARMCortex体系结构概述CortexM3的组成寄存器阵列存储器系统中断与异常第二章ARMCortex-M3微处理器体系结构---异常与中断NVIC管理的中断来自三个方面:系统异常;片内外设中断;外部设备中断。特殊功能寄存器对中断的管理FAULTMASK寄存器:关内部中断(异常)。是一个只有1位的异常屏蔽寄存器。它的默认值是0,表示没有关异常。当置为1时,系统可以临时阻止除非屏蔽中断(Non-MaskableInterrupt,NMI)外的所有异常的发生,这对于执行关键代码段时保护系统稳定性非常有用。PRIMASK寄存器:关外部可屏蔽中断。是一个只有1位的中断屏蔽寄存器,中断是由CortexM3核之外的外设产生的,它的默认值也是0,表示没有关中断,将其置1后,就禁止所有可屏蔽的外部硬件中断。BASEPRI寄存器:关闭优先级大于某值的中断(不响应优先级低的中断)。定义了被屏蔽优先级的阈值,当它被设成某个值后,所有优先级号大于等于此值的中断都被禁止(优先级号越大,优先级越低)。它的默认值是0。只有在特权级下,才允许访问这3个寄存器。第二章ARMCortex-M3微处理器体系结构---异常与中断NVIC管理的中断来自三个方面(有三种主要类型):1.系统异常:这些异常通常是由处理器本身在执行指令时遇到的特殊情况引起的。尝试执行非法指令、访问不允许的内存区域、硬件错误(如时钟故障)等。系统异常在优先级上通常高于其他类型的中断,以确保处理器能够及时处理这些关键事件。(中断向量表中前16个中断)第二章ARMCortex-M3微处理器体系结构---异常与中断NVIC管理的中断来自三个方面(有三种主要类型):2.片内外设中断:由微控制器芯片内部的硬件外设产生的。这些外设可能是定时器、串行通信接口(如UART、SPI、I2C)、ADC(模数转换器)、DAC(数模转换器)等。当这些外设需要处理器的注意时(例如,定时器溢出、数据接收完成等),它们会产生中断信号,通过NVIC通知处理器。第二章ARMCortex-M3微处理器体系结构---异常与中断NVIC管理的中断来自三个方面(有三种主要类型):3.外部设备中断:外部设备中断是由微控制器外部的硬件产生的。这些外部设备可能是键盘、传感器、外部存储器等。当这些设备需要与处理器通信时,它们会通过专门的引脚发送中断信号到微控制器。这些信号首先会被芯片内部的引脚控制器捕获,然后转发给NVIC进行处理。第二章ARMCortex-M3微处理器体系结构---异常与中断类型编号中断名称优先级简介内部中断(系统异常)0N/AN/A系统堆栈指针1Reset-3(最高)复位2NMI-2不可屏蔽中断来自外部NMI输入引脚3HardFault-1硬件故障:总线故障、存储器管理故障以及应用故障的服务例程无法执行,就会触发硬件故障。另外,在读取中断向量时产生的总线fault也按硬fault处理。4MemoryManagementFault可编程设置存储器管理故障:访问存储保护单元MPU定义的不合法的内存区域,例如向只读区域写入数据5BusFault可编程设置总线故障:在读取指令、读写数据、读取中断向量、中断响应保存寄存器和中断返回恢复寄存器等情况下,检测到存储器访问错误使用错误6UsageFault可编程设置应用故障:使用未定义的指令或进行非法的状态转换。检测到除0操作或未对齐的内存访问7~10ReservedN/A保留11SVCall可编程设置使用SVC指令调用系统服务12DebugMonitor可编程设置可编程调试监控器断点、数据观察点或是外部调试请求13ReservedN/A保留14PendSV可编程设置可挂起的系统服务请求通常为系统设备而设,只能由软件来实现15SYSTICK可编程设置系统定时器Cortex-M3中断向量表第二章ARMCortex-M3微处理器体系结构---异常与中断外部中断(片内外设和片外外设中断)16IRQ#0可编程设置外部中断0内核外部产生,通过NVIC输入17IRQ#1可编程设置外部中断1内核外部产生,通过NVIC输入18IRQ#2可编程设置外部中断2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论