第2章编程模型(programmer'smodel)寄存器r8-r12不能被16位指令访问。寄存器r13、r14、r15具有以下特殊功能:堆栈指针寄存器r13用作堆栈指针(SP)。由于SP忽略了写入位[1:0]的值,因此它自动与字,即4字节边界对齐。处理模式始终使用SP_main,而线程模式可配置为SP_main或SP_procesS。链接寄存器寄存器r14是子程序的链接寄存器(LR)。在执行分支(bramch)和链接(BL)指今或带有交换的分支和链接指今(BLX)时,LR用于接收来自PC的返回地址。LR也用于异常返回。其它任何时候都可以将r14看作一个通用寄存器。程序计数器器寄存器r15为程序计数器(PC)该寄存器的位0始终为0,因此,指令始终与字或半字边界对齐,2.3.2特殊用途的程序状态寄存器(xPSR)系统级的处理器状态可分为3类,因此有3个程序状态寄存器。对程序状态寄存器的访问使用MRS和MSR指令,在访问时可以把它们作为单独的寄存器,3个中的任两个组合,或3个组合。这3个寄存器为:·应用PSR·中断PSR·执行PSR应用PSR应用PSR(APSR)包含条件代码标志。在进入异常之前,Cortex-M3处理器将条件代码标志保存在堆栈内。您可以使用MSR(2)和MRS(2)指令来访问APSR。APSR的位分配如图2-2所示。0313029282726NzcvQ保留图2-2应用程序状态寄存器的位分配表2-1描述了APSR的位分配。表2-1应用程序状态寄存器的位分配位名称定义N[31]负数或小于标志:1:结果为负数或小于0:结果为正数或大于Z[30]零标志:1:结果为00:结果为非019
第 2 章 编程模型(programmer's model) 19 寄存器 r8-r12 不能被 16 位指令访问。 寄存器 r13、r14、r15 具有以下特殊功能: 堆栈指针 寄存器 r13 用作堆栈指针(SP)。由于 SP 忽略了写入位[1:0]的值,因此它 自动与字,即 4 字节边界对齐。 处理模式始终使用 SP_main,而线程模式可配置为 SP_main 或 SP_process。 链接寄存器 寄存器 r14 是子程序的链接寄存器(LR)。 在执行分支(branch)和链接(BL)指令或带有交换的分支和链接指令(BLX) 时,LR 用于接收来自 PC 的返回地址。 LR 也用于异常返回。 其它任何时候都可以将 r14 看作一个通用寄存器。 程序计数器 寄存器 r15 为程序计数器(PC) 该寄存器的位 0 始终为 0,因此,指令始终与字或半字边界对齐。 2.3.2 特殊用途的程序状态寄存器(xPSR) 系统级的处理器状态可分为 3 类,因此有 3 个程序状态寄存器。对程序状态寄存器的访 问使用 MRS 和 MSR 指令,在访问时可以把它们作为单独的寄存器,3 个中的任两个组合, 或 3 个组合。这 3 个寄存器为: z 应用 PSR z 中断 PSR z 执行 PSR 应用 PSR 应用 PSR(APSR)包含条件代码标志。在进入异常之前,Cortex-M3 处理器将条件代码标 志保存在堆栈内。您可以使用 MSR(2)和 MRS(2)指令来访问 APSR。 APSR 的位分配如图 2-2 所示。 图 2-2 应用程序状态寄存器的位分配 表 2-1 描述了 APSR 的位分配。 表 2-1 应用程序状态寄存器的位分配 位 名称 定义 [31] N 负数或小于标志: 1:结果为负数或小于 0:结果为正数或大于 [30] Z 零标志: 1:结果为 0 0:结果为非 0
第2章编程模型(programmer'smodel)续表2-1位名称定义c[29]进位/借位标志:1:进位或借位0:没有进位或借位[28]溢出标志:1:溢出0:没有溢出Q[27]粘着饱和(sticky saturation)标志保留-[26:0]中断PSR中断PSR(IPSR)包含当前激活的异常的ISR编号。IPSR的位分配如图2-3所示。03198保留中断号图2-3中断程序状态寄存器的位分配表2-2描述了IPSR的位分配。表2-2中断程序状态寄存器的位分配位名称定义[31:9]保留.[8:0]ISR NUMBER占先异常的编号:基础级别=0NMI=2SVCall=11INTISR[0]=16INTISR[1]=17INTISR[15]=31.INTISR[239]=255执行PSR执行PSR(EPSR)包含两个重叠的区域:可中断-可继续(interruptible-continuable)指令(ICI)区,用于被打断的多寄存器加.载和存储指令。20
第 2 章 编程模型(programmer's model) 20 续表 2-1 位 名称 定义 [29] C 进位/借位标志: 1:进位或借位 0:没有进位或借位 [28] V 溢出标志: 1:溢出 0:没有溢出 [27] Q 粘着饱和(sticky saturation)标志 [26:0] - 保留 中断 PSR 中断 PSR(IPSR)包含当前激活的异常的 ISR 编号。 IPSR 的位分配如图 2-3 所示。 图 2-3 中断程序状态寄存器的位分配 表 2-2 描述了 IPSR 的位分配。 表 2-2 中断程序状态寄存器的位分配 位 名称 定义 [31:9] - 保留 [8:0] ISR NUMBER 占先异常的编号: 基础级别=0 NMI=2 SVCall=11 INTISR[0]=16 INTISR[1]=17 . . . INTISR[15]=31 . . .INTISR[239]=255 执行 PSR 执行 PSR(EPSR)包含两个重叠的区域: z 可中断-可继续(interruptible-continuable)指令(ICI)区,用于被打断的多寄存器加 载和存储指令
第2章编程模型(programmer'smodel)用于If-Then(IT)指令的执行状态区,以及T位(Thumb状态位)。可中断-可继续指令(ICI)区多寄存器加载(LDM)和存储(STM)操作是可中断的。EPSR的ICI区用来保存从产生中断的点继续执行多寄存器加载和存储操作时所必需的信息。If-then状态区EPSR的IT区包含了If-Then指令的执行状态位。注:ICI区和IT区是重叠的,因此,If-Then模块内的多寄存器加载或存储操作不具有可中断-可继续功能。EPSR的位分配如图2-4所示。310272625242316 1510 9保留保留ICI/ITTICT/IT保留图2-4执行程序状态寄存器不能直接访问EPSR,若想修改EPSR必须发生以下两个事件之一:在执行LDM或STM指令时产生一次中断执行If-Then指令表2-3描述了EPSR的位分配。表2-3执行PSR的位功能位名称定义[31:27]保留-ICI[15:12]可中断-可继续的指令位。如果在执行LDM或STM操作时产生一次中断,则LDM或STM操作暂停。EPSR使用位[15:121来保存该操作中下一个寄存器操作数的编号。在中断响应之后,处理器返回由[15:12]指向的寄存器并恢复操作。如果ICI区指向的寄存器不在指令的寄存器列表中,则处理器对列表中的下一个寄存器(如果有)继续执行LDM/STM操作。IT[15:10]:[26:25]If-Then位。它们是If-Then指令的执行状态位。包含If-Then模块的指令数目和它们的执行条件。T[24]T位使用一条可相互作用的指令来清零,这里写入的PC的位0为0。也可以使用异常出栈操作来清零,被压栈的T位为0。当T位为零时执行指令会引起INVSTATE异常。[23:16]保留-保留[9:0]21
第 2 章 编程模型(programmer's model) 21 z 用于 If-Then(IT)指令的执行状态区,以及 T 位(Thumb 状态位)。 可中断-可继续指令(ICI)区 多寄存器加载(LDM)和存储(STM)操作是可中断的。EPSR 的 ICI 区用来保存从产 生中断的点继续执行多寄存器加载和存储操作时所必需的信息。 If-then 状态区 EPSR 的 IT 区包含了 If-Then 指令的执行状态位。 注: ICI 区和 IT 区是重叠的,因此,If-Then 模块内的多寄存器加载或存储操作不具有可中 断-可继续功能。 EPSR 的位分配如图 2-4 所示。 图 2-4 执行程序状态寄存器 不能直接访问 EPSR,若想修改 EPSR 必须发生以下两个事件之一: z 在执行 LDM 或 STM 指令时产生一次中断 z 执行 If-Then 指令 表 2-3 描述了 EPSR 的位分配。 表 2-3 执行 PSR 的位功能 位 名称 定义 [31:27] - 保留 [15:12] ICI 可中断-可继续的指令位。如果在执行 LDM 或 STM 操作时产生一次中断, 则 LDM 或 STM 操作暂停。EPSR 使用位[15:12]来保存该操作中下一个寄存 器操作数的编号。在中断响应之后,处理器返回由[15:12]指向的寄存器并恢 复操作。如果 ICI 区指向的寄存器不在指令的寄存器列表中,则处理器对列 表中的下一个寄存器(如果有)继续执行 LDM/STM 操作。 [15:10]:[26:25] IT If-Then 位。它们是 If-Then 指令的执行状态位。包含 If-Then 模块的指令数目 和它们的执行条件。 [24] T T 位使用一条可相互作用的指令来清零,这里写入的 PC 的位 0 为 0。也可以 使用异常出栈操作来清零,被压栈的 T 位为 0。 当 T 位为零时执行指令会引起 INVSTATE 异常。 [23:16] - 保留 [9:0] - 保留
第2章编程模型(programmer'smodel)LDM和STM操作中的基址寄存器更新以下是LDM或STM更新基址寄存器的情况:当指令指定了基址寄存器回写操作时,基址寄存器变为更新后的地址。一次中止·(abort)能够恢复为原来的基地址。当基址寄存器在LDM的寄存器列表中并且不是列表中的最后一个寄存器时,基址寄存器变为被加载的值。如果出现下列情况,LDM/STM操作重新开始而不是继续执行:·LDM/STM错误。LDM/STM指令位于IT内如果LDM已经完成基地址加载操作,它会从基地址加载之前的地址继续执行。保存xPSR位在进入异常时,处理器将3个状态寄存器组合的信息保存在堆栈内。2.4数据类型Cortex-M3处理器支持以下数据类型:·32位字·16位半字·8位字节注:存储器系统应该支持所有的数据类型。尤其是要求在不破坏一个字中的相邻字节的情况下支持小于1个字(subword)的写操作。2.5存储器格式Cortex-M3处理器将存储器看作从0开始向上编号的字节的线性集合。例如:。字节0-3存放第一个被保存的字。字节4-7存放第二个被保存的字Cortex-M3处理器能够以小端格式或大端格式访问存储器中的数据字,而访问代码时始终使用小端格式。注:小端格式是ARM处理器默认的存储器格式。在小端格式中,一个字中最低地址的字节为该字的最低有效字节,最高地址的字节为最高有效字节。存储器系统地址0的字节与数据线7-0相连。在大端格式中,一个字中最低地址的字节为该字的最高有效字节,而最高地址的字节为最低有效字节。存储器系统地址0的字节与数据线31-24相连。图2-5显示了小端格式和大端格式的区别。22
第 2 章 编程模型(programmer's model) 22 LDM 和 STM 操作中的基址寄存器更新 以下是 LDM 或 STM 更新基址寄存器的情况: z 当指令指定了基址寄存器回写操作时,基址寄存器变为更新后的地址。一次中止 (abort)能够恢复为原来的基地址。 z 当基址寄存器在 LDM 的寄存器列表中并且不是列表中的最后一个寄存器时,基址 寄存器变为被加载的值。 如果出现下列情况,LDM/STM 操作重新开始而不是继续执行: z LDM/STM 错误 z LDM/STM 指令位于 IT 内 如果 LDM 已经完成基地址加载操作,它会从基地址加载之前的地址继续执行。 保存 xPSR 位 在进入异常时,处理器将 3 个状态寄存器组合的信息保存在堆栈内。 2.4 数据类型 Cortex-M3 处理器支持以下数据类型: z 32 位字 z 16 位半字 z 8 位字节 注: 存储器系统应该支持所有的数据类型。尤其是要求在不破坏一个字中的相邻字节的情况 下支持小于 1 个字(subword)的写操作。 2.5 存储器格式 Cortex-M3 处理器将存储器看作从 0 开始向上编号的字节的线性集合。例如: z 字节 0-3 存放第一个被保存的字 z 字节 4-7 存放第二个被保存的字 Cortex-M3 处理器能够以小端格式或大端格式访问存储器中的数据字,而访问代码时始 终使用小端格式。 注: 小端格式是 ARM 处理器默认的存储器格式。 在小端格式中,一个字中最低地址的字节为该字的最低有效字节,最高地址的字节为最 高有效字节。存储器系统地址 0 的字节与数据线 7-0 相连。 在大端格式中,一个字中最低地址的字节为该字的最高有效字节,而最高地址的字节为 最低有效字节。存储器系统地址 0 的字节与数据线 31-24 相连。 图 2-5 显示了小端格式和大端格式的区别
第2章编程模型(programmer'smodel)Cortex-M3处理器有一个配置管脚BIGEND,您能够使用它来选择小端格式或BE-8大端格式。该管脚在复位时被采样,结束复位后存储器格式不能修改。注:对系统控制空间(SCS)的访问始终采用小端格式。在非复位的状态下试图改变存储器格式的操作将被忽略。9PPB空间只能为小端格式,BIGEND的设置无效。小端数据格式24 23318 716 15地址D的地址C的地址E的地址F的地址C的字字节1字节0字节3字节2地址C的半字0地址E的半字1地址D的地址C的地址F的地址E的地址8的字字节1字字节3字节2地址8的半字0地址A的半字1地址D的地址C的地址F的地址E的字节1字节0字节2字节3地址4的字地址4的半字0地址6的半字1地址D的地址C的地址F的地址E的地址0的字字节!字节0字节2字节3地址0的半字0地址2的半字1大端数据格式24 23311615870地址D的地址c的地址E的地址的地址C的字字节2字节3字节1字节0地址C的半字1地址E的0地址9的地址8的地址B的地址A的地址8的字字节2字节3字节1字节0地址8的半字1地址A的半字0地址5的地址4的地址7的地址6的字节2字节3字节1字节0地址4的字地址4的半字1地址6的半字0地址1的地址0的地址3的地址2的地址0的字字节1字节2字节3字节地址0的半字1地址2的半字0图2-5存储器的小端格式和大端格式23
第 2 章 编程模型(programmer's model) 23 Cortex-M3 处理器有一个配置管脚 BIGEND,您能够使用它来选择小端格式或 BE-8 大 端格式。该管脚在复位时被采样,结束复位后存储器格式不能修改。 注: z 对系统控制空间(SCS)的访问始终采用小端格式。 z 在非复位的状态下试图改变存储器格式的操作将被忽略。 z PPB 空间只能为小端格式,BIGEND 的设置无效。 小端数据格式 大端数据格式 图 2-5 存储器的小端格式和大端格式