微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > S3C2410启动代码详解(1)

S3C2410启动代码详解(1)

时间:11-11 来源:互联网 点击:

来判断中断源 并根据优先级关系再跳到对应中断源的处理代码中

MACRO
$HandlerLabel HANDLER $HandleLabel //
$HandlerLabel
sub sp,sp,#4;减少sp(预留一个字,用于存放转跳地址)
stmfd sp!,{r0};把工作寄存器压入栈(lr does not push because it return to original address)
ldr r0,=$HandleLabel ;将HandleXXX的址址放入r0
ldr r0,[r0];把HandleXXX所指向的内容(也就是中断程序的入口)放入r0
str r0,[sp,#4];把中断服务程序(ISR)压入栈,保存在高一个地址预留的空间中,但SP没变。
ldmfd sp!,{r0,pc} ;用出栈的方式恢复r0的原值和为pc设定新值(也就完成了到ISR的转跳);

ADS仅支持FD(满递减)型堆栈,故只能用stmfd和ldmfd
MEND

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top