收藏 分销(赏)

ARM-Cortex-M3内核结构.doc

上传人:天**** 文档编号:4527982 上传时间:2024-09-26 格式:DOC 页数:36 大小:860.50KB
下载 相关 举报
ARM-Cortex-M3内核结构.doc_第1页
第1页 / 共36页
ARM-Cortex-M3内核结构.doc_第2页
第2页 / 共36页
点击查看更多>>
资源描述
ARM CortexM3 内核结构 2.1 ARM CortexM3 处理器简介 2、1、1 概述 ARM公司成立于上个世纪九十年代初,致力于处理器内核研究,ARM 即 Advanced RISC Machines 得缩写,ARM公司本身不生产芯片,只设计内核,靠转让设计许可,由合作伙伴公司来生产各具特色得 芯片。这种运行模式运营得成果受到全球半导公司以及用户得青睐。目前ARM体系结构得处理器内核有: ARM7TDMI、ARM9TDMI、ARM10TDMI、ARM11以及Cortex等。2005年ARM推出得ARM Cortex系列内核,分别 为:A系列、R系列与M系列,其中A系列就是针对可以运行复杂操作系统(Linux、Windows CE、Symbian 等)得处理器;R系列就是主要针对处理实时性要求较高得处理器(汽车电子、网络、影像系统);M系列 又叫微控制器,对开发费用敏感,对性能要求较高得场合。 CortexM系列目前得产品有M0、M1、M3,其中M1用在FPGA中。CortexM系列对微控制器与低成本应 用提供优化,具有低成本、低功耗与高性能得特点,能够满足微控制器设计师进行创新设计得需求。其 中,ARM CortexM3处理器得性能就是ARM7得两倍,而功耗却只有ARM7得1/3,适用于众多高性能、极其低 成本需求得嵌入式应用,如微控制器、汽车系统、大型家用电器、网络装置等,ARM CortexM3提供了 32位微控制器市场前所未有得优势。 CortexM3内核,内部得数据路径为32位,寄存器为32位,存储器接口也就是32位。CortexM3采用了 哈佛结构,拥有独立得指令总线与数据总线,可以让取指与数据访问分开进行。CortexM3还提供一个 可选得MPU,对存储器进行保护,而且在需要得情况下也可以使用外部得cache。另外在CortexM3中, 存储器支持小端模式与大端存储格式。CortexM3内部还附赠了很多调试组件,用于在硬件水平上支持 调试操作,如指令断点,数据观察点等。另外,为支持更高级得调试,还有其它可选组件,包括指令跟 踪与多种类型得调试接口。 2、1、2 内核结构组成及功能描述 CortexM3微控制器内核包括处理核心与许多得组件,目得就是用于系统管理与调试支持。如图2、1为 CortexM3内核方框图。 NMI 中断号[239:0] SLEEPING SLEEPDEEP NVIC SysTick 中断 睡眠 CM3核 调试 指令 数据 MPU CortexM3 触发 ETM TPIU FPB DWT ITM 专用外 设总线 SWDP JTAGDP 专用外设总线(内部) AHBAP APB ROM表 总线矩阵 Icode总线 Dcode总线 系统总线 总线矩阵 系统总线(AHB) 静态 RAM 外部 RAM 外部 控制器 设备 AHB to APB 总线 Flash 存 储器 SRAM 可 选配 外部 RAM I/O 外设总线 UART PWM Timer 图 2、1 CortexM3 内核方框图 1、处理器内核 CortexM3处理器内核采用ARMv7M架构,其主要特性如下: l Thumb2指令集架构(ISA)得子集,包含所有基本得16位与32位Thumb2指令; l 哈佛处理器架构,在加载/存储数据得同时能够执行指令取指; l 带分支预测得三级流水线; l 32位单周期乘法; l 硬件除法; l Thumb状态与调试状态; l 处理模式与线程模式; l ISR得低延迟进入与退出; l 可中断可继续(interruptiblecontinued)得LDM/STM、PUSH/POP; l 支持ARMv6类型BE8/LE; l 支持ARMv6非对齐访问。 2、NVIC(嵌套向量中断控制器) NVIC与处理器内核就是紧密耦合得,这样可实现快速、低延迟得异常处理。在CortexM微控制器此功 能非常强大。 3、总线矩阵 总线矩阵用来将处理器与调试接口与外部总线相连。 处理器包含4 个总线接口: l ICode 存储器接口:从Code 存储器空间(0x0000000–0x1FFFFFFF)得取指都在这条32 位 AHBLite 总线上执行。 l DCode 存储器接口:对Code 存储器空间(0x0000000–0x1FFFFFFF)进行数据与调试访问都 在这条32 位AHBLite 总线上执行。 l 系统接口:对系统空间(0x20000000–0xDFFFFFFF)进行取指、数据与调试访问都在这条32 位 AHBLite 总线上执行。 l 外部专用外设总线(PPB):对外部PPB 空间(0xE0040000–0xE00FFFFF)进行数据与调试访 问都在这条32 位APB 总线(AMBA v2、0)上执行。跟踪端口接口单元(TPIU)与厂商特定得 外围器件都在这条总线上。 注:处理器包含一条内部专用外设总线,用来访问嵌套向量中断控制器(NVIC)、数据观察点与 触发(DWT)、Flash 修补与断点(FPB),以及存储器保护单元(MPU)。 4、FPB FPB单元实现硬件断点以及从代码空间到系统空间得修补访问,FPB有8个比较器。 5、DWT 数据观察点与跟踪,调试功能部件。 6、ITM ITM就是一个应用导向(application driven)得跟踪源,支持对应用事件得跟踪与printf类型得调 试。 7、MPU 存储器保护单元(MPU)就是用来保护存储器得一个元件。处理器支持标准得ARMv7“受保护得存储器 系统结构”(PMSA)模型。如果希望向处理器提供存储器保护,则可以使用可选得MPU;MPU对访问允许 与存储器属性进行检验。它包含8个区与一个可选得执行默认存储器映射访问属性得背景区。 8、ETM ETM支持指令跟踪得低成本跟踪宏单元。 9、TPIU TPIU用作来自ITM与ETM(如果存在)得CortexM3内核跟踪数据与片外跟踪端口分析仪之间得桥接。 10、SW/JTAGDP CortexM3处理器可配置为具有SWDP或JTAGDP调试端口得接口,或两者都有。这两个调试端口提 供对系统中包括处理器寄存器在内得所有寄存器与存储器得调试访问。 2、2 内核寄存器组织 如图 2、2 所示,Cortex_M3 内核寄存器分为 16 个通用寄存器 R0~R15 与 7 个特殊功能寄存器。 R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13(SP) R14(LR) R15(PC) 低 寄 存 器 通 用 寄 存 器 高 寄 存 器 特 殊 状态寄存器 功 能 中断屏蔽 寄 寄存器 存 器 控制寄存器 xPSR PRIMASK FAULTMASK BASEPRI CONTROL MSP PSP 图 2、2 寄存器组织图 2、2、1 通用寄存器 R0R15 R0~R12 寄存器:就是真正意义上得通用。在处理器运行过程中,作数据得寄存。 R13 为堆栈指针寄存器:堆栈指针就是用于访问堆栈,也即系统得 RAM 区。Cortex_M3 中采用了两个 堆栈指针:主堆栈指针(MSP)与进程堆栈指针(PSP),R13 在任何时刻只能就是其中一个,默认情况为 MSP,可以通过控制寄存器(CONTORL)来改变。Cortex_M3 中堆栈方向就是向低地址方向增长,为满堆栈 机制。堆栈操作就是通过 PUSH 与 POP 来完成操作得。 例如 MSP 当前指针指向:0x2000_000C;R0=0x00000000。 执行:PUSH R0 此时 MSP 指向:0x2000_0008 执行示意如图 2、3 所示。 已使用 已使用 上次压入得数据 未用 未用 RAM RAM 0x2000_000C MSP 向 下 生 已使用 已使用 已使用 0x00000000 未用 0x2000_0008 长 MSP 2、3 堆栈操作示意图 R14 程序连接寄存器(LR):在执行分支(B)与链接(BL)指令或带有交换分支(BX)与链接 指令(BLX)时,PC 得返回地址自动保存进 LR。比如在子程序调用时用保存子程序得返回地址。LR 也用于异常返回,但就是在这里保存得就是返回后得状态,不就是返回得地址,异常返回就是通过硬件自动出栈 弹出之前压入得 PC 完成得。 R15 程序计数器(PC):就是程序运行得基础,具有自加得功能。该寄存器得位 0 始终为 0,因此, 指令始终与字或半字边界对齐。 2、2、2 特殊功能寄存器 特殊功能寄存器分为程序状态寄存器、中断屏蔽寄存器与控制寄存器三类。 xPSR 程序状态寄存器:系统级得处理器状态可分为 3 类,应用状态寄存器(APSR)、中断状态寄 存器(IPSR)、执行状态寄存器(EPSR),可组合起来构成一个 32 位得寄存器,统称 xPSR。 表 2、1 xPSR 寄存器 寄存 器名 位 31 30 29 28 27 26:25 24 23:20 19:16 15:10 9 8 7 6 5 4:0 APSR N Z C V Q IPSR 中断编号 EPSR ICI/IT T ICI/IT xPSR 寄存器得各位得功能如表 2、2: 表 2、2 xPSR 寄存器各位功能 位 名称 定义 31 N 负数或小于标志:1:结果为负数或小于;0 结果为正数或大于 30 Z 零标志:1:结果为 0;0:结果为非 0 29 C 进位/借位标志:1:进位或借位;0 没有进位或借位 28 V 溢出标志:1:溢出;0:没有溢出 27 Q 粘着饱与标志:1:已饱与;0:没有饱与 26:25 15:10 IT IFThen 位。它们就是 ifThen 指令得执行状态位。 包含 ifThen 模块得指令数目与它们得执行条件 24 T 用于指示处理器当前就是 ARM 状态还就是 Thumb 状态 15:12 ICI 可中断可继续得指令位:如果在执行 LDM 或 STM 操作时产生一次中断,则 LDM 或 STM 操作暂停,该位来保存该操作中下一个寄存器操作数得编号,在中断响 应之后,处理器返回由该位指向得寄存器并恢复操作。 8:0 ISR 占先异常得编号 中断屏蔽寄存器:分为三组,分别就是 PRIMASK、FAULTMASK、BASEPRI。 PRIMASK 为片上外设总中断开关,该寄存器只有位 0 有效,当该位为 0 就是响应所有外设中断;当该 位为 1 时屏蔽所有片上外设中断。 FAULTMASK 寄存器管理系统错误得总开关,该寄存器中有位 0 有效,当该位为 0 时,响应所有得异 常;为 1 屏蔽所有得异常。 BASEPRI 寄存器用来屏蔽优先级等于与小于某一个中断数值得寄存器。 控制寄存器:CONTROL 有两个作用,其一用于定义处理器特权级别,其二用于选择堆栈指针,如表 3、3 所示。 表 2、3 CONTROL 寄存器 位 功能 CONTROL[1] 堆栈指针选择 0:选择主堆栈指针 MSP 1:选择进程堆栈指针 PSP CONTROL[0] 0:特权级 1:用户级 CONTROL[0]:异常情况下,处理器总就是处于特权模式,CONTROL[0]位总就是为 0;在线程模式情况下 (非异常情况),处理器可以工作在特权级也可工作在用户级,该位可为 0 或 1。特权级下所有得资源 都可以访问,而用户级下被限制得资源不能访问,比如 MPU 被限制得资源。 CONTROL[1]:为 0 时,只使用 MSP,此时用户程序与异常共享同一个堆栈,处理器复位后默认得也 就是该模式。为 1 时,用户应用程序使用进程堆栈 PSP,而中断任然得使用主堆栈 MSP。这种双堆栈机制, 特别适合在带有 OS(操作系统)得环境下使用,只要 OS 内核在特权级下执行,而用户应用程序在用户 模式下执行,就可很好得将代码隔离互不影响。 2、3 处理器操作模式 ARM CortexM3支持2个模式与两个特权等级。如图2、4所示,在嵌入式系统应用程序中,程序代码 涉及异常服务程序代码与非异常服务程序代码,这些代码可以工作在处理器特权级也可以工作在用户级 级,但有区别。当处理器处在线程模式下时,既可以使用特权级,也可以使用用户级;另一方面,handler 模式总就是特权级得。在复位后,处理器进入线程模式+特权级。 特权级 用户级 Handler 模式 错误得用法 线程模式 线程模式 异常 handler 得代码 主应用程序得代码 图 2、4 操作模式与特权等级 在线程模式+用户级下,对系统控制空间(SCS,0xE000E000~0xE000EFFF,包括NVIC、SysTick、 MPU以及代码调试控制所用得寄存器)得访问将被禁止。除此之外,还禁止使用MRS/MSR访问,除了APSR 之外得特殊功能寄存器。如果操作,则对于访问特殊功能寄存器得,访问操作被忽略;而对于访问SCS 空间得,将产生错误。 在特权级下不管就是任何原因产生了任何异常,处理器都将以特权级来运行其服务例程,异常返回 后,系统将回到产生异常时所处得级别,同时特权级也可通过置位CONTROL[0]来进入用户级。用户级下 得代码不能再试图修改CONTROL[0]来回到特权级。它必须通过一个异常handler,来修改CONTROL[0], 才能在返回到线程模式后进入特权级。如图2、5所示。 特权级 handler 模式 CONTROL[0]=1 异常服务 例程 CONTROL[0]=0 异常服务 例程 特权级 线 启 动 程模式 代码 用户级 线 程模式 异常 异常 用户 用户 程序 程序 特权级得 线程 图 2、5 处理器模式转换图 把代码按特权级与用户级分开处理,有利于使CortexM3得架构更加稳定可靠。例如,当某个用户 程序代码出问题时,可防止处理器对系统造成更大得危害,因为用户级得代码就是禁止写特殊功能寄存器 与NVIC中寄存器得。另外,如果还配有MPU,保护力度就更大,甚至可以阻止用户代码访问不属于它得 内存区域。 在引入了嵌入式实时操作系统中,为了避免系统堆栈因应用程序得错误使用而毁坏,我们可以给 应用程序专门配一个堆栈,不让它共享操作系统内核得堆栈。在这个管理制度下,运行在线程模式得用 户代码使用PSP,而异常服务例程则使用MSP。这两个堆栈指针得切换就是智能全自动得,在异常服务得始 末由CortexM3硬件处理。 如前所述,特权等级与堆栈指针得选择均由CONTROL负责。 当CONTROL[0]=0,在异常处理得始末,只发生了处理器模式得转换,如图2、6所示。 若CONTROL[0]=1(线程模式+用户级),则在中断响应得始末,处理器模式与特权等级都要发生变 化,如图2、7所示。 CONTROL[0]只有在特权级下才能访问。用户级得程序如想进入特权级,通常都就是使用一条“系 统服务呼叫指令(SVC)”来触发“SVC异常”,该异常得服务例程可以视具体情况而修改CONTROL[0]。 中断事件 中断服务程序 中断返回 主程序 入栈 出栈 线 程 模 式 (特权级) Handler 模 式 (特权级) 线 程 模 式 (特权级) 图 2、6 中断前后得状态转换 中断事件 中断服务程序 中断返回 主程序 入栈 出栈 线 程 模 式 (用户级) Handler 模 式 (特权级) 线 程 模 式 (用户级) 图 2、7 中断前后得状态转换+特权等级切换 2、4 存储器系统 2、4、1 存储器映射 CortexM3 采用了固定得存储映射结构,如图 2、8 所示。 CortexM3 得地址空间就是 4GB, 程序可以在代码区,内部 SRAM 区以及外部 RAM 区中执行。但就是因为 指令总线与数据总线就是分开得,最理想得就是把程序放到代码区,从而使取指与数据访问各自使用己得总 线。 内部 SRAM 区得大小就是 512MB,用于让芯片制造商连接片上得 SRAM,这个区通过系统总线来访问。 在这个区得下部,有一个 1MB 得区间,被称为“位带区”。该位带区还有一个对应得 32MB 得 “位带别 名(alias)区”,容纳了 8M 个“位变量”(对比 8051 得只有 128 个位变量),位带区对应得就是最低得 1MB 地址范围,而位带别名区里面得每个字对应位带区得一个比特。位带操作只适用于数据访问,不适 用于取指。通过位带得功能,可以把多个布尔型数据打包在单一得字中,却依然可以从位带别名区中, 像访问普通内存一样地使用它们。位带别名区中得访问操作就是原子得,消灭了传统得“读-改-写”三 步。 ROM 外部 PPB ETM TPIU 0xE00FFFFF 0xE00FF000 0xE0042000 0xE0041000 0xE0040000 保留 NVIC 保留 FPB DWT ITM 0xE003FFFF 0xE000F000 0xE000E000 0xE0003000 0xE0002000 0xE0001000 0xE0000000 32MB 位带别名区 31MB 1MB 位带区 0x43FFFFFF 0x42000000 0x41FFFFFF 0x40100000 0x40000000 32MB 位带别名区 31MB 1MB 位带区 0x23FFFFFF 0x22000000 0x21FFFFFF 0x20100000 0x20000000 0xFFFFFFFF 芯片厂商定义 内核 私有 区域 512MB 外部私有外设总线 内部私有外设总线 片外外设 1、0GB 片外 RAM 1、0GB 片上外设区 512MB 片上 SRAM 512MB 代码区 512MB 0xE0100000 0xE00FFFFF 0xE0040000 0xE003FFFF 0xE0000000 0xDFFFFFFF 0xA0000000 0x9FFFFFFF 0x60000000 0x5FFFFFFF 0x40000000 0x3FFFFFFF 0x20000000 0x1FFFFFFF 0x00000000 图 2、8 CortexM3 存储器映射图 片上外设对应 512MB 得空间,芯片上所有与外围设备相关得寄存器都位于该区域。这个区中也有一 条 32MB 得位带别名,以便于快捷地访问外设寄存器,用法与内部 SRAM 区中得位带相同。例如,可以方 便地访问各种控制位与状态位。要注意得就是,外设区内不允许执行指令。通常半导体厂商就就是修改此区 域得片上外设,来达到各具特色得、个性化得设备。 还有两个 1GB 得范围,分别用于连接外部 RAM 与外部设备,它们之中没有位带。两者得区别在于外 部 RAM 区允许执行指令,而外部设备区则不允许。 最后还剩下 0、5GB 得隐秘地带,包括了系统级组件,内部私有外设总线,外部私有外设总线,以及 由提供者定义得系统外设。 私有外设总线有两条: AHB 私有外设总线,只用于 CM3 内部得 AHB 外设,它们就是:NVIC, FPB, DWT 与 ITM。 APB 私有外设总线,既用于 CM3 内部得 APB 设备,也用于外部设备(这里得“外部”就是对内核而言)。 CortexM3 允许器件制造商再添加一些片上 APB 外设到 APB 私有总线上,它们通过 APB 接口来访问。 NVIC 所处得区域叫做“系统控制空间(SCS)”,在 SCS 里得除了 NVIC 外,还有 SysTick、MPU 以 及代码调试控制所用得寄存器。 最后,未用得提供商指定区也通过系统总线来访问,但就是不允许在其中执行指令。 2、4、2 位带操作 在CotexM3存储器映射中包括两个位操作区。分别位于SRAM与片上外设存储区得最低1MB空间中。 这两个位带中得地址除了可以像普通得RAM一样使用外,它们还都有自己得“位带别名区”,位带别名 区把每个比特膨胀成一个32位得字形成位地址。当您通过位带别名区访问这些字时,就可以达到访问原 始比特得目得,其对应关系如图2、8所。 位地址与位别名对应关系统如下: 对于 SRAM 位带区得某个位: Aliasaddr = 0x0+ ((A - 0x0) ´ 8 + n) ´ 4 = 0x22000000+ ( A - 0x20000000) ´ 32 + n ´ 4 对于片上外设位带区得某个位: Aliasaddr = 0x0+ ((A - 0x0) ´ 8 + n) ´ 4 = 0x42000000+ ( A - 0x40000000) ´ 32 + n ´ 4 在上述表达式中,A 表示要操作得位所在得字节地址,n(0≤n≤7)表示位序号。 0x23FFFFFC 0x23FFFFF8 0x23FFFFF4 0x23FFFFF0 0x23FFFFEC 0x23FFFFE8 0x23FFFFE4 0x23FFFFE0 位带别名区(共 32MB) 0x2200001C 0x22000018 0x22000014 0x22000010 0x2200000C 0x22000008 0x22000004 0x22000000 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 0x200FFFFF 0x200FFFFE 0x200FFFFD 0x200FFFFC SRAM 位带区(共 1MB) 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 0x20000003 0x20000002 0x20000001 0x20000000 2、9 位操作对应关系图 举例:将地址 0x20000000 得第 2 位置 1。通过上述计算关系,可计算出位带别名为 0x22000008。 如程序清单 L2、1 所示。 程序清单 L2、1 SRAM 位操作实例 LDR R0,=0x22000008 LDR R1,=0x01 STR R1,[R0] 将片上外设 I/O 端口得 A 口得第 0 位(也即 PORTA0)为输出,其 A 口得方向寄存器地址为 0x40004400, 设置 1 作为输出,可根据上述关系计算出位带别名为 0x42088000。如程序清单 L2、2 所示。 程序清单 L2、2 片上外设位操作实例 LDR R0,=0x42088000 LDR R1,=0x01 STR R1,[R0] 注:采用大端格式时,对位邦定别名区得访问必须以字节方式,否则访问不可预知。 2、5 异常 ARM CortexM3 中异常涉及异常得类型、优先级、向量表等,本节并以 Luminary 系列微控制器为 例说明异常得具体行为。 2、5、1 异常类型 在 CortexM3 中有 一个 与内 核紧 耦 合部 件叫 嵌套向 量 中断 控制 器( NVIC, Nested Vectored Interrupt Controller),定义了 16 种系统异常与 240 路外设中断。通常芯片设计者可自由设计片上外 设,因此具体得片上外设中断都不会用到多达 240 路。如表 2、4 所示系统异常类型,表 2、5 所示为外设 中断类型。 CortexM3 中目前只有 11 种系统异常可用分别就是:系统复位、NMI(不可屏蔽中断)、硬件故障、 存储器管理、总线故障、用法故障、SVCall(软件中断)、调试监视器中断、PendSV(系统服务请求)、 SysTick(24 位定时器中断)。240 路外设中断,就是指片上外设得各模块,比如 I/O 口、UART 通信接口、 SSI 总线接口等所需得中断。 表 2、4 异常类型 编号 类型 优先级 描述 0 复位时载入向量表得第一项作为主堆栈栈顶地址。 1 复位 3 复位。 2 NMI 2 不可屏蔽中断(来自外部 NMI 输入脚)。 3 硬故障 1 当故障由于优先级或者就是可配置得故障处理程序被禁止得原因 而无法激活时,所有类型故障都会以硬故障得方式激活。 4 存储器管理 可编程 MPU 不匹配,包括访问冲突与不匹配。 5 总线故障 可编程 预取指故障、存储器访问故障与其它地址/存储器相关得故障。 6 用法故障 可编程 由于程序错误导致得异常,通常就是使用一条无效指令,或都就是非 法得状态转换。 710 保留 保留 11 SVCall 可编程 执行 SVC 指令得系统服务调用。 12 调试监视器 可编程 调试监视器(断点,数据观察点,或就是外部调试请求) 13 保留 14 PendSV 可编程 系统服务得可触发(pendable)请求。 15 SysTick 可编程 系统节拍定时器。 表 2、5 中断类型 编号 类型 优先级 描述 16 IRQ #0 可编程 外设中断 #0 17 IRQ #1 可编程 外设中断 #1 „ „ … … 255 IRQ #239 可编程 外设中断 #239 2、5、2 优先级 CortexM3 得异常功能非常强大,机制非常灵活,异常可以通过占先、末尾连锁与迟来等处理来降 低中断得延迟。优先级决定了处理器何时以及怎样处理异常。 CortexM3 支持 3 个固定得高优先级与多达 256 级得可编程优先级,并且支持 128 级抢占,绝大多 数芯片都会精简设计,实际中支持得优先级数会更少,如 8 级、16 级、32 级等,通常得做法就是裁掉表 达优先级得几个低端有效位(防止优先级反转),以减少优先级得级数。比如 Luminary 得芯片采用 8 级优先级。 CortexM3 中 NVIC 支持由软件指定得可配置得优先级(称为软件优先级),其寄存器地址为: 0xE000_E4000xE000_E4EF。通过对中断优先级寄存器得 8 位 PRI_N 区执行写操作,来将中断得优先级 指定为 0255。硬件优级随着中断中得增加而降低。0 优先级最高,255 优先级最低。指定软件优先级 后,硬件优先级无效。例如:如果将 INTISR[0]指定为优先级 1,INTISR[31]指定为优先级 0,则 INTISR[0] 得优先级比 INTISR[31]低。 为了对具有大量中断得系统加强优先级控制,CortexM3 支持优先级分组,通过 NVIC 控制,设置 为占先优先级与次优先级。可通过对应用程序中断及复位控制寄存器(AIRCR,地址为:0xE000_ED00) 得[10:8]位进行设置。如果有多个激活异常共用相同得组优先级,则使用次优先级区来决定同组中得异 常优先级,这就就是同组内得次优先级。如表 2、6 应用程序中断及复位控制寄存器,表 2、7 为占先优先级 与次优级得关系。 表 2.6 应用程序中断及复位控制寄存器(AIRCR,地址:0xE000ED00) 位段 名称 类型 复位值 描述 [31:16] VECTKEY RW 访问钥匙:任何对该寄存器得写操作,都必须同时 把 0x05FA 写入此段,否则写操作被忽略。若读取 此半字,则读回值为 0xFA05。 15 ENDIANESS R 指示端设置。1:大端,0:小端。 [10:8] PRIGROUP R/W 0 优先级分组 2 SYSRESETREQ W 请求芯片控制逻辑产生一次复位 1 VECTCLRACTIVE W 清零所有异常得活动状态信息。通常只在调试时 用,或都在 OS 从错误中恢复时用。 0 VECTRESET W 复位 CoretexM3 微控制器内核。 表 2、7 抢占优先级与次优先级分组位置得关系 分组位置 表达抢占优先级得位段 表达亚优先得位段 0 [7:1] [0:0] 1 [7:2] [1:0] 2 [7:3] [2:0] 3 [7:4] [3:0] 4 [7:5] [4:0] 5 [7:6] [5:0] 6 [7:7] [6:0] 7 无 [7:0]所有位 注:表 2、7 显示了利用优先级得 8 个位来配置处理器优先级。如果使用小于 8 得位来配置处理 器得优先级,则寄存器得低位始终为 0,例如,如果使用 3 个位来配置优先级,则 PRI_N[7:5]用来配置 优先级,而 PRI_N[4:0]为 4‵b0000。 2、5、3 中断向量表 当发生了异常并且要响应它时,CortexM3 需要定位其服务例程得入口地址。这此入口地址存储在 所谓“异常向量表”中。缺省情况下,CortexM3 认为该表位于零地址处,且各向量占用 4 字节。因此 每个表项占用 4 字节,复位后得向量表如表 2、8 所列。 表 2、8 复位后向量表 地址 异常编号 值(32 位整数) 0x0000_0000 MSP 得初始值 0x0000_0004 1 复位向量(PC 初始值) 0x0000_0008 2 NMI 服务例程得入口地址 0x0000_000C 3 硬 fault 服务例程得入口地址 … … 其它异常服务例程得入口地址 向量表中得第 1 个字为指向堆栈栈顶得指针,复位时内核读取该地址得数据设置主堆栈。 向量表得基地址可以通过 NVIC 中得向量偏移寄存器(0xE000ED08)来设置,如表 2、9 所示。从表 中可以瞧出,可以将异常向量表放在 Code 区也可以将其放在 RAM 区,起始地址也可改变,起始地址就是 有要求得:必须先求出系统中共有多少个向量,再把这个数字向上记到 2 得整次幂,而起始地址必须对 齐到后者得边界上。例如,如果一共有 32 个中断,则共有 32+16(系统异常)=48 个向量,向上记到 2 得整数次幂后值为 64,因此向量表重定位得地址必须能被 64 X 4=256 整除。 表 2、9 向量偏移量寄存器(0xE000ED08) 位段 名称 类型 复位值 描述 29 TBLOFF R 向量表就是在 Code 区(0),还就是在 RAM 区(1) 728 TBLBASE R/W 0 向量表得起始地址 向量表中至少需要有 4 个值:栈顶地址;复位程序得位置;NMI 异常得位置;硬故障得异常得位置。 当中断使能时,不管向量表得位置在哪,它指向所有使能屏蔽得异常。并且如果使用 SVC 指令,还 需要指定 SVCCall ISR 得位置。 2、5、4 异常得进入与退出 1.异常进入 入栈:当处理器发生异常时,首先自动把 8 个寄存器(xPSR、PC、LR、R12、R3、R2、R1、R0)压 入栈,处理器自动完成,在自动入栈得过程中,把寄存器写入栈得时间顺序,并不就是写入空间相对应得, 但机器会保证正确得寄存器被保存到正确得位置,如图 2、10 所示,假设入栈,栈地址为 N。 N8 N4 N32 N28 N24 N20 N16 N12 地址 PC PSR R0 R1 R2 R3 R12 LR 数据 时间 2、10 内部入栈示意图 取向量:发生异常,紧接着内核将根据向量表找出正确得异常向量,然后在服务程序得入口处预取 指,处理器将取指与取数据分别能过总线控制,使入栈与取指这两项工作能同时进行,以便快速进入中 断。 更新寄存器:入栈与取向量操作完成之后,在执行服务程序之前,还必须更新一系列寄存器。 SP:在入栈后会把堆栈指针(PSP或MSP)更新到新得位置。在执行服务例程时,将由MSP负责对堆 栈得访问。 PSR:更新IPSR位段(地处PSR得最低部分)得值为新响应得异常编号。 PC:在取向量完成后,PC将指向服务例程得入口地址, LR:在出入ISR得时候,LR得值将得到重新得诠释,这种特殊得值称为“EXC_RETURN”,在异常进 入时由系统计算并赋给LR,并在异常返回时使用它。 以上就是在响应异常时通用寄存器及特殊功能寄存器得变化。另外在NVIC中,也会更新若干个相关寄 存器。 2.异常退出 当异常服务程序最后一条指令将进入异常时得 LR 得值加载到 PC 中。该操作指示中断服务结束,在 从异常返回时处理器将执行下列操作之一: 如果激活异常得优先级比所有被压栈(等待处理)得异常得优先级都高,则处理器会末尾连锁到一 个激活异常。 如果没有激活异常,或者如果被压栈得异常得最高优先级比激活异常得最高优先级要高,则处理器 返回到上一个被压栈得中断服务程序。 如果没有激活得中断或被压栈得异常,则处理器返回线程模式。 在启动了中断返回序列后,下述得处理就将进行: 出栈:先前压入栈中得寄存器在这里恢复。内部得出栈顺序与入栈时得相对应,堆栈指针得值也改 回先前得值。 更新NVIC寄存器:伴随着异常得返回,它得活动位也被硬件清除。对于外部中断,倘若中断输入再 次被置为有效,悬起位也将再次置位,新一次得中断响应序列也可随之再次开始。 异常返回值:异常返回值存放在LR中。这就是一个高28位全为1得值,只有[3:0]得值有特殊含义,如 表2、10所示。当异常服务例程把这个值送往PC时,就会启动处理器得中断返回序列。因为LR得值就是由 CortexM3自动设置得,所以只要没有特殊需求,就不要改动它。 表 2、10 EXC_RETURN 各位含义 位段 含义 [31:4] EXC_RETURN得标识:必须全为1。 3 0=返回后进入处理器模 1=返回后进入线程模式。 2 0=从主堆栈中做出栈操作,返回后使用MSP 1=从进程堆栈中做出栈操作,返回使用 PSP。 1 保留,必须为0。 0 0=返回ARM状态 1=返回Thumb状态。CortexM3中必须为1。 因此,上述表格中EXC_RETURN得值有三种情况: 0xFFFF_FFF1:返回处理器模式; 0xFFFF_FFF9:返回线程模式,并使用主堆栈; 0xFFFF_FFFD:返回线程模式,并使用线程堆栈。 例如系统中使用了PendSV异常,服务程序结束时由处理模式返回到线程模式前使用进程堆栈,如 程序清单L2、3所示。 程序清单 L2、3 异常返回类型实例 OSPendSV „„ ;异常服务程序 LDR LR,=0Xfffffffd ;返回到线程模式进程堆栈 BX LR 2、5、5 CortexM3 异常处理机制 1.末尾连锁 末尾连锁能够在两个中断之间没有多余得状态保存与恢复指令得情况下实现异常背对背处理。如图 2、11 所示。在退出 ISR 并进
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服