第6章 嵌入式系统和Cortex-M3-M4_第1页
第6章 嵌入式系统和Cortex-M3-M4_第2页
第6章 嵌入式系统和Cortex-M3-M4_第3页
第6章 嵌入式系统和Cortex-M3-M4_第4页
第6章 嵌入式系统和Cortex-M3-M4_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

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

文档简介

1、嵌入式系统原理与实验 第第6 6章章 嵌入式系统和嵌入式系统和Cortex-M3Cortex-M36.1 ARM系统概述6.2 Cortex-M3/M4概述6.3 Cortex-M3/M4基础6.4 存储器系统6.5 指令集6.6 存储器保护单元1嵌入式系统原理与实验 6.1 ARM6.1 ARM系统概述系统概述1985年,Roger Wilson和Steve Furber设计了第一代32位、6M Hz的处理器,做出了一台RISC指令集的计算机,简称ARM(Acorn RISC Machine)ARM的由来。1990年,Acorn公司正式改组为ARM计算机公司。ARM公司生产的芯片,称为ARM

2、芯片。ARM公司的业务一直是出售IP核。 最成功的ARM7TDMI已经有数亿片售出。ARM控股的ARM处理器家庭的突出例子包括ARM7, ARM9, ARM11 and Cortex。2嵌入式系统原理与实验 ARMARM处理器架构发展进程3嵌入式系统原理与实验 6.2 Cortex-M3/M46.2 Cortex-M3/M4概述概述4嵌入式系统原理与实验 32-bit微处理器: 32-bit 数据、寄存器组、存储器接口。 哈佛架构:独立的指令总线和数据总线。 存储空间:4GB。 寄存器:寄存器 (R0 到 R15) 和 特殊功能寄存器。 运行模式:线程模式和处理模式;特权级和用户级。 中断和异

3、常:内置嵌套向量中断控制器;支持11 种系统异常外加240 种外部 IRQ。 总线接口:若干总线接口允许 Cortex-M3 同时取指令和取数据。 MPU:一个可选的存储器保护单元允许对特权访问和用户程序访问制定访问规则。 指令集:Thumb-2 指令集;允许 32位指令和16位指令被同时使用。 固定的内部调试组件:提供调试操作支持和像断点调试这样的功能。5嵌入式系统原理与实验 6Thumb-2指令集与Thumb指令集的关系嵌入式系统原理与实验 7基于Cortex-M3/M4的微处理器芯片ARM设计嵌入式系统原理与实验 通用寄存器通用寄存器1. R0R7 (低寄存器): 可以被所有 16-bi

4、t Thumb 指令和所有 32-bit Thumb-2 指令访问。2. R8R12 (高寄存器):可以被所有 Thumb-2 指令但不能被所有 Thumb 指令访问。 86.3 Cortex-M3/M4 6.3 Cortex-M3/M4 基础基础6.3.1 6.3.1 寄存器组寄存器组嵌入式系统原理与实验 9堆栈指针堆栈指针R13 是堆栈指针。两个堆栈指针在同一时间只有一个可见。堆栈指针的最低两位总是0, 这意味着他们总是字对齐。1. 主堆栈指针(MSP) : 这是默认的堆栈指针。或写作SP_main2. 进程堆栈指针(PSP) : 被常规的应用程序代码所使用。或写作SP_process嵌入

5、式系统原理与实验 汇编语言的语法: PUSH R0 ; R13=R13-4, then MemoryR13=R0 POP R0 ; R0=MemoryR13, then R13=R13+4可以在一条指令中PUSH或POP多个寄存器:subroutine_1 PUSH R0-R7, R12, R14 ; Save registers ; Do your processing POP R0-R7, R12, R14 ; Restore registers BX R14 ; Return to calling function10嵌入式系统原理与实验 连接寄存器连接寄存器R14R14 是连接寄存器

6、(LR)。 当一个子程序或函数被调用时,LR用来存储返回的程序计数器。示例:Main ; Main programBL func1 ; Call function1 ; PC = function1 ; LR = next instruction ; program codefunc1BX LR ; Return11嵌入式系统原理与实验 程序计数器程序计数器R15R15 是程序计数器。可以在汇编语言中通过R15或PC访问。示例:示例:0 x1000 : MOV R0, PC ; R0 = 0 x100412嵌入式系统原理与实验 6.3.2 6.3.2 特殊功能寄存器特殊功能寄存器在Cortex

7、-M3/M4处理器中的特殊寄存器包括: 1. 程序状态寄存器 (PSRs)2. 中断屏蔽寄存器(PRIMASK, FAULTMASK, and BASEPRI)3. 控制寄存器 (CONTROL)13嵌入式系统原理与实验 程序状态寄存器程序状态寄存器 (PSRs) (PSRs)程序状态寄存器可以分为三个状态寄存器:1. 应用 PSR (APSR) 负、零、进/借、溢、饱和(用于饱和运算)2. 中断 PSR (IPSR)3. 执行 PSR (EPSR) ICI/IT: ICI指令/IT指令状态位;T总为1313029282726:252423:2019:1615:109 8 7 6 5 4:0

8、xPSRNZCVQICI/ITTICI/ITException No.14313029282726:252423:2019:1615:10987654:0APSRNZCVQIPSRException No.EPSRICI/ITTICI/IT嵌入式系统原理与实验 中断屏蔽寄存器中断屏蔽寄存器PRIMASKPRIMASK、FAULTMASK FAULTMASK 和和 BASEPRI BASEPRI用来开放/禁用异常Cortex-M3/M4 中断屏蔽寄存器中断屏蔽寄存器寄存器名描 述PRIMASK一个1-bit 寄存器。1:仅允许NMI 和硬件默认异常,所有其他的中断和异常将被屏蔽;0:开放中断FA

9、ULTMASK一个1-bit 寄存器。1:仅允许NMI, 所有中断和默认异常处理包括硬件异常被忽略。BASEPRI一个9位寄存器。它定义了屏蔽优先级。 当设置为某值时, 所有大于或等于该值的中断被屏蔽(值越大,优先级越低)。全为0(默认值):不屏蔽任何中断。15嵌入式系统原理与实验 控制寄存器控制寄存器被用来定义特权级和堆栈指针的选择。这个寄存器有两位。Cortex-M3/M4 控制寄存器控制寄存器位功能CONTROL1 堆栈指针选择0=选择主堆栈指针MSP(复位后缺省值)1=选择进程堆栈指针PSP在线程或基础级(没有在响应异常),可以使用PSP。在handler 模式下,只允许使用MSP,所

10、以此时不得往该位写1。CONTROL0 0=特权级的线程模式1=用户级的线程模式handler 模式永远都是特权级的。16嵌入式系统原理与实验 CONTROL1 CONTROL1在Cortex-M3中, 在处理者模式中CONTROL1 位总是0 (MSP)。但是, 在线程或基本级别,它可以为0或1。 CONTROL0 CONTROL0CONTRL0 位只在特权状态可写。使用MRS和MSR指令来访问控制寄存器: MRS r0, CONTROL ; Read CONTROL register into R0 MSR CONTROL, r0 ; Write R0 into CONTROL regis

11、ter17嵌入式系统原理与实验 6.3.36.3.3 操作模式操作模式两种模式和两种特权等级。操作模式决定处理器运行正常程序或运行异常处理程序。特权用户当运行一个异常(中断)程序处理者模式错误的用法当运行主应用程序线程模式线程模式在在Cortex-M3/M4中中的操作模式和权限级别的操作模式和权限级别18特权级别提供了一种机制来保障访问存储器的关键区域,同时还提供了一个基本的安全模式。通过写Control register0=1,软件在特权访问级别可以使程序转换到用户访问级别。 用户程序不能够通过写控制寄存器直接变回特权状态。它要经过一个异常处理程序设置Control register0=0使

12、得处理器切换回特权访问级别。嵌入式系统原理与实验 19特权级和处理器模式转换图特权级线程模式特权级handler模式用户级线程模式嵌入式系统原理与实验 当CONTROL0=0 时,在异常处理的始末,只发生了处理器模式的转换。20线程模式 handler模式 线程模式(特权级) (特权级) (特权级)线程模式 handler模式 线程模式(用户级) (特权级) (用户级)若CONTROL0=1(线程模式+用户级),则在中断响应的始末, 处理器模式和特权等极都要发生变化。嵌入式系统原理与实验 21CortexM3/M4 支持大量异常,包括1641=11 个系统异常,和最多240 个外部中断简称IR

13、Q。具体使用了这240 个中断源中的多少个,则由芯片制造商决定。由外设产生的中断信号,除了SysTick 的之外,全都连接到NVIC 的中断输入信号线。当一个发生的异常被CM3 内核接受,对应的异常handler 就会执行。为了决定handler 的入口地址,CM3 使用了“向量表查表机制”。向量表的存储位置是可以设置的,通过NVIC 中的一个重定位寄存器来指出向量表的地址。复位后,该寄存器的值为0。因此,在地址0 处必须包含一张向量表,用于初始时的异常分配。6.3.4 6.3.4 向量表向量表嵌入式系统原理与实验 22异常类型 偏移地址 优先级异常向量 00 x00N/AMSP的开始值 10

14、 x04-3(最高)复位 20 x08-2NMI30 x0C-1硬件故障 40 x10可编程存储器管理故障 50 x14可编程总线故障 60 x18可编程程序错误导致的故障 7-100 x1C-0 x28 N/A保留 110 x2C可编程执行系统服务调用指令引发的异常SVC120 x30可编程调试监视器 130 x34N/A保留 140 x38可编程为系统设备而设的可悬挂请求PendSV150 x3C可编程系统滴答定时器 SysTick160 x40可编程IRQ#0可编程2550 x3FF可编程IRQ#239向量表结构向量表结构嵌入式系统原理与实验 栈的基本操作栈的基本操作在寄存器中的数据可以

15、通过PUSH操作保存到栈内存并且通过POP操作在稍后恢复到寄存器.当PUSH/POP 指令执行时,SP 指针的值也跟着自减/自增。主程序 .; R0 = X, R1 = Y, R2 = Z BL function1; Back to main program; R0 = X, R1 = Y, R2 = Z . ; next instructionsfunction1PUSH R0 ; store R0 to stack & adjust SPPUSH R1 ; store R1 to stack & adjust SPPUSH R2 ; store R2 to stack &a

16、mp; adjust SP . ; Executing task (R0, R1 and R2 ; could be changed)POP R2 ; restore R2 and SP re-adjustedPOP R1 ; restore R1 and SP re-adjustedPOP R0 ; restore R0 and SP re-adjustedBX LR ; Return 236.3.5 6.3.5 栈内存操作栈内存操作嵌入式系统原理与实验 Cortex-M3/M4 Cortex-M3/M4 的堆栈实现的堆栈实现24嵌入式系统原理与实验 25在在Cortex-M3/M4Cort

17、ex-M3/M4中中的两种堆栈模式的两种堆栈模式Cortex-M3/M4 有两个堆栈指针: 主堆栈指针 (MSP) 和进程堆栈指针(PSP)。被使用的SP 寄存器由CONTROL CONTROL 11控制。CONTROL 1 = 0: 使用使用MSP线程模式 handler模式 线程模式(使用MSP) (使用MSP) (使用MSP)线程模式 handler模式 线程模式(使用PSP) (使用MSP) (使用PSP)CONTROL 1 = 1: 线程模式使用线程模式使用PSPHandler模式使用模式使用MSP嵌入式系统原理与实验 6.3.6 6.3.6 复位序列复位序列处理器复位后,它会从存储

18、器中读取两个字:1.从地址 0 x0000 0000 处取出MSP 的初始值。2.从地址 0 x0000 0004 处取出PC 的初始值这个值是复位向量,LSB 必须是1。然后从这个值所对应的地址处取指。26 MSP 的初始值必须是堆栈内存的末地址加1。例:如果堆栈区域在0 x20007C000 x20007FFF之间,则MSP 的初始值就必须是0 x20008000。 对于不同的开发工具,需要使用不同的格式来设置MSP 初值和复位向量(一般由开发工具自行计算)。嵌入式系统原理与实验 27初始MSP 及PC 初始化的一个范例 MSP =堆栈内存末地址+1 PC 初始化=启动代码的首地址+1(C

19、M3在Thumb状态执行)嵌入式系统原理与实验 6.4.1 6.4.1 Cortex-M3/M4Cortex-M3/M4存储器系统功能概述存储器系统功能概述 存储器映射是预定义的,并且还规定好了哪个位置使用哪条总线。 Cortex-M3/M4的存储器系统支持所谓的“位带”(bitband)操作。通过它,实现了对单一比特的原子操作。位带操作仅适用于一些特殊的存储器区域中。 Cortex-M3/M4的存储器系统支持非对齐访问和互斥访问。这两个特性是直到了v7M 时才出来的。 Cortex-M3/M4的存储器系统支持小端配置和大端配置。286.4 6.4 存储器系统存储器系统嵌入式系统原理与实验 6

20、.4.2 6.4.2 内存映射内存映射 Cortex-M3/M4 处理器有一个固定的存储映射。这一点极大地方便了软件在各种CM3 单片机间的移植。例:各款CM3 单片机的NVIC 和MPU 都在相同的位置布设寄存器,使得它们变得通用。 一些存储单元被分配给了私有外设,比如调试组件。这个地址段被称为“私有外设区”。私有外设区的组件包括:n闪存地址重载及断点单元(FPB)n数据观察点单元(DWT)n指令跟踪宏单元(ITM)n嵌入式跟踪宏单元(ETM)n跟踪端口接口单元(TPIU)nROM 表29嵌入式系统原理与实验 Cortex-Cortex-M3/M4 M3/M4 预定义预定义 内存映射内存映射

21、30嵌入式系统原理与实验 SRAM: SRAM: 0.5 GB。 SRAM存储范围是用来连接内部的SRAM。 片上外设片上外设: : 0.5 GB,支持 bit-band 别名并且可以通过系统总线接口访问。外部外部 RAM: RAM: 1 GB。允许执行程序。外部设备外部设备: : 1 GB。不允许执行程序。系统级组件系统级组件+ + 内部专用的外围总线内部专用的外围总线+ + 外部私有外设总线外部私有外设总线+ + 供应商特定系供应商特定系统外设统外设: : 0.5 GB.31嵌入式系统原理与实验 私有外设总线私有外设总线: : 1. AHB 私有外设总线,只针对 Cortex-M3 内部

22、AHB 外设,它们是:NVIC, FPB, DWT 和ITM。2. APB 私有外设总线,既用于CM3 内部的APB 设备,也用于外部设备(这里的“外部”是对内核而言)。NVIC 所处的区域叫做“系统控制空间(SCS)”,在SCS 里的还有SysTick、MPU 以及代码调试控制所用的寄存器。32嵌入式系统原理与实验 6.4.3 6.4.3 内存访问属性内存访问属性 Cortex-M3/M4 在定义了存储器映射之外,还为存储器的访问规定了4 种属性,分别是:可否缓冲(Bufferable)可否缓存(Cacheable)可否执行(Executable)可否共享(Sharable) 如果配了MPU

23、,则可以通过它配置不同的存储区,并且覆盖缺省的访问属性。33嵌入式系统原理与实验 6.4.4 6.4.4 默认内存访问权限默认内存访问权限 Cortex-M3/M4 有一个缺省的存储访问许可,它能防止用户代码访问系统控制存储空间,保护NVIC、MPU 等关键部件。缺省访问许可在下列条件时生效:没有配备 MPU配备了 MPU,但MPU被除能 如果启用了MPU,则MPU 可以在地址空间划出若干区域,并为每个区规定不同的访问许可权限。 当一个用户级访问被阻止时,会立即产生一个总线异常。34嵌入式系统原理与实验 6.4.5 Bit-Band6.4.5 Bit-Band操作操作 Cortex-M3/M4

24、支持位带操作,可以使用普通的加载/存储指令来对单一的比特进行读写。 在CM3中,有两个区中实现了位带:SRAM 区的最低1MB 范围片内外设区的最低1MB 范围 这两个区中的地址除了可以像普通的RAM 一样使用外,它们还都有自己的“位带别名区”,位带别名区把每个比特膨胀成一个32 位的字。 它们可以通过一个单独的被称为bit-band alias的存储区域被访问。35嵌入式系统原理与实验 位通过位通过Bit-Band AliasBit-Band Alias访问访问Bit-Band Region Bit-Band Region 36嵌入式系统原理与实验 写操作1. 不使用Bit-Band: LD

25、R R0, =0 x20000000 ; Setup address LDR R1, R0 ; Read ORR.W R1, #0 x4 ; Modify bit STR R1, R0 ; Write back result2. 使用Bit-Band: LDR R0, =0 x22000008 ; Setup address MOV R1, #1 ; Setup data STR R1, R0 ; Write37嵌入式系统原理与实验 读操作:1. 使用 Bit-Band: LDR R0, =0 x20000000 ; Setup address LDR R1, R0 ; Read UBFX.W

26、 R1, R1, #2, #1 ; Extract bit22. 使用 Bit-Band: LDR R0, =0 x22000008 ; Setup address LDR R1, R0 ; Read38嵌入式系统原理与实验 SRAM SRAM 区域的区域的Bit-Band Bit-Band 地址重映射地址重映射外设存储区外设存储区 Bit-Band Bit-Band 地址重映射地址重映射 Bit-Band 区域 别名等效0 x20000000 bit00 x22000000 bit00 x20000000 bit10 x22000004 bit00 x20000000 bit20 x2200

27、0008 bit00 x20000000 bit310 x2200007C bit00 x20000004 bit00 x22000080 bit00 x20000004 bit310 x220000FC bit00 x200FFFFC bit310 x23FFFFFC bit0Bit-Band 区域 别名等效0 x40000000 bit00 x42000000 bit00 x40000000 bit10 x42000004 bit00 x40000000 bit20 x42000008 bit00 x40000000 bit310 x4200007C bit00 x40000004 bit

28、00 x42000080 bit00 x40000004 bit310 x420000FC bit00 x400FFFFC bit310 x43FFFFFC bit039嵌入式系统原理与实验 6.4.6 6.4.6 未对齐传递未对齐传递Cortex-M3/M4 支持在单一的访问中使用非(地址)对齐的传送,数据存储器的访问无需对齐。在Cortex-M3/M4 中,非对齐的数据传送只发生在常规的数据传送指令中,如LDR/LDRH/LDRSH。其它指令则不支持,包括: 多个数据的加载/存储(LDM/STM) 堆栈操作 PUSH/POP 互斥访问(LDREX/STREX)。如果非对齐会导致一个用法fa

29、ult 位带操作。因为只有 LSB 有效,非对齐的访问会导致不可预料的结果。Cortex-M3/M4把非对齐的访问转换成若干个对齐的访问,这种转换动作由处理器总线单元来完成。通过若干个对齐的访问来实现一个非对齐的访问,会需要更多的总线周期。40嵌入式系统原理与实验 41字长, 地址不是4的倍数Byte 3Byte 2Byte 1Byte 0Address N+431:24Address N23:1615:87:0Byte 3Byte 2Byte 1Byte 0Address N+431:2423:1615:8Address N7:0Byte 3Byte 2Byte 1Byte 0Address

30、 N+431:2423:16Address N15:87:0嵌入式系统原理与实验 半字长, 其地址不是2的倍数42Byte 3Byte 2Byte 1Byte 0Address N+4Address N15:87:0Byte 3Byte 2Byte 1Byte 0Address N+415:8Address N7:0嵌入式系统原理与实验 6.4.7 6.4.7 互斥访问互斥访问 互斥体在多任务环境中使用,也在中断服务例程和主程序之间使用,用于给任务申请共享资源(如一块共享内存)。 互斥:在某个(排他型)共享资源被一个任务拥有后,直到这个任务释放它之前,其它任务是不得再访问它的。 为建立一个互斥

31、体,需定义一个标志变量,指示其对应的共享资源是否已经被某任务拥有。当另一个任务欲取得此共享资源时,它要先检查这个互斥体,以获知共享资源是否被使用。 在互斥访问操作下,允许互斥体所在的地址被其它总线 访问,也允许被其它运行在本机上的任务访问,但是CM3 能够“驳回”有可能导致竞态条件的互斥写操作。 互斥访问分为加载和存储, 相应的指令对包括:LDREX/STREX、LDREXH/STREXH、LDREXB/STREXB,分别对应于字/半字/字节。43嵌入式系统原理与实验 6.4.86.4.8 端模式Cortex-M3/M4 支持小端模式和大端模式。44Address, SizeBits 31-2

32、4Bits 23-16Bits 15-8Bits 7-00 x1000, 字Data7:0Data15:8Data23:16Data31:240 x1000, 半字Data7:0Data15:80 x1002, 半字Data7:0Data15:80 x1000, 字节Data7:00 x1001, 字节Data7:00 x1002, 字节Data7:00 x1003, 字节Data7:0Cortex-M3/M4 Cortex-M3/M4 ( (字节不变字节不变大端大端): ): 存储器视图存储器视图嵌入式系统原理与实验 注意点: 在复位时确定使用哪种端模式的,且运行时不得更改。 指令预取永远使

33、用小端模式,在配置控制存储空间的访问也永远使用小端模式。 外部私有总线地址区0 xE0000000 至0 xE00FFFFF 也永远使用小端模式。 可以使用REV/REVH指令来完成端模式的转换。45嵌入式系统原理与实验 6.5.1 6.5.1 汇编语言基础汇编语言基础 汇编指令的最典型书写模式如下所示:标号 ;可选,它必须顶格写。用于汇编器计算程序转移地址。操作码 操作数1, 操作数2, ;前面须有至少一个空白符MOV R0, #0 x12 ; R0=0 x12,立即数必须以“#”开头MOV R1, #A ; R1=字母 A 的ASCII 码 可以使用EQU 指示字来定义常数,然后在代码中使

34、用它们NVIC_IRQ_SETEN0 EQU 0 xE000E100 ;常数定义必须顶格写NVIC_IRQ0_ENABLE EQU 0 x1 LDR R0, =NVIC_IRQ_SETEN0 ;在这里的LDR 是个伪指令,它会被汇编器 ;转换成一条“相对PC 的加载指令” MOV R1, #NVIC_IRQ0_ENABLE ; 把立即数传送到指令中 STR R1, R0 ; *R0=R1,执行此指令后IRQ #0 被使能466.56.5指令集指令集嵌入式系统原理与实验 DCI 编译器指示字:对汇编器不能识别的特殊指令助记符,可查出该指令的确切二进制机器码,然后使用DCI 。例:BKPT 指令的机器码是0 xBE00,即可以按如下格式书写 DCI 0 xBE00 ; 断点(BKPT),这是16 位指令。 DCI 也必须空格写 DCB /DCD:定义一串字节常数/ 32 位整数。它们最常被用来在代码中书写表格。例如: LDR R3, =MY_NUMBER ; R3= MY_NUMBER LDR R4, R3 ; R4= *R3 LDR R0, =HELLO_TE

温馨提示

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

评论

0/150

提交评论