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