第2章编程模型(programmer'smodel)2.6指令集Cortex-M3处理器不支持ARM指令。Cortex-M3处理器支持所有的ARMv6Thumb指令,下表2-4中列出的除外。表2-4Cortex-M不支持的Thumb指令指令执行时产生的动作BLX(1)带链接和交换的分支指令BLX(1)一直出错SETEND设置存储器格式SETEND一直出错。使用配置管脚选择Cortex-M3的存储器格式。Cortex-M3处理器支持表2-5中列出的Thumb-2指令。表2-5Cortex-M3支持的Thumb-2指令指令类型大小指令数据操作16ADC,ADD,AND,ASR,BIC,CMN,CMP,CPY,EOR,LSL,LSR,MOV,MUL,MVN.NEGORR.ROR.SBC.SUB.TST,REV,REVH.REVSHSXTB.SXTHUXTB,UXTH16分支B<cond>,B,BL,BX,BLX.。注:不支持带立即数的BLX指令16单寄存器加载-存储LDRLDRB.LDRHLDRSB,LDRSHSTR.STRB.STRHT变量16多寄存器加载-存储LDMIA,POP,PUSH,STMIA16异常产生BKPT,如果调试使能,程序停止,进入调试状态,如果调试禁止,则出错。SVC,出现SVC故障则调用SVCall处理程序。32带立即数的数据操作ADC(C),ADD(S),CMN,RSB(S),SBC(S),SUB(S),CMP,AND(S),TST,BIC(S)EORS),TEQORRS),MOV(S)ORE(S),MVN32带大立即数的数据操作MOVW.MOVT.ADDW.SUBW.MOVW和MOVT带有16位立即数。这意味着它们能代替来自存储器的literal加载。ADDW和SUBW带有12位立即数。这意味着它们能代替多个来自存储器的literal加载。位域操作32BFI,BFC,UBFX,SBFX。这些指令都是按位来操作的,使能对位的位置和大小的控制。除了许多比较和一些AND/OR赋值表达式之外,它们还都支持C/C++位区(在structs中)。带3个寄存器的数据操32ADC(S).ADD(S),CMN,RSB(S),SBC(S),SUB(S).CMPAND(S),TST,作BICS).EORS!TEQ.ORRS).MOVS!ORNS!MVNS?。不支持PKxxx指令。移位操作32ASR(S),LSL(S),LSR(S),ROR(S)杂项32REV,REVH,REVSH,RBIT,CLZ,SXTB,SXTH,UXTB,UXTH。扩展指令与对应的v616位指令相同。32表格分支TBB和TBH表格分支,用于switch/case。这些指令都是带移位的LDR操作,然后进行分支。32乘法MUL,MLA,MLS3264位结果的乘法UMULL,SMULL,UMLAL,SMLAL24
第 2 章 编程模型(programmer's model) 24 2.6 指令集 Cortex-M3 处理器不支持 ARM 指令。 Cortex-M3 处理器支持所有的 ARMv6 Thumb 指令,下表 2-4 中列出的除外。 表 2-4 Cortex-M 不支持的 Thumb 指令 指令 执行时产生的动作 BLX(1) 带链接和交换的分支指令 BLX(1)一直出错 SETEND 设置存储器格式 SETEND 一直出错。使用配置管脚选择 Cortex-M3 的存储器格式。 Cortex-M3 处理器支持表 2-5 中列出的 Thumb-2 指令。 表 2-5 Cortex-M3 支持的 Thumb-2 指令 指令类型 大小 指令 数据操作 16 ADC,ADD,AND,ASR,BIC,CMN,CMP,CPY,EOR,LSL,LSR,MOV,MUL, MVN,NEG,ORR,ROR,SBC,SUB,TST,REV,REVH,REVSH,SXTB,SXTH, UXTB,UXTH 分支 16 B<cond>,B,BL,BX,BLX.。注:不支持带立即数的 BLX 指令 单寄存器加载-存储 16 LDR,LDRB,LDRH,LDRSB,LDRSH,STR,STRB,STRH,T 变量 多寄存器加载-存储 16 LDMIA,POP,PUSH,STMIA 异常产生 16 BKPT,如果调试使能,程序停止,进入调试状态,如果调试禁止,则 出错。SVC,出现 SVC 故障则调用 SVCall 处理程序。 带立即数的数据操作 32 ADC{C},ADD{S},CMN,RSB{S},SBC{S},SUB{S},CMP,AND{S},TST, BIC{S},EOR{S},TEQ,ORR{S},MOV{S},ORE{S},MVN{S} 带大立即数的数据操作 32 MOVW,MOVT,ADDW,SUBW。 MOVW 和 MOVT 带有 16 位立即数。这意味着它们能代替来自存储器 的 literal 加载。 ADDW 和 SUBW 带有 12 位立即数。这意味着它们能代替多个来自存 储器的 literal 加载。 位域操作 32 BFI,BFC,UBFX,SBFX。这些指令都是按位来操作的,使能对位的位置 和大小的控制。除了许多比较和一些 AND/OR 赋值表达式之外,它们 还都支持 C/C++位区(在 structs 中)。 带 3 个寄存器的数据操 作 32 ADC{S},ADD{S},CMN,RSB{S},SBC{S},SUB{S},CMP,AND{S},TST, BIC{S},EOR{S},TEQ,ORR{S},MOV{S},ORN{S},MVN{S} 。不支持 PKxxx 指令。 移位操作 32 ASR{S},LSL{S},LSR{S},ROR{S} 杂项 32 REV,REVH,REVSH,RBIT,CLZ,SXTB,SXTH,UXTB,UXTH。扩展指令 与对应的 v6 16 位指令相同。 表格分支 32 TBB 和 TBH 表格分支,用于 switch/case。这些指令都是带移位的 LDR 操作,然后进行分支。 乘法 32 MUL,MLA,MLS 64 位结果的乘法 32 UMULL,SMULL,UMLAL,SMLAL
第2章编程模型(programmer'smodel)续表2-5大小指令指令类型32加载-存储寻址支持以下格式:PC+/-imm12,FRbase+imm12,Rbase+/-imm8,以及包括移位的调整寄存器。在特权模式下使用的T变量,32单寄存器加载-存储LDR,LDRB,LDRSB,LDRH,LDRSH,STR,STRB,STRH,T变量。PLD作为暗示,在没有高速缓存时当作NOP指令。32多寄存器加载-存储STM,LDM,LDRD,STRD,LDC,STC专用的加载-存储32LDREX,STREX,LDREXB,LDREXH,STREXB,STREXH,CLREX。(exclusive load-store)如果没有局部监控程序时,将出现故障,这是IMPDEF。这里不包括DREXD和STREXD。32分支B,BL,B<cond>。状态一直改变,因此无BLX(1)。无BXJ。32系统用MSR(2)和MRS(2)代替MSR/MRS,但MSR(2)和MRS(2)还有其它更多的功能。可以用它们来访问其它堆栈和状态寄存器。不支持CPSIE/CPSID的32位格式。无RFE或SRS。系统16CPSIE和CPSID,是MSR(2)指令的快速版本,使用标准的Thumb-2编码,但只允许使用“”和“f”,不允许使用“a”。扩展3232NOP(所有格式),协处理器(LDC,MCR,MCR2,MCRR,MRC,MRRCSTC),以及YIELD(相当于NOP)。注:无MRS(1),MSR(1),或SUBS(PC返回链接)。组合分支16CBZ和CBNZ(如果寄存器为0或非0,则进行比较并分支)。扩展16IT和NOP。包括YIELD。除法32SDIV和UDIV。带符号和不带符号数的32/32除,商也为32位,没有余数。可通过减法操作来实现,该操作允许提前退出。睡眠16,32WFI,WFE和SEV,相当于NOP指令,用来控制睡眠行为。排序(barrier)32ISB,DSB和DMB,该类排序指令用来确保在下一条指令执行之前某些动作已经发生。32饱和(Saturation)SSAT和USAT,用来对寄存器进行饱和操作。该类指令执行以下操作:使用移位操作将值规格化,测试来自所选位单元(Q值)的溢出情况。如果溢出,则置位xPSR的Q位,在检测到溢出时使该值达到饱和。饱和值请参考针对所选大小的最大的无符号数或最大/最小的带符号数。注:所有的协处理器指令都产生无CP故障。25
第 2 章 编程模型(programmer's model) 25 续表 2-5 指令类型 大小 指令 加载-存储寻址 32 支持以下格式:PC+/-imm12,Rbase+imm12,Rbase+/-imm8,以及包 括移位的调整寄存器。 在特权模式下使用的 T 变量。 单寄存器加载-存储 32 LDR,LDRB,LDRSB,LDRH,LDRSH,STR,STRB,STRH,T 变量。PLD 作 为暗示,在没有高速缓存时当作 NOP 指令。 多寄存器加载-存储 32 STM,LDM,LDRD,STRD,LDC,STC 专用的加载 - 存 储 (exclusive load-store) 32 LDREX,STREX,LDREXB,LDREXH,STREXB,STREXH,CLREX。 如果没有局部监控程序时,将出现故障,这是 IMP DEF。 这里不包括 DREXD 和 STREXD。 分支 32 B,BL,B<cond>。状态一直改变,因此无 BLX(1)。无 BXJ。 系统 32 用 MSR(2)和 MRS(2)代替 MSR/MRS,但 MSR(2)和 MRS(2)还有其它 更多的功能。可以用它们来访问其它堆栈和状态寄存器。 不支持 CPSIE/CPSID 的 32 位格式。 无 RFE 或 SRS。 系统 16 CPSIE 和 CPSID,是 MSR(2)指令的快速版本,使用标准的 Thumb-2 编码,但只允许使用“i”和“f”,不允许使用“a”。 扩展 32 32 NOP(所有格式),协处理器(LDC,MCR,MCR2,MCRR,MRC,MRRC, STC),以及 YIELD(相当于 NOP)。注:无 MRS(1),MSR(1),或 SUBS (PC 返回链接)。 组合分支 16 CBZ 和 CBNZ(如果寄存器为 0 或非 0,则进行比较并分支)。 扩展 16 IT 和 NOP。包括 YIELD。 除法 32 SDIV 和 UDIV。带符号和不带符号数的 32/32 除,商也为 32 位,没有 余数。可通过减法操作来实现,该操作允许提前退出。 睡眠 16,32 WFI,WFE 和 SEV,相当于 NOP 指令,用来控制睡眠行为。 排序(barrier) 32 ISB,DSB 和 DMB,该类排序指令用来确保在下一条指令执行之前某 些动作已经发生。 饱和(Saturation) 32 SSAT 和 USAT,用来对寄存器进行饱和操作。该类指令执行以下操作: 使用移位操作将值规格化,测试来自所选位单元(Q 值)的溢出情况。 如果溢出,则置位 xPSR 的 Q 位,在检测到溢出时使该值达到饱和。 饱和值请参考针对所选大小的最大的无符号数或最大/最小的带符号 数。 注: 所有的协处理器指令都产生无 CP 故障
第3章系统控制第3章系统控制本章列出了用于对Cortex-M3系统进行编程的寄存器,包括以下内容:处理器寄存器汇总.3.1处理器寄存器汇总本节汇总了用来控制系统功能的寄存器,包括:嵌套向量中断控制器的寄存器?内核调试寄存器.系统调试寄存器.调试接口的端口寄存器.跟踪端口接口单元的寄存器.·嵌入式跟踪宏单元的寄存器3.1.1嵌套向量中断控制器的寄存器表3-1列出了嵌套向量中断控制器(NVIC)的寄存器。NVIC寄存器的详细描述见第8章嵌入式向量中断控制器。表3-1NVIC寄存器类型名称地址复位值只读中断控制类型寄存器a0xE000E004读/写SysTick控制和状态寄存器OxE000E0100x00000000读泻SysTick重装值寄存器0xE000E014不可预知读/写SysTick当前值寄存器0xE000E018不可预知清零只读SysTick校准值寄存器0xE000E01CSTCALIB读/写Irq031使能置位寄存器0xE000E1000x00000000读写Irq224~239使能置位寄存器OxE000E011C0x00000000读泻OxE000E01800x00000000Irq0~31使能清零寄存器读写Irq224~239使能清零寄存器0xE000E19C0x00000000读/写Irq0~31挂起置位寄存器0xE000E2000x0000000026
第 3 章 系统控制 26 第3章 系统控制 本章列出了用于对 Cortex-M3 系统进行编程的寄存器,包括以下内容: z 处理器寄存器汇总 3.1 处理器寄存器汇总 本节汇总了用来控制系统功能的寄存器,包括: z 嵌套向量中断控制器的寄存器 z 内核调试寄存器 z 系统调试寄存器 z 调试接口的端口寄存器 z 跟踪端口接口单元的寄存器 z 嵌入式跟踪宏单元的寄存器 3.1.1 嵌套向量中断控制器的寄存器 表 3-1 列出了嵌套向量中断控制器(NVIC)的寄存器。NVIC 寄存器的详细描述见第 8 章嵌入式向量中断控制器。 表 3-1 NVIC 寄存器 名称 类型 地址 复位值 中断控制类型寄存器 只读 0xE000E004 a SysTick 控制和状态寄存器 读/写 0xE000E010 0x00000000 SysTick 重装值寄存器 读/写 0xE000E014 不可预知 SysTick 当前值寄存器 读/写 清零 0xE000E018 不可预知 SysTick 校准值寄存器 只读 0xE000E01C STCALIB Irq0~31 使能置位寄存器 读/写 0xE000E100 0x00000000 . . . . . . . . . . . . Irq224~239 使能置位寄存器 读/写 0xE000E011C 0x00000000 Irq0~31 使能清零寄存器 读/写 0xE000E0180 0x00000000 . . . . . . . . . . . . Irq224~239 使能清零寄存器 读/写 0xE000E19C 0x00000000 Irq0~31 挂起置位寄存器 读/写 0xE000E200 0x00000000 . . . . . . .
第3章系统控制续表3-1地址名称类型复位值读/写Irq224~239挂起置位寄存器0xE000E21C0x00000000读/写Irq0~31挂起清零寄存器0xE000E2800x00000000..读泻写0x00000000Irq224~239挂起清零寄存器0xE000E29C只读Irq0~31激活位寄存器OxE000E3000x00000000只读Irq224~239激活位寄存器0xE000E31C0x00000000读写0xE000E4000x0000000Irq0~31优先级寄存器:..读/写Irq236~239优先级寄存器OxE000E4F00x00000000只读OxEOOOEDO00x410FC230CPUID基址寄存器读/写或只读中断控制状态寄存器0xE000ED040x00000000读/写向量表偏移寄存器0xE000ED080x00000000读/泻应用中断/复位控制寄存器OxE00OEDOC0x00000000读/写0xE000ED100x0000000系统控制寄存器读泻配置控制寄存器0xE000ED140x0000000读泻系统处理4-7优先级寄存器0xE000ED180x00000000读泻系统处理8-11优先级寄存器0xE000ED1C0x0000000读/写OxE000ED200x0000000系统处理12-15优先级寄存器读泻系统处理控制和状态寄存器0xE000ED240x0000000读/泻写配置故障状态寄存器0xE000ED280x00000000读泻硬故障状态寄存器0xE000ED2C0x00000000读写0x0000000调试故障状态寄存器0xE000ED30读/写不可预知存储器管理地址寄存器0xE000ED34读/泻写总线故障地址寄存器0xE000ED38不可预知只读0xE000ED400x0000030PFRO:处理器特性寄存器0只读PFR1:处理器特性寄存器10xE000ED440x00000200只读0xE000ED480x00100000DFRO:调试特性寄存器0只读AFRO:辅助特性寄存器00xE000ED4C0x00000000只读MMFRO:存储器模型特性寄存器00xE000ED500x0000030只读MMFR1:存储器模型特性寄存器10xE000ED540x00000000只读0xE000ED580x00000000MMFR2:存储器模型特性寄存器2只读MMFR3:存储器模型特性寄存器30xE000ED5C0x0000000027
第 3 章 系统控制 27 续表 3-1 名称 类型 地址 复位值 . . . . Irq224~239 挂起置位寄存器 读/写 0xE000E21C 0x00000000 Irq0~31 挂起清零寄存器 读/写 0xE000E280 0x00000000 . . . . . . . . . . . . Irq224~239 挂起清零寄存器 读/写 0xE000E29C 0x00000000 Irq0~31 激活位寄存器 只读 0xE000E300 0x00000000 . . . . . . . . . . . . Irq224~239 激活位寄存器 只读 0xE000E31C 0x00000000 Irq0~31 优先级寄存器 读/写 0xE000E400 0x00000000 . . . . . . . . . . . . Irq236~239 优先级寄存器 读/写 0xE000E4F0 0x00000000 CPUID 基址寄存器 只读 0xE000ED00 0x410FC230 中断控制状态寄存器 读/写或只读 0xE000ED04 0x00000000 向量表偏移寄存器 读/写 0xE000ED08 0x00000000 应用中断/复位控制寄存器 读/写 0xE000ED0C 0x00000000 系统控制寄存器 读/写 0xE000ED10 0x00000000 配置控制寄存器 读/写 0xE000ED14 0x00000000 系统处理 4-7 优先级寄存器 读/写 0xE000ED18 0x00000000 系统处理 8-11 优先级寄存器 读/写 0xE000ED1C 0x00000000 系统处理 12-15 优先级寄存器 读/写 0xE000ED20 0x00000000 系统处理控制和状态寄存器 读/写 0xE000ED24 0x00000000 配置故障状态寄存器 读/写 0xE000ED28 0x00000000 硬故障状态寄存器 读/写 0xE000ED2C 0x00000000 调试故障状态寄存器 读/写 0xE000ED30 0x00000000 存储器管理地址寄存器 读/写 0xE000ED34 不可预知 总线故障地址寄存器 读/写 0xE000ED38 不可预知 PFR0:处理器特性寄存器 0 只读 0xE000ED40 0x00000030 PFR1:处理器特性寄存器 1 只读 0xE000ED44 0x00000200 DFR0:调试特性寄存器 0 只读 0xE000ED48 0x00100000 AFR0:辅助特性寄存器 0 只读 0xE000ED4C 0x00000000 MMFR0:存储器模型特性寄存器 0 只读 0xE000ED50 0x00000030 MMFR1:存储器模型特性寄存器 1 只读 0xE000ED54 0x00000000 MMFR2:存储器模型特性寄存器 2 只读 0xE000ED58 0x00000000 MMFR3:存储器模型特性寄存器 3 只读 0xE000ED5C 0x00000000
第3章系统控制续表3-1名称类型地址复位值只读0xE000ED600x01141110ISARO:ISA特性寄存器0只读ISARIISA特性寄存器10xE000ED640x02111000只读ISAR2:ISA特性寄存器20xE000ED680x21112231只读ISAR3:ISA特性寄存器30xE000ED6C0x01111110只读ISAR4:ISA特性寄存器40xE000ED700x01310102只写软件触发中断寄存器OxE000EF00-只读外设标识寄存器(PERIPHID4)OxE000EFDO0x04只读0x00外设标识寄存器(PERIPHID5)0xE000EFD4只读0xE000EFD80x00外设标识寄存器(PERIPHID6)只读外设标识寄存器(PERIPHID7)0x000xE000EFDC只读0x00外设标识寄存器位7:0(PERIPHIDO)0xE000EFE0只读外设标识寄存器位15:8(PERIPHID1)0xE000EFE40xB0只读0xE000EFE80x0B外设标识寄存器位23:16(PERIPHID2)只读0x00外设标识寄存器位31:24(PERIPHID3)OxE000EFEC只读组件标识寄存器位7:0(PCELLIDO)0xE000EFFOOxOD只读0xEO组件标识寄存器位15:8(PCELLID1)0xE000EFF4只读0x05组件标识寄存器位23:16(PCELLID2)0xE000EFF8只读组件标识寄存器位31:24(PCELLID3)0xE000EFFC0xB1a复位值取决于定义的中断的数目。3.1.2内核调试寄存器表3-2列出了内核调试寄存器。有关内核调试寄存器的详细描述见第10章内核调试表3-2内核调试寄存器名称类型地址复位值读/写调试中止控制和状态寄存器0xE000EDFO0x00000000a只写0xE000EDF4调试内核寄存器的选择器寄存器-读/写1调试内核寄存器的数据寄存器0xE000EDF8读/写调试异常和监控控制寄存器0xE000EDFC0x00000000%位5.3.2.1.0由PORESETn复位,位1也可由SYSRESETn以及向应用中断和复位控制寄存器的aVECTRESET位写入1来复位。b位16,17,18,19由STSRESETn以及向应用中断和复位控制寄存器的VECTRESET位写入1来复位。3.1.3系统调试寄存器这节列出了用于系统调试的寄存器。Flash修补和断点寄存器表3-3列出了Flash修补和断点(FPB)寄存器。有关FPB的详细描述请参考第11章系统调试。28
第 3 章 系统控制 28 续表 3-1 名称 类型 地址 复位值 ISAR0:ISA 特性寄存器 0 只读 0xE000ED60 0x01141110 ISAR1:ISA 特性寄存器 1 只读 0xE000ED64 0x02111000 ISAR2:ISA 特性寄存器 2 只读 0xE000ED68 0x21112231 ISAR3:ISA 特性寄存器 3 只读 0xE000ED6C 0x01111110 ISAR4:ISA 特性寄存器 4 只读 0xE000ED70 0x01310102 软件触发中断寄存器 只写 0xE000EF00 - 外设标识寄存器(PERIPHID4) 只读 0xE000EFD0 0x04 外设标识寄存器(PERIPHID5) 只读 0xE000EFD4 0x00 外设标识寄存器(PERIPHID6) 只读 0xE000EFD8 0x00 外设标识寄存器(PERIPHID7) 只读 0xE000EFDC 0x00 外设标识寄存器位 7:0(PERIPHID0) 只读 0xE000EFE0 0x00 外设标识寄存器位 15:8(PERIPHID1) 只读 0xE000EFE4 0xB0 外设标识寄存器位 23:16(PERIPHID2) 只读 0xE000EFE8 0x0B 外设标识寄存器位 31:24(PERIPHID3) 只读 0xE000EFEC 0x00 组件标识寄存器位 7:0(PCELLID0) 只读 0xE000EFF0 0x0D 组件标识寄存器位 15:8(PCELLID1) 只读 0xE000EFF4 0xE0 组件标识寄存器位 23:16(PCELLID2) 只读 0xE000EFF8 0x05 组件标识寄存器位 31:24(PCELLID3) 只读 0xE000EFFC 0xB1 a 复位值取决于定义的中断的数目。 3.1.2 内核调试寄存器 表 3-2 列出了内核调试寄存器。有关内核调试寄存器的详细描述见第 10 章内核调试。 表 3-2 内核调试寄存器 名称 类型 地址 复位值 调试中止控制和状态寄存器 读/写 0xE000EDF0 0x00000000a 调试内核寄存器的选择器寄存器 只写 0xE000EDF4 - 调试内核寄存器的数据寄存器 读/写 0xE000EDF8 - 调试异常和监控控制寄存器 读/写 0xE000EDFC 0x00000000b a 位 5,3,2,1,0 由 PORESETn 复位,位[1]也可由 SYSRESETn 以及向应用中断和复位控制寄存器的 VECTRESET 位写入 1 来复位。 b 位 16,17,18,19 由 STSRESETn 以及向应用中断和复位控制寄存器的 VECTRESET 位写入 1 来复 位。 3.1.3 系统调试寄存器 这节列出了用于系统调试的寄存器。 Flash 修补和断点寄存器 表 3-3 列出了 Flash 修补和断点(FPB)寄存器。有关 FPB 的详细描述请参考第 11 章系 统调试