查看: 2938|回复: 1

[飞凌]S3C2440中断处理流程

[复制链接]
发表于 2010-7-13 14:50:27 | 显示全部楼层 |阅读模式
关键词: 飞凌 , 流程
本文转引自 飞凌嵌入式 S3C2440 技术讨论区 www.witech.com.cn
粗略写了一下S3C2440的中断处理流程(以飞凌2440开发板所用bootloader代码为例),给初学者看的,希望大家多多讨论,不断改进,使其最终成为一份完善的教程!
首先定义向量表堆栈  bootloader中取0x33ffff00
        ^   _ISR_STARTADDRESS                ; _ISR_STARTADDRESS=0x33FF_FF00
HandleReset                 #   4
HandleUndef                 #   4
HandleSWI                   #   4
HandlePabort                #   4
HandleDabort                #   4
HandleReserved              #   4
HandleIRQ                   #   4
HandleFIQ                   #   4
IRQ堆栈地址为0x33ffff18,这里放中断处理函数的入口地址。
ldr        r0,=HandleIRQ       ;This routine is needed
ldr        r1,=IsrIRQ          ;IsrIRQ就是中断处理函数的入口地址
str        r1,[r0]
中断发生后程序自动从该处取值并跳转
b        HandlerIRQ        ;handler for IRQ interrupt
HandlerIRQ      HANDLER HandleIRQ
这里跳转到了IsrIRQ
IsrIRQ
        sub        sp,sp,#4       ;sp-4,预留给pc。
        stmfd        sp!,{r8-r9}        ;保护r8 r9  一会儿要用。这里没有保持r14。
        ldr        r9,=INTOFFSET        
        ldr        r9,[r9]                ;获得中断号
        ldr        r8,=HandleEINT0        ;
        add        r8,r8,r9,lsl #2        ;通过中断偏移值计算中断源
        ldr        r8,[r8]                ;取出相应中断处理函数的入口地址值
        str        r8,[sp,#8]        ;将其存在sp+8处,即刚才预留给pc的堆栈
        ldmfd        sp!,{r8-r9,pc}        ;还原r8 r9并跳转到中断处理函数
中断函数处理完后会从r14取值返回
 楼主| 发表于 2010-7-28 17:12:55 | 显示全部楼层
飞凌嵌入式 S3C2440 技术讨论区 www.witech.com.cn
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表