此帖出自单片机论坛
最新回复
将堆栈指针的内容减去4是为了给PC留4个字节,stmfd sp!,{r0};这条指令是一条压栈操作,执行它后sp的指向的地址将会自动减。ldr r0,=$HandleLabel ldr r0,[r0];是将中断服务函数的地址装入了r0. str r0 {sp ,#4};将r0中的内容保存到sp+4指向的堆栈空间。ldmfd sp!,{r0,pc}这是一条出栈指令,堆栈指针自动更新,ISR地址比r0的地址高,(stmfd sp!,{r0};),也就是说当前SP是指向stmfd sp!,{r0}出栈时先出来的是r0内容,后是ISR的地址,将其出栈后给予PC,这样就可以处理中断服务函数子程序了。
[ 本帖最后由 daicheng 于 2009-12-18 16:13 编辑 ]
详情
回复
发表于 2009-12-18 16:10
| ||
个人签名入法国
|
||
此帖出自单片机论坛
| ||
个人签名处处留心皆学问!
|
||
| |
个人签名入法国
|
|
曾经的版主且威望大于2000,或对EEWORLD论坛有突出贡献的坛友
EEWorld Datasheet 技术支持