登录
首页 嵌入式系统 嵌入式系统
回帖 发帖
正文

主题:[飞凌]S3C2440中断处理流程

点击:737 回复:2

本文转引自 飞凌嵌入式 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取值返回
10-07-13 10:42
飞凌FL2440开发板全新升级
1.增加4M NORFlash
2.赠送飞凌嵌入式配套开发教程丛书
3.标配3.5寸真彩触摸液晶屏价格价格仅售578元
10-07-15 16:22
飞凌嵌入式官网: www.witech.com.cn
10-07-28 13:43

工控新闻

更多新闻资讯