历史上的今天
今天是:2025年03月29日(星期六)
2020年03月29日 | 初始化ARM处理器各模式下的堆栈指针SP(R13)
2020-03-29 来源:eefocus
程序设计思路:通过状态寄存器与通用寄存器之间数据传输指令MRS/MSR实现,修改时应采用“读取-修改-写回”三个步骤来实现。每次只需修改相应的域即可,如本次程序只修改C控制域。同时应注意系统模式与用户模式共用SP,只需初始化其一即可。
程序代码如下:
(1)在GNU ARM开发环境下编程:
.equ _ISR_STARTADDRESS, 0xC7FF000 @设置栈的内存基地址
.equ UserStack, _ISR_STARTADDRESS @用户模式堆栈地址0x7FF000
.equ SVCStack, _ISR_STARTADDRESS+256 @管理模式堆栈地址0x7FF100
.equ UndefStack, _ISR_STARTADDRESS+256*2
.equ AbortStack, _ISR_STARTADDRESS+256*3
.equ IRQStack, _ISR_STARTADDRESS+256*4
.equ FIQ Stack, _ISR_STARTADDRESS+256*5
.equ USERMODE, 0x10
.equ FIQMODE, 0x11
.equ IRQMODE, 0x12
.equ SVCMODE, 0x13
.equ ABORTMODE, 0x17
.equ UNDEFMODE, 0x1B
.equ SYSMODE, 0x1F
.equ MODEMASK, 0x1F
.global _start
.text
_start:
MRS R0, CPSR @读取当前CPSR
BIC R0, R0, #MODEMASK @清除模式位
#设置用户模式下的SP
ORR R1, R0, #SYSMODE
MSR CPSR_c, R1
LDR SP, =UserStack
#设置未定义模式下的SP
ORR R1, R0, #UNDEFMODE
MSR CPSR_c, R1
LDR SP, =UndefStack
#设置终止模式下的SP
ORR R1, R0, #ABORTMODE
MSR CPSR_c, R1
LDR SP, =AbortStack
#设置管理模式下的SP
ORR R1, R0, #SVCMODE
MSR CPSR_c, R1
LDR SP, =SVCStack
#设置IRQ模式下的SP
ORR R1, R0, #IRQMODE
MSR CPSR_c, R1
LDR SP, =IRQStack
#设置FIQ模式下的SP
ORR R1, R0, #FIQMODE
MSR CPSR_c, R1
LDR SP, =FIQStack
Stop:
B Stop
.end
(2)程序执行结果如下:
SP_usr=0xC7FF000
SP_svc=0xC7FF100
SP_und=0xC7FF200
SP_abt=0xC7FF300
SP_irq=0xC7FF400
SP_fiq=0xC7FF500
史海拾趣
|
目前嵌入式计算机系统应用呈现多样化、小型化、多层次的趋势,在工业现场和军事用途中扮演着越来 越重要的角色。随着各种应用对操作系统和软件要求的日益提高,使得具有广泛适应性的PC构架的嵌入 式计算机系统倍受青睐。尤其是Compact PCI总 ...… 查看全部问答> |
|
现场会有很多DSP/FPGA相关行业工程师参加,欢迎参加交流哈~~~ 内容:1、C6000 DSP软件开发环境CCS介绍) 2、FPGA典型应用领域及解决方案 ...… 查看全部问答> |
|
平台:三星6410 + wince6.0 如何将三星的硬件解码加到Directshow里面. 三星提供的MFCDecoderFilter加了上去好像没用. 请各位指点.… 查看全部问答> |
|
求教 什么ok2440开发板上电后进不了系统,触摸屏上只有几种颜色在变化。前阶段开发板还可以用的,放了一段时间后怎么会出现上面的问题?我该怎么做? 谢谢了… 查看全部问答> |
|
由于我用adobe reader看不了论坛里下的那个电路图,就按照下的说明书上的图画了一个,顺便把原理图库也发上来。有于画的时间比较仓促,有错误的地方请大家多包涵!封装库我有时间再弄! 本人用的是designer6.8版本。… 查看全部问答> |




