基于ARM的单片机应用及实践课件第二章_第1页
基于ARM的单片机应用及实践课件第二章_第2页
基于ARM的单片机应用及实践课件第二章_第3页
基于ARM的单片机应用及实践课件第二章_第4页
基于ARM的单片机应用及实践课件第二章_第5页
已阅读5页,还剩143页未读 继续免费阅读

下载本文档

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

文档简介

第二章Cortex-M3处理器第二章Cortex-M3处理器Cortex-M3处理器基本结构Cortex-M3中央内核基于哈佛架构,指令和数据各使用一条总线(图2-1)。与Cortex-M3不同,ARM7系列处理器使用冯·诺依曼架构,指令和数据共用信号总线以及存储器。由于指令和数据可以从存储器中同时读取,所以Cortex-M3处理器对多个操作并行执行,加快了应用程序的执行速度。Cortex-M3处理器基本结构Cortex-M3中央内图2-1Cortex-M3处理器架构Cortex-M3处理器集成了内核和高级系统外设的分级处理器Cortex-M3内核哈佛体系结构拥有分支预测功能的三级流水线

Thumb®-2指令集和传统的Thumb指令集带有硬件除法和单信号周期乘法的ALUCortex-M3处理器Cortex-M3内核可配置的中断控制器总线矩阵先进的调试组件可选择的MPU&ETM图2-1Cortex-M3处理器架构Cortex-M3Cortex-M3的应用,主要包括:价格敏感的设备——通用MCU、智能玩具、个人电子设备小的核可以降低硅片面积紧密结合系统外设可缩小面积、降低开发成本Thumb-2代码可减小指令存储器达30%SWD允许使用较小的引脚数和封装在ISR、Boot代码中无需汇编代码单周期的Read/Modify/Write,更紧凑的数据打包确定的中断处理系统更新时的修补能力(ROM到Flash、SRAM)

Cortex-M3的应用,主要包括:价格敏感的设备——通用M低功耗设备——Zigbee、PAN(BlueTooth)、医疗电子设备低功耗内核:0.047mW/MHz(0.13um,ARMMetroLab,50MHz)高级时钟选通技术降低功耗集成的睡眠模式系统部件的功耗控制高效率允许较低的时钟源快速完成任务、增加睡眠时间,降低总的功耗

低功耗设备——Zigbee、PAN(BlueTooth)、医高性能设备——超低价格手机、汽车应用、大容量存储设备;性能可达1.25DMIPS/MHz执行Thumb指令时,比ARM7处理器性能高70%执行ARM指令时,比ARM7处理器性能高35%硬件除法——更好的算法实现快速中断处理可选的MPU针对特定应用调试与跟踪能力高性能设备——超低价格手机、汽车应用、大容量存储设备;CortexM3处理器结构框透视图CortexM3处理器结构框透视图

嵌套向量中断控制器(NVIC)

NVIC为低延迟实现异常处理提供了方便。主要有以下特征:可配置1~240个外部中断。可配置优先级位数3~8位。支持电平和脉冲(边沿)中断。可以动态重新分配中断优先级。优先级分组。支持尾链(tail-chaining)中断。进入中断时,处理器状态自动保存,退出中断时状态自动恢复,无额外指令开销嵌套向量中断控制器(NVIC)总线矩阵Cortex-M3处理器集成了一个AMBAAHB-Lite总线来连接系统外设,并降低系统集成的复杂性。总线矩阵支持不对齐的数据访问,使不同的数据类型可以在存储器中紧密衔接可显著降低SRAM的需求和系统成本。总线矩阵将处理器、调试接口连接到外部总线。总线矩阵总线矩阵连接到以下外部总线:ICode总线。这是一条32位的AHB-Lite总线,主要用于从指令空间中取指和取向量。DCode总线。这是一条32位的AHB-Lite总线,主要用于从指令空间的数据读写和调试访问。系统总线。这是一条32位的AHB-Lite总线,主要用于从系统空间中取指、取向量、读写数据和调试访问。PPB。这是一条32位的APB(v2.0)总线,主要用于从PPB空间读写数据和调试访问。总线矩阵连接到以下外部总线:调试接口硬件调试解决方案,通过一个传统的JTAG口或一个适合小封装器件的2线串行调试口(SWD),可以获得很高的处理器系统可视度。对于系统跟踪,处理器在数据观察点基础上集成了一个可选的ETM(嵌入式跟踪宏单元),它可以被配置为特定的系统事件触发。为了简化这些系统事件的处理,一个串行观测器(SerialWireViewer,SWV)可以通过一个引脚输出标准的ASCII数据流。Flash修补技术,使器件和系统开发者在调试或运行过程中,可以修补从ROM到SRAM或Flash的代码错误,可避免昂贵的重定制调试接口上图向我们展示了设计的RTL层次。其中的两条外设总线:一条72MHZ,一条36MHZ由于ETM、TPIU、SW/JTAG-DP和ROM表4个组件是可选的,或者它们的实现和使用具有灵活性,因此这4个组件位于Cortex-M3处理器的外面。设计实现可能与图中显示的有所不同。可能的系统实现的选项见下面的3个部分:上图向我们展示了设计的RTL层次。TPIU的实现选项:如果您的系统中有ETM,则会含有TPIU格式程序,否则就不包含该格式程序。一个多内核的实现可使用单个或多个TPIU来跟踪。

ARMTPIU模块可以用兼容TPIU的指定合作伙伴的CoreSight取代。在生产设备中,TPIU可以移除。注:如果将TPIU移除,则Cortex-M3不具有跟踪功能。TPIU的实现选项:SW/JTAG-DP的实现选项:设计实现可以含有SW-DP或JTAG-DP中的任一个或两者都有。

ARMSW-DP可以被兼容SW-DP的指定合作伙伴的CoreSight取代。ARMJTAG-DP可以被兼容JTAG-DP的指定合作伙伴的CoreSight取代。

SW-DP或JTAG-DP可以包含指定合作伙伴的测试接口。

ROM表如果系统中添加了附加的调试元件,则ROM存储器表中的描述需进行修改。SW/JTAG-DP的实现选项:

寄存器Cortex-M3寄存器:13个通用寄存器(R0-R12)分组的堆栈指针SP链接寄存器R14程序计数器R15特殊用途程序状态寄存器xPSR寄存器Cortex-M3寄存器:基于ARM的单片机应用及实践课件第二章1、通用寄存器通用目的寄存器R0-R12都是32位通用寄存器,用于数据操作。注意:绝大多数16位Thumb指令只能访问R0-R7,而32位Thumb-2指令可以访问所有寄存器。复位后的初始值是不可预料的1、通用寄存器堆栈指针R13:Cortex-M3拥有两个堆栈指针,然而它们是banked,因此任一时刻只能使用其中的一个。主堆栈指针(MSP):复位后缺省使用的堆栈指针,用于操作系统内核以及异常处理例程(包括中断服务例程)进程堆栈指针(PSP):由用户的应用程序代码使用。堆栈指针R13:堆栈是一种存储器的使用模型。它由一块连续的内存和一个栈顶指针组成,用于实现“后进先出”的缓冲区。其最典型的应用,就是在数据处理前先保存寄存器的值,再在处理任务完成后从中恢复先前保护的这些值。堆栈指针用于访问堆栈,并且PUSH指令和POP指令默认使用SP。堆栈是一种存储器的使用模型。它由一块连续的内存和一个栈顶指针在执行PUSH和POP操作时,通常被称为SP的地址寄存器,会由硬件自动调整它的值,以避免后续操作破坏先前的数据。在执行PUSH和POP操作时,通常被称为SP的地址寄存器,会连接寄存器R14:当呼叫一个子程序时,由R14存储返回地址程序计数寄存器R15:指向当前的程序地址。如果修改它的值,就能改变程序的执行流连接寄存器R14:2、特殊功能寄存器Cortex-M3还在内核水平上搭载了若干特殊功能寄存器,包括:程序状态字寄存器组(PSRs)中断屏蔽寄存器组(PRIMASK,FAULTMASK,BASEPRI)控制寄存器(CONTROL)2、特殊功能寄存器特殊寄存器及其功能

特殊寄存器及其功能通过MRS/MSR指令,这3个PSRs即可以单独访问,也可以组合访问(2个组合,3个组合都可以)。当使用三合一的方式访问时,应使用名字“xPSR”或者“PSR”。应用PSR应用PSR(APSR)包含条件代码标志。在进入异常之前,Cortex-M3处理器将条件代码标志保存在堆栈内。您可以使用MSR(2)和MRS(2)指令来访问APSR。APSR的位分配如图所示。通过MRS/MSR指令,这3个PSRs即可以单独访问,也可以应用程序状态寄存器的位分配其中:应用程序状态寄存器的位分配其中:中断PSR中断PSR(IPSR)包含当前激活的异常的ISR编号。IPSR的位分配如图所示。中断PSR中断程序状态寄存器的位分配中断程序状态寄存器的位分配执行PSR执行PSR(EPSR)包含两个重叠的区域:可中断-可继续(interruptible-continuable)指令(ICI)区,用于被打断的多寄存器加载和存储指令。用于If-Then(IT)指令的执行状态区,以及T位(Thumb状态位)。执行PSR可中断-可继续指令(ICI)区多寄存器加载(LDM)和存储(STM)操作是可中断的。EPSR的ICI区用来保存从产生中断的点继续执行多寄存器加载和存储操作时所必需的信息。If-then状态区EPSR的IT区包含了If-Then指令的执行状态位。可中断-可继续指令(ICI)区注:ICI区和IT区是重叠的,因此,If-Then模块内的多寄存器加载或存储操作不具有可中断-可继续功能。EPSR的位分配如图所示。不能直接访问EPSR,若想修改EPSR必须发生以下两个事件之一:在执行LDM或STM指令时产生一次中断执行If-Then指令注:ICI区和IT区是重叠的,因此,If-Then模下表描述了EPSR的位分配。下表描述了EPSR的位分配。

控制寄存器(CONTROL)控制寄存器有两个用途:一用于定义特权级别,二用于选择当前使用哪个堆栈指针。由两个比特来行使这两个职能。控制寄存器(CONTROL)Cortex-M3的CONTROL寄存器Cortex-M3的CONTROL寄存器CONTROL[1]在Cortex-M3的handler模式中,CONTROL[1]总是0。在线程模式中则可以为0或1。因此,仅当处于特权级的线程模式下,此位才可写,其它场合下禁止写此位。改变处理器的模式也有其它的方式:在异常返回时,通过修改LR的位2,也能实现模式切换。这是LR在异常返回时的特殊用法,颠覆了对LR的传统使用方式,将后面章节展开论述。CONTROL[0]仅当在特权级下操作时才允许写该位。一旦进入了用户级,唯一返回特权级的途径,就是触发一个(软)中断,再由服务例程改写该位CONTROL[1]存储格式Cortex-M3处理器将存储器看作从0开始向上编号的字节的线性集合。例如:字节0-3存放第一个被保存的字字节4-7存放第二个被保存的字Cortex-M3处理器能够以小端格式或大端格式访问存储器中的数据字,而访问代码时始终使用小端格式。存储格式Cortex-M3处理器将存储器看作从0开始向上注意:小端格式是ARM处理器默认的存储器格式。在小端格式中,一个字中最低地址的字节为该字的最低有效字节,最高地址的字节为最高有效字节。存储器系统地址0的字节与数据线7-0相连。在大端格式中,一个字中最低地址的字节为该字的最高有效字节,而最高地址的字节为最低有效字节。存储器系统地址0的字节与数据线31-24相连。注意:Cortex-M3处理器有一个配置管脚BIGEND,您能够使用它来选择小端格式或BE-8大端格式。该管脚在复位时被采样,结束复位后存储器格式不能修改。注意:对系统控制空间(SCS)的访问始终采用小端格式。在非复位的状态下试图改变存储器格式的操作将被忽略。PPB空间只能为小端格式,BIGEND的设置无效。Cortex-M3处理器有一个配置管脚BIGEND,您能小端数据格式小端数据格式大端数据格式大端数据格式指令集Cortex-M3处理器不支持ARM指令。Cortex-M3处理器支持所有的ARMv6Thumb指令,下表2-4中列出的除外。指令集Cortex-M3处理器不支持ARM指令。Cortex-M3支持的Thumb-2指令Cortex-M3支持的Thumb-2指令续上表(1)续上表(1)续上表(2)续上表(2)续上表(2)续上表(2)存储器映射Cortex-M3处理器只有一个单一固定的存储器映射。这一点极大地方便了软件在各种CM3单片机间的移植。如各款CM3单片机的NVIC和MPU都在相同的位置布设寄存器,使得它们变得与具体器件无关。虽然CM3定出的条条框框是粗线条的,但它依然允许芯片制造商灵活细腻地分配存储器空间,以制造出各具特色的单片机产品。存储器映射Cortex-M3处理器只有一个单一固定的存储器存储器组织存储空间的一些位置用于调试组件等私有外设,这个地址段被称为“私有外设区”。私有外设区的组件包括:闪存地址重载及断点单元(FPB)数据观察点单元(DWT)仪器化跟踪宏单元(ITM)嵌入式跟踪宏单元(ETM)跟踪端口接口单元(TPIU)lROM表存储器组织存储空间的一些位置用于调试组件等私有外设,这个地址CM3的地址空间是4GB,程序可以在代码区,内部SRAM区以及外部RAM区中执行。但是因为指令总线与数据总线是分开的,最理想的是把程序放到代码区,从而使取指和数据访问各自使用自总线具体4GB的粗线条划分如下图:CM3的地址空间是4GB,程序可以在代码区,内部SRAM区基于ARM的单片机应用及实践课件第二章内部SRAM区的大小是512MB,用于让芯片制造商连接片上的SRAM,这个区通过系统总线来访问。在这个区的下部,有一个1MB的区间,被称为“位带区”。该位带区还有一个对应的32MB的“位带别名(alias)区”,容纳了8M个“位变量”(对比8051的只有128个位变量)。位带区对应的是最低的1MB地址范围,而位带别名区里面的每个字对应位带区的一个比特。位带操作只适用于数据访问,不适用于取指。通过位带的功能,可以把多个布尔型数据打包在单一的字中,却依然可以从位带别名区中,像访问普通内存一样地使用它们。位带别名区中的访问操作是原子的,消灭了传统的“读-改-写”三步曲。位带操作的细节待会还要讲到。内部SRAM区的大小是512MB,用于让芯片制造商连接片上的地址空间的另一个512MB范围由片上外设(的寄存器)使用。这个区中也有一条32MB的位带别名,以便于快捷地访问外设寄存器,用法与内部SRAM区中的位带相同。如可以方便地访问各种控制位和状态位。要注意的是,外设区内不允许执行指令。还有两个1GB的范围,分别用于连接外部RAM和外部设备,它们之中没有位带。两者的区别在于外部RAM区允许执行指令,而外部设备区则不允许。最后还剩下0.5GB的隐秘地带,CM3内核的闺房就在这里面,包括了系统级组件,内部私有外设总线s,外部私有外设总线s,以及由提供者定义的系统外设。地址空间的另一个512MB范围由片上外设(的寄存器)使用。这私有外设总线有两条:AHB私有外设总线,只用于CM3内部的AHB外设,它们是:NVIC,FPB,DWT和ITM。APB私有外设总线,既用于CM3内部的APB设备,也用于外部设备(“外部”是对内核而言)。CM3允许器件制造商再添加一些片上APB外设到APB私有总线上,它们通过APB接口来访问。私有外设总线有两条:NVIC所处的区域叫做“系统控制空间(SCS)”,在SCS里的除了NVIC外,还有SysTick、MPU以及代码调试控制所用的寄存器,如图所示:NVIC所处的区域叫做“系统控制空间(SCS)”,在SCS里位段支持了位段操作后,可以使用普通的加载/存储指令来对单一的比特进行读写。在CM3中,有两个区中实现了位段。一是SRAM区的最低1MB范围,二则是片内外设区的最低1MB范围。这两个位段中的地址除了可以像普通的RAM一样使用外,它们还都有自己的“位带别名区”,位带别名区把每个比特膨胀成一个32位的字。当通过位带别名区访问这些字时,就可以达到访问原始比特的目的。位段支持了位段操作后,可以使用普通的加载/存储指令来对单一的映射公式显示如何将别名区中的字与bit-band区中的对应位或目标位关联。映射公式如下:bit_word_offset=(byte_offset×32)+(bit_number×4)bit_word_addr=bit_band_base+bit_word_offset这里:Bit_word_offset为bit-band存储区中的目标位的位置。Bit_word_addr为别名存储区中映射为目标位的字的地址。Bit_band_base是别名区的开始地址。Bit_offset为bit-band区中包含目标位的字节的编号。Bit_number为目标位的位位置(0-7)上式中,“*4”表示一个字为4个字节,“*32”表示一个字节中有32个比特。映射公式显示如何将别名区中的字与bit-band区中的对位段区与位段别名区的膨胀关系A图位段区与位段别名区的膨胀关系A图位段区与位段别名区的膨胀关系B图位段区与位段别名区的膨胀关系B图上图图显示了SRAMbit-band别名区和SRAMbit-band区之间的bit-band映射的例子:地址0x23FFFFE0的别名字映射为0x200FFFFC的bit-band字节的位0:0x23FFFFE0=0x22000000+(0xFFFFF*32)+0*4地址0x23FFFFEC的别名字映射为0x200FFFFC的bit-band字节的位7:0x23FFFFEC=0x22000000+(0xFFFFF*32)+7*4上图图显示了SRAMbit-band别名区和SRAMbi地址0x22000000的别名字映射为0x20000000的bit-band字节的位0:0x22000000=0x22000000+(0*32)+0*4地址0x220001C的别名字映射为0x20000000的bit-band字节的位0:0x2200001C=0x22000000+(0*32)+7*4地址0x22000000的别名字映射为0x20000000例:欲设置地址0x2000_0000中的比特2,则使用位带操作的设置过程如下图所示:写数据到位段别名区例:欲设置地址0x2000_0000中的比特2,则使用位带操从位段别名区中读取比特从位段别名区中读取比特存储器访问属性CM3在定义了存储器映射之外,还为存储器的访问规定了4种属性,分别是:可否缓冲(Bufferable)可否缓存(Cacheable)可否执行(Executable)可否共享(Sharable)存储器访问属性CM3在定义了存储器映射之外,还为存储器的访问2.6异常异常是指由于执行指令时的一个错误条件而产生的故障。出现故障后可以同步或不同步地向引起故障的指令报告,但通常还是会同步报告。不精确的总线故障是ARMv7-M性能分析(performanceprofiling)支持的一种不同步故障。同步故障总是和引起该故障的指令一同被报告。不同步故障不能保证与引起该故障的指令相关的方式报告。2.6异常异常是指由于执行指令时的一个错误条件而产生的故障。异常模型Cortex-M3处理器和嵌套向量中断控制器(NVIC)对所有异常按优先级进行排序并处理。所有异常都在处理模式中操作。出现异常时,自动将处理器状态保存到堆栈中,并在中断服务程序(ISR)结束时自动从堆栈中恢复。在状态保存的同时取出向量快速地进入中断。处理器支持末尾连锁(tail-chaining)中断技术,它能够在没有多余的状态保存和恢复指令的情况下执行背对背中断(back-to-backinterrupt)。异常模型Cortex-M3处理器和嵌套向量中断控制器(NV异常类型异常类型异常处理占先:新的异常比当前的异常或线程的优先级更高并打断当前的流程,这是对挂起中断的响应。如果挂起中断的优先级比当前的ISR或线程的优先级更高,则进入挂起中断的ISR。如果一个ISR抢占了另一个ISR,则产生了中断嵌套。在进入异常时,处理器自动保存其状态,将状态压栈。与此同时,取出相应的中断向量。当处理器状态被保存并且ISR的第一条指令进入处理器流水线的执行阶段时,开始执行ISR的第一条指令。状态保存在系统总线上执行。取向量操作根据向量表所在位置可以在系统总线或DCode总线上执行。异常处理占先:末尾连锁末尾连锁(Tail-chain)是处理器用来加速中断响应的一种机制。在结束ISR时,如果存在一个挂起中断,其优先级高于正在返回的ISR或线程,那么就会跳过出栈操作,转而将控制权让给新的ISR。末尾连锁返回在没有挂起(pending)异常或没有比被压栈的ISR优先级更高的挂起异常时,处理器执行出栈操作,并返回到被压栈的ISR或线程模式。在响应ISR之后,处理器通过出栈操作自动将处理器状态恢复为进入ISR之前的状态。如果在状态恢复过程中出现一个新的中断,并且该中断的优先级比正在返回的ISR或线程更高,则处理器放弃状态恢复操作并将新的中断作为tail-chain来处理。返回迟来迟来是处理器用来加速占先的一种机制。如果在保存前一个占先的状态时出现一个优先级更高的中断,则处理器转去处理优先级更高的中断,开始该中断的取向量操作。状态保存不会受到迟来的影响。因为被保存的状态对于两个中断都是一样的,状态保存继续执行不会被打断。处理器对迟来中断进行管理,直到ISR的第一条指令进入处理器流水线的执行阶段。返回时,采用常规的ail-chain技术。迟来嵌套向量中断控制器NVIC支持240个优先级可动态配置的中断,每个中断的优先级有256个选择。低延迟的中断处理可以通过紧耦合的NVIC和处理器内核接口来实现,让新进的中断可以得到有效的处理。提供如下的功能:可嵌套中断支持向量中断支持动态优先级调整支持中断延迟大大缩短中断可屏蔽嵌套向量中断控制器NVIC支持240个优先级可动态配置的可嵌套中断支持可嵌套中断支持的作用范围很广,覆盖了所有的外部中断和绝大多数系统异常。外在表现是,这些异常都可以被赋予不同的优先级。当前优先级被存储在xPSR的专用字段中。当一个异常发生时,硬件会自动比较该异常的优先级是否比当前的异常优先级更高。如果发现来了更高优先级的异常,处理器就会中断当前的中断服务例程(或者是普通程序),而服务新来的异常--即抢占。可嵌套中断支持向量中断支持当开始响应一个中断后,CM3会自动定位一张向量表,并且根据中断号从表中找出ISR的入口地址,然后跳转过去执行。不需要像以前的ARM那样,由软件来分辨到底是哪个中断发生了也无需半导体厂商提供私有的中断控制器来完成这种工作。这样,中断延迟时间大为缩短。向量中断支持动态优先级调整支持软件可以在运行时期更改中断的优先级。如果在某ISR中修改了自己所对应中断的优先级,而且这个中断又有新的实例处于悬起(pending),也不会自己打断自己,从而没有重入风险。所谓的重入是指某段子程序还没有执行完,就因为中断或者是多任务操作系统的调度原因,导致该子程序在一个新的寄存器上下文中被执行。这种情况常常会闹出乱子,因此有“可重入性”的研究。动态优先级调整支持中断延迟大大缩短Cortex-M3为了缩短中断延迟,引入了好几个新特性。包括自动的现场保护和恢复,以及其它的措施,用于缩短中断嵌套时的ISR间延迟。中断可屏蔽既可以屏蔽优先级低于某个阈值的中断/异常(设置BASEPRI寄存器),也可以全体封杀(设置PRIMASK和FAULTMASK寄存器)。这是为了让时间关键的任务能在死线到来前完成,而不被干扰。中断延迟大大缩短Thanks!Thanks!第二章Cortex-M3处理器第二章Cortex-M3处理器Cortex-M3处理器基本结构Cortex-M3中央内核基于哈佛架构,指令和数据各使用一条总线(图2-1)。与Cortex-M3不同,ARM7系列处理器使用冯·诺依曼架构,指令和数据共用信号总线以及存储器。由于指令和数据可以从存储器中同时读取,所以Cortex-M3处理器对多个操作并行执行,加快了应用程序的执行速度。Cortex-M3处理器基本结构Cortex-M3中央内图2-1Cortex-M3处理器架构Cortex-M3处理器集成了内核和高级系统外设的分级处理器Cortex-M3内核哈佛体系结构拥有分支预测功能的三级流水线

Thumb®-2指令集和传统的Thumb指令集带有硬件除法和单信号周期乘法的ALUCortex-M3处理器Cortex-M3内核可配置的中断控制器总线矩阵先进的调试组件可选择的MPU&ETM图2-1Cortex-M3处理器架构Cortex-M3Cortex-M3的应用,主要包括:价格敏感的设备——通用MCU、智能玩具、个人电子设备小的核可以降低硅片面积紧密结合系统外设可缩小面积、降低开发成本Thumb-2代码可减小指令存储器达30%SWD允许使用较小的引脚数和封装在ISR、Boot代码中无需汇编代码单周期的Read/Modify/Write,更紧凑的数据打包确定的中断处理系统更新时的修补能力(ROM到Flash、SRAM)

Cortex-M3的应用,主要包括:价格敏感的设备——通用M低功耗设备——Zigbee、PAN(BlueTooth)、医疗电子设备低功耗内核:0.047mW/MHz(0.13um,ARMMetroLab,50MHz)高级时钟选通技术降低功耗集成的睡眠模式系统部件的功耗控制高效率允许较低的时钟源快速完成任务、增加睡眠时间,降低总的功耗

低功耗设备——Zigbee、PAN(BlueTooth)、医高性能设备——超低价格手机、汽车应用、大容量存储设备;性能可达1.25DMIPS/MHz执行Thumb指令时,比ARM7处理器性能高70%执行ARM指令时,比ARM7处理器性能高35%硬件除法——更好的算法实现快速中断处理可选的MPU针对特定应用调试与跟踪能力高性能设备——超低价格手机、汽车应用、大容量存储设备;CortexM3处理器结构框透视图CortexM3处理器结构框透视图

嵌套向量中断控制器(NVIC)

NVIC为低延迟实现异常处理提供了方便。主要有以下特征:可配置1~240个外部中断。可配置优先级位数3~8位。支持电平和脉冲(边沿)中断。可以动态重新分配中断优先级。优先级分组。支持尾链(tail-chaining)中断。进入中断时,处理器状态自动保存,退出中断时状态自动恢复,无额外指令开销嵌套向量中断控制器(NVIC)总线矩阵Cortex-M3处理器集成了一个AMBAAHB-Lite总线来连接系统外设,并降低系统集成的复杂性。总线矩阵支持不对齐的数据访问,使不同的数据类型可以在存储器中紧密衔接可显著降低SRAM的需求和系统成本。总线矩阵将处理器、调试接口连接到外部总线。总线矩阵总线矩阵连接到以下外部总线:ICode总线。这是一条32位的AHB-Lite总线,主要用于从指令空间中取指和取向量。DCode总线。这是一条32位的AHB-Lite总线,主要用于从指令空间的数据读写和调试访问。系统总线。这是一条32位的AHB-Lite总线,主要用于从系统空间中取指、取向量、读写数据和调试访问。PPB。这是一条32位的APB(v2.0)总线,主要用于从PPB空间读写数据和调试访问。总线矩阵连接到以下外部总线:调试接口硬件调试解决方案,通过一个传统的JTAG口或一个适合小封装器件的2线串行调试口(SWD),可以获得很高的处理器系统可视度。对于系统跟踪,处理器在数据观察点基础上集成了一个可选的ETM(嵌入式跟踪宏单元),它可以被配置为特定的系统事件触发。为了简化这些系统事件的处理,一个串行观测器(SerialWireViewer,SWV)可以通过一个引脚输出标准的ASCII数据流。Flash修补技术,使器件和系统开发者在调试或运行过程中,可以修补从ROM到SRAM或Flash的代码错误,可避免昂贵的重定制调试接口上图向我们展示了设计的RTL层次。其中的两条外设总线:一条72MHZ,一条36MHZ由于ETM、TPIU、SW/JTAG-DP和ROM表4个组件是可选的,或者它们的实现和使用具有灵活性,因此这4个组件位于Cortex-M3处理器的外面。设计实现可能与图中显示的有所不同。可能的系统实现的选项见下面的3个部分:上图向我们展示了设计的RTL层次。TPIU的实现选项:如果您的系统中有ETM,则会含有TPIU格式程序,否则就不包含该格式程序。一个多内核的实现可使用单个或多个TPIU来跟踪。

ARMTPIU模块可以用兼容TPIU的指定合作伙伴的CoreSight取代。在生产设备中,TPIU可以移除。注:如果将TPIU移除,则Cortex-M3不具有跟踪功能。TPIU的实现选项:SW/JTAG-DP的实现选项:设计实现可以含有SW-DP或JTAG-DP中的任一个或两者都有。

ARMSW-DP可以被兼容SW-DP的指定合作伙伴的CoreSight取代。ARMJTAG-DP可以被兼容JTAG-DP的指定合作伙伴的CoreSight取代。

SW-DP或JTAG-DP可以包含指定合作伙伴的测试接口。

ROM表如果系统中添加了附加的调试元件,则ROM存储器表中的描述需进行修改。SW/JTAG-DP的实现选项:

寄存器Cortex-M3寄存器:13个通用寄存器(R0-R12)分组的堆栈指针SP链接寄存器R14程序计数器R15特殊用途程序状态寄存器xPSR寄存器Cortex-M3寄存器:基于ARM的单片机应用及实践课件第二章1、通用寄存器通用目的寄存器R0-R12都是32位通用寄存器,用于数据操作。注意:绝大多数16位Thumb指令只能访问R0-R7,而32位Thumb-2指令可以访问所有寄存器。复位后的初始值是不可预料的1、通用寄存器堆栈指针R13:Cortex-M3拥有两个堆栈指针,然而它们是banked,因此任一时刻只能使用其中的一个。主堆栈指针(MSP):复位后缺省使用的堆栈指针,用于操作系统内核以及异常处理例程(包括中断服务例程)进程堆栈指针(PSP):由用户的应用程序代码使用。堆栈指针R13:堆栈是一种存储器的使用模型。它由一块连续的内存和一个栈顶指针组成,用于实现“后进先出”的缓冲区。其最典型的应用,就是在数据处理前先保存寄存器的值,再在处理任务完成后从中恢复先前保护的这些值。堆栈指针用于访问堆栈,并且PUSH指令和POP指令默认使用SP。堆栈是一种存储器的使用模型。它由一块连续的内存和一个栈顶指针在执行PUSH和POP操作时,通常被称为SP的地址寄存器,会由硬件自动调整它的值,以避免后续操作破坏先前的数据。在执行PUSH和POP操作时,通常被称为SP的地址寄存器,会连接寄存器R14:当呼叫一个子程序时,由R14存储返回地址程序计数寄存器R15:指向当前的程序地址。如果修改它的值,就能改变程序的执行流连接寄存器R14:2、特殊功能寄存器Cortex-M3还在内核水平上搭载了若干特殊功能寄存器,包括:程序状态字寄存器组(PSRs)中断屏蔽寄存器组(PRIMASK,FAULTMASK,BASEPRI)控制寄存器(CONTROL)2、特殊功能寄存器特殊寄存器及其功能

特殊寄存器及其功能通过MRS/MSR指令,这3个PSRs即可以单独访问,也可以组合访问(2个组合,3个组合都可以)。当使用三合一的方式访问时,应使用名字“xPSR”或者“PSR”。应用PSR应用PSR(APSR)包含条件代码标志。在进入异常之前,Cortex-M3处理器将条件代码标志保存在堆栈内。您可以使用MSR(2)和MRS(2)指令来访问APSR。APSR的位分配如图所示。通过MRS/MSR指令,这3个PSRs即可以单独访问,也可以应用程序状态寄存器的位分配其中:应用程序状态寄存器的位分配其中:中断PSR中断PSR(IPSR)包含当前激活的异常的ISR编号。IPSR的位分配如图所示。中断PSR中断程序状态寄存器的位分配中断程序状态寄存器的位分配执行PSR执行PSR(EPSR)包含两个重叠的区域:可中断-可继续(interruptible-continuable)指令(ICI)区,用于被打断的多寄存器加载和存储指令。用于If-Then(IT)指令的执行状态区,以及T位(Thumb状态位)。执行PSR可中断-可继续指令(ICI)区多寄存器加载(LDM)和存储(STM)操作是可中断的。EPSR的ICI区用来保存从产生中断的点继续执行多寄存器加载和存储操作时所必需的信息。If-then状态区EPSR的IT区包含了If-Then指令的执行状态位。可中断-可继续指令(ICI)区注:ICI区和IT区是重叠的,因此,If-Then模块内的多寄存器加载或存储操作不具有可中断-可继续功能。EPSR的位分配如图所示。不能直接访问EPSR,若想修改EPSR必须发生以下两个事件之一:在执行LDM或STM指令时产生一次中断执行If-Then指令注:ICI区和IT区是重叠的,因此,If-Then模下表描述了EPSR的位分配。下表描述了EPSR的位分配。

控制寄存器(CONTROL)控制寄存器有两个用途:一用于定义特权级别,二用于选择当前使用哪个堆栈指针。由两个比特来行使这两个职能。控制寄存器(CONTROL)Cortex-M3的CONTROL寄存器Cortex-M3的CONTROL寄存器CONTROL[1]在Cortex-M3的handler模式中,CONTROL[1]总是0。在线程模式中则可以为0或1。因此,仅当处于特权级的线程模式下,此位才可写,其它场合下禁止写此位。改变处理器的模式也有其它的方式:在异常返回时,通过修改LR的位2,也能实现模式切换。这是LR在异常返回时的特殊用法,颠覆了对LR的传统使用方式,将后面章节展开论述。CONTROL[0]仅当在特权级下操作时才允许写该位。一旦进入了用户级,唯一返回特权级的途径,就是触发一个(软)中断,再由服务例程改写该位CONTROL[1]存储格式Cortex-M3处理器将存储器看作从0开始向上编号的字节的线性集合。例如:字节0-3存放第一个被保存的字字节4-7存放第二个被保存的字Cortex-M3处理器能够以小端格式或大端格式访问存储器中的数据字,而访问代码时始终使用小端格式。存储格式Cortex-M3处理器将存储器看作从0开始向上注意:小端格式是ARM处理器默认的存储器格式。在小端格式中,一个字中最低地址的字节为该字的最低有效字节,最高地址的字节为最高有效字节。存储器系统地址0的字节与数据线7-0相连。在大端格式中,一个字中最低地址的字节为该字的最高有效字节,而最高地址的字节为最低有效字节。存储器系统地址0的字节与数据线31-24相连。注意:Cortex-M3处理器有一个配置管脚BIGEND,您能够使用它来选择小端格式或BE-8大端格式。该管脚在复位时被采样,结束复位后存储器格式不能修改。注意:对系统控制空间(SCS)的访问始终采用小端格式。在非复位的状态下试图改变存储器格式的操作将被忽略。PPB空间只能为小端格式,BIGEND的设置无效。Cortex-M3处理器有一个配置管脚BIGEND,您能小端数据格式小端数据格式大端数据格式大端数据格式指令集Cortex-M3处理器不支持ARM指令。Cortex-M3处理器支持所有的ARMv6Thumb指令,下表2-4中列出的除外。指令集Cortex-M3处理器不支持ARM指令。Cortex-M3支持的Thumb-2指令Cortex-M3支持的Thumb-2指令续上表(1)续上表(1)续上表(2)续上表(2)续上表(2)续上表(2)存储器映射Cortex-M3处理器只有一个单一固定的存储器映射。这一点极大地方便了软件在各种CM3单片机间的移植。如各款CM3单片机的NVIC和MPU都在相同的位置布设寄存器,使得它们变得与具体器件无关。虽然CM3定出的条条框框是粗线条的,但它依然允许芯片制造商灵活细腻地分配存储器空间,以制造出各具特色的单片机产品。存储器映射Cortex-M3处理器只有一个单一固定的存储器存储器组织存储空间的一些位置用于调试组件等私有外设,这个地址段被称为“私有外设区”。私有外设区的组件包括:闪存地址重载及断点单元(FPB)数据观察点单元(DWT)仪器化跟踪宏单元(ITM)嵌入式跟踪宏单元(ETM)跟踪端口接口单元(TPIU)lROM表存储器组织存储空间的一些位置用于调试组件等私有外设,这个地址CM3的地址空间是4GB,程序可以在代码区,内部SRAM区以及外部RAM区中执行。但是因为指令总线与数据总线是分开的,最理想的是把程序放到代码区,从而使取指和数据访问各自使用自总线具体4GB的粗线条划分如下图:CM3的地址空间是4GB,程序可以在代码区,内部SRAM区基于ARM的单片机应用及实践课件第二章内部SRAM区的大小是512MB,用于让芯片制造商连接片上的SRAM,这个区通过系统总线来访问。在这个区的下部,有一个1MB的区间,被称为“位带区”。该位带区还有一个对应的32MB的“位带别名(alias)区”,容纳了8M个“位变量”(对比8051的只有128个位变量)。位带区对应的是最低的1MB地址范围,而位带别名区里面的每个字对应位带区的一个比特。位带操作只适用于数据访问,不适用于取指。通过位带的功能,可以把多个布尔型数据打包在单一的字中,却依然可以从位带别名区中,像访问普通内存一样地使用它们。位带别名区中的访问操作是原子的,消灭了传统的“读-改-写”三步曲。位带操作的细节待会还要讲到。内部SRAM区的大小是512MB,用于让芯片制造商连接片上的地址空间的另一个512MB范围由片上外设(的寄存器)使用。这个区中也有一条32MB的位带别名,以便于快捷地访问外设寄存器,用法与内部SRAM区中的位带相同。如可以方便地访问各种控制位和状态位。要注意的是,外设区内不允许执行指令。还有两个1GB的范围,分别用于连接外部RAM和外部设备,它们之中没有位带。两者的区别在于外部RAM区允许执行指令,而外部设备区则不允许。最后还剩下0.5GB的隐秘地带,CM3内核的闺房就在这里面,包括了系统级组件,内部私有外设总线s,外部私有外设总线s,以及由提供者定义的系统外设。地址空间的另一个512MB范围由片上外设(的寄存器)使用。这私有外设总线有两条:AHB私有外设总线,只用于CM3内部的AHB外设,它们是:NVIC,FPB,DWT和ITM。APB私有外设总线,既用于CM3内部的APB设备,也用于外部设备(“外部”是对内核而言)。CM3允许器件制造商再添加一些片上APB外设到APB私有总线上,它们通过APB接口来访问。私有外设总线有两条:NVIC所处的区域叫做“系统控制空间(SCS)”,在SCS里的除了NVIC外,还有SysTick、MPU以及代码调试控制所用的寄存器,如图所示:NVIC所处的区域叫做“系统控制空间(SCS)”,在SCS里位段支持了位段操作后,可以使用普通的加载/存储指令来对单一的比特进行读写。在CM3中,有两个区中实现了位段。一是SRAM区的最低1MB范围,二则是片内外设区的最低1MB范围。这两个位段中的地址除了可以像普通的RAM一样使用外,它们还都有自己的“位带别名区”,位带别名区把每个比特膨胀成一个32位的字。当通过位带别名区访问这些字时,就可以达到访问原始比特的目的。位段支持了位段操作后,可以使用普通的加载/存储指令来对单一的映射公式显示如何将别名区中的字与bit-band区中的对应位或目标位关联。映射公式如下:bit_word_offset=(byte_offset×32)+(bit_number×4)bit_word_addr=bit_band_base+bit_word_offset这里:Bit_word_offset为bit-band存储区中的目标位的位置。Bit_word_addr为别名存储区中映射为目标位的字的地址。Bit_band_base是别名区的开始地址。Bit_offset为bit-band区中包含目标位的字节的编号。Bit_number为目标位的位位置(0-7)上式中,“*4”表示一个字为4个字节,“*32”表示一个字节中有32个比特。映射公式显示如何将别名区中的字与bit-band区中的对位段区与位段别名区的膨胀关系A图位段区与位段别名区的膨胀关系A图位段区与位段别名区的膨胀关系B图位段区与位段别名区的膨胀关系B图上图图显示了SRAMbit-band别名区和SRAMbit-band区之间的bit-band映射的例子:地址0x23FFFFE0的别名字映射为0x200FFFFC的bit-band字节的位0:0x23FFFFE0=0x22000000+(0xFFFFF*32)+0*4地址0x23FFFFEC的别名字映射为0x200FFFFC的bit-band字节的位7:0x23FFFFEC=0x22000000+(0xFFFFF*32)+7*4上图图显示了SRAMbit-band别名区和SRAMbi地址0x22000000的别名字映射为0x20000000的bit-band字节的位0:0x22000000=0x22000000+(0*32)+0*4地址0x220001C的别名字映射为0x20000000的bit-band字节的位0:0x2200001C=0x22000000+(0*32)+7*4地址0x22000000的别名字映射为0x20000000例:欲设置地址0x2000_0000中的比特2,则使用位带操作的设置过程如下图所示:写数据到位段别名区例:欲设置地址0x2000_0000中的比特2,则使用位带操从位段别名区中读取比特从位段别名区中读取比特存储器访问属性CM3在定义了存储器映射之外,还为存储器的访问规定了4种属性,分别是:可否缓冲(Bufferable)可否缓存(Cacheable)可否执行(Executable)可否共享(Sharable)存储器访问属性CM3在定义了存储器映射之外,还为存储器的访问2.6异常异常是指由于执行指令时的一个错误条件而产生的故障。

温馨提示

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

最新文档

评论

0/150

提交评论