您现在所在的是:

嵌入式系统

回帖:2个,阅读:737 [上一页] [1] [下一页]
1203
TE2410
文章数:102
年度积分:50
历史总积分:1203
注册时间:2007/4/27
发站内信
发表于:2010/7/13 10:42:06
#0楼
本文转引自 飞凌嵌入式 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取值返回
企业精神
※ 注重信誉、敬业、务实、高质、高效
※ 以一流的技术,提供专业的服务
※ 为中国嵌入式技术的传播和发展作出贡献
1203
TE2410
文章数:102
年度积分:50
历史总积分:1203
注册时间:2007/4/27
发站内信
发表于:2010/7/15 16:22:35
#1楼
飞凌FL2440开发板全新升级
1.增加4M NORFlash
2.赠送飞凌嵌入式配套开发教程丛书
3.标配3.5寸真彩触摸液晶屏价格价格仅售578元
企业精神
※ 注重信誉、敬业、务实、高质、高效
※ 以一流的技术,提供专业的服务
※ 为中国嵌入式技术的传播和发展作出贡献
1203
TE2410
文章数:102
年度积分:50
历史总积分:1203
注册时间:2007/4/27
发站内信
发表于:2010/7/28 13:43:10
#2楼
飞凌嵌入式官网: www.witech.com.cn
企业精神
※ 注重信誉、敬业、务实、高质、高效
※ 以一流的技术,提供专业的服务
※ 为中国嵌入式技术的传播和发展作出贡献

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

93.6006