- 36
- 0
- 约6.96千字
- 约 51页
- 2017-06-08 发布于湖北
- 举报
第6章 嵌入式系统和Cortex-M3-M4
第6章 嵌入式系统和Cortex-M3;6.1 ARM系统概述;ARM;6.2 Cortex-M3/M4概述;32-bit微处理器: 32-bit 数据、寄存器组、存储器接口。
哈佛架构:独立的指令总线和数据总线。
存储空间:4GB。
寄存器:寄存器 (R0 到 R15) 和 特殊功能寄存器。
运行模式:线程模式和处理模式;特权级和用户级。
中断和异常:内置嵌套向量中断控制器;支持11 种系统异常外加240 种外部 IRQ。
总线接口:若干总线接口允许 Cortex-M3 同时取指令和取数据。
MPU:一个可选的存储器保护单元允许对特权访问和用户程序访问制定访问规则。
指令集:Thumb-2 指令集;允许 32位指令和16位指令被同时使用。
固定的内部调试组件:提供调试操作支持和像断点调试这样的功能。
;6;7;通用寄存器
1. R0~R7 (低寄存器):
可以被所有 16-bit Thumb 指令和所有 32-bit Thumb-2 指令访问。
2. R8~R12 (高寄存器):
可以被所有 Thumb-2 指令但不能被所有 Thumb 指令访问。 ;9;汇编语言的语法:
PUSH {R0} ; R13=R13-4, then Memory[R13]=R0
POP {R0} ; R0=Memory[R13], 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 function;连接寄存器
R14 是连接寄存器 (LR)。 当一个子程序或函数被调用时,LR用来存储返回的程序计数器。
示例:
Main ; Main program
…
BL func1 ; Call function1
; PC = function1
; LR = next instruction
… ; program code
func1
…
BX LR ; Return;程序计数器
R15 是程序计数器。可以在汇编语言中通过R15或PC访问。
示例:
0x1000 :
MOV R0, PC ; R0 = 0x1004;6.3.2 特殊功能寄存器
在Cortex-M3/M4处理器中的特殊寄存器包括:
1. 程序状态寄存器 (PSRs)
2. 中断屏蔽寄存器(PRIMASK, FAULTMASK, and BASEPRI)
3. 控制寄存器 (CONTROL);程序状态寄存器 (PSRs)
程序状态寄存器可以分为三个状态寄存器:
1. 应用 PSR (APSR) [负、零、进/借、溢、饱和(用于饱和运算)]
2. 中断 PSR (IPSR)
3. 执行 PSR (EPSR) [ICI/IT: ICI指令/IT指令状态位;T总为1];中断屏蔽寄存器PRIMASK、FAULTMASK 和 BASEPRI
用来开放/禁用异常;控制寄存器
被用来定义特权级和堆栈指针的选择。这个寄存器有两位。; CONTROL[1]
在Cortex-M3中, 在处理者模式中CONTROL[1] 位总是0 (MSP)。但是, 在线程或基本级别,它可以为0或1。
CONTROL[0]
CONTRL[0] 位只在特权状态可写。
使用MRS和MSR指令来访问控制寄存器:
MRS r0, CONTROL ; Read CONTROL register into R0
MSR CONTROL, r0 ; Write R0 into CONTROL register;6.3.3 操作模式
两种模式和两种特权等级。操作模式决定处理器运行正常程序或运行异常处理程序。
;19;当CONTROL[0]=0 时,在异常处理的始末,只发生了处理器模式的转换。;21;22;栈的基本操作
在寄存器中的数据可以通过PUSH操作保存到栈内存并且通过POP操作在稍后恢复到寄存器.当PUSH/POP 指令执行时,SP 指针的值也跟着自减/自增。
主程序
原创力文档

文档评论(0)