ARM Cortex-M3 学习笔记(3)
时间:11-20
来源:互联网
点击:
最近在学ARM Cortex-M3,找了本号称很经典的书“An Definitive Guide to The ARM Cortex-M3”在看。这个系列学习笔记其实就是在学习这本书的过程中做的读书笔记。
下面是个简单的例子:
PUSH {R0} ; *(--R13)=R0。R13是long*的指针
POP {R0} ; R0= *R13++
PUSH 和 POP 可以一次操作多个寄存器:
subroutine_1
PUSH {R0-R7, R12, R14} ; 保存寄存器列表
… ; 执行处理
POP {R0-R7, R12, R14} ; 恢复寄存器列表
BX R14 ; 返回到主调函数
上面的例子中顺带也用到了R14。因此就不单独讲解R14了。
MRS, ;读特殊功能寄存器的值到通用寄存器
MSR, ;写通用寄存器的值到特殊功能寄存器
程序状态寄存器在其内部又被分为三个子状态寄存器:
? 应用程序PSR(APSR)
? 中断号PSR(IPSR)
? 执行PSR(EPSR)
参看下图:
第三章 Cortex-M3 基础
这章的内容有不少是和第二章重复的。重复的部分这里就不再提了。堆栈
Cortex-M3 的堆栈是倒生的,实栈顶。也就是R13指向最后一次压入堆栈的内容。下面是个简单的例子:
PUSH {R0} ; *(--R13)=R0。R13是long*的指针
POP {R0} ; R0= *R13++
PUSH 和 POP 可以一次操作多个寄存器:
subroutine_1
PUSH {R0-R7, R12, R14} ; 保存寄存器列表
… ; 执行处理
POP {R0-R7, R12, R14} ; 恢复寄存器列表
BX R14 ; 返回到主调函数
上面的例子中顺带也用到了R14。因此就不单独讲解R14了。
特殊功能寄存器组
访问特殊功能寄存器需要用专用指令:MRS
MSR
程序状态寄存器在其内部又被分为三个子状态寄存器:
? 应用程序PSR(APSR)
? 中断号PSR(IPSR)
? 执行PSR(EPSR)
参看下图:
图 6 Cortex-M3中的程序状态寄存器(xPSR)
PRIMASK,FAULTMASK和BASEPRI 控制中断和异常的开启和屏蔽
PRIMASK = 1后只有NMI和硬fault可以响应,默认为0
FAULTMASK = 1后只有NMI和硬fault可以响应,默认为0
BASEPRI:优先级号大于等于此值的中断都被屏蔽
只有在特权级下,才允许访问这3个寄存器。
控制寄存器(CONTROL)
CONTROL[0]=1,用户级的线程模式
CONTROL[0]=0,特权级的线程模式
CONTROL[1]=1,选择使用MSP
CONTROL[1]=0,选择使用PSP
中断向量表
默认的中断向量表在地址0处,利用NVIC的重定位寄存器可以将其重定位。
另外,中断向量表的第一个向量的位置存放的是MSP的初始值。
ARMCortex-M 相关文章:
- 让ARM Cortex-M7再想一一会儿(11-26)
- ARM CORTEX-M3 内核架构理解归纳(11-21)
- ARM Cortex-M3 内核介绍(11-21)
- ARM Cortex-M3 学习笔记(4-4)(11-20)
- ARM Cortex-M3 学习笔记(4-5)(11-20)
- ARM Cortex-M3 学习笔记(4-6)(11-20)