设为首页 加入收藏

TOP

S3C2410A的异常机制[中断处理]
2014-11-24 14:21:35 来源: 作者: 【 】 浏览:0
Tags:S3C2410A 异常 机制 中断 处理

以YLE2410A开发板为例,说说ARM的异常是如何处理滴。


;Pre-defined constants


USERMODE EQU 0x10


FIQMODE EQU 0x11


IRQMODE EQU 0x12


SVCMODE EQU 0x13


ABORTMODE EQU 0x17


UNDEFMODE EQU 0x1B


MODEMASK EQU 0x1F


NOINT EQU 0xC0



;The location of stacks


UserStack EQU (_STACK_BASEADDRESS-0x3800) ;0x33ff4800 ~


SVCStack EQU (_STACK_BASEADDRESS-0x2800) ;0x33ff5800 ~


UndefStack EQU (_STACK_BASEADDRESS-0x2400) ;0x33ff5c00 ~


AbortStack EQU (_STACK_BASEADDRESS-0x2000) ;0x33ff6000 ~


IRQStack EQU (_STACK_BASEADDRESS-0x1000) ;0x33ff7000 ~


FIQStack EQU (_STACK_BASEADDRESS-0x0) ;0x33ff8000 ~




首先当然是进行堆栈初始化啦。。。有7种不同的异常处理,因为它们的堆栈是独立滴,所以需要单独进行堆栈分配以及初始化。初始化代码如下:



InitStacks


;Don't use DRAM,such as stmfd,ldmfd......


;SVCstack is initialized before


;Under toolkit ver 2.5, 'msr cpsr,r1' can be used instead of 'msr cpsr_cxsf,r1'


mrs r0,cpsr


bic r0,r0,#MODEMASK


orr r1,r0,#UNDEFMODE|NOINT


msr cpsr_cxsf,r1 ;UndefMode


ldr sp,=UndefStack



orr r1,r0,#ABORTMODE|NOINT


msr cpsr_cxsf,r1 ;AbortMode


ldr sp,=AbortStack




orr r1,r0,#IRQMODE|NOINT


msr cpsr_cxsf,r1 ;IRQMode


ldr sp,=IRQStack



orr r1,r0,#FIQMODE|NOINT


msr cpsr_cxsf,r1 ;FIQMode


ldr sp,=FIQStack




bic r0,r0,#MODEMASK|NOINT


orr r1,r0,#SVCMODE


msr cpsr_cxsf,r1 ;SVCMode


ldr sp,=SVCStack



;USER mode has not be initialized.



mov pc,lr




做好这个初始化之后呢,当然就是IRQ的分配了。就说说普通的IRQ吧,一般在WINCE下很难用到FIQ滴。嘿嘿。。。一家之言。


因为ARM有7种不同的异常处理,所以:




LTORG


HandlerFIQ HANDLER HandleFIQ


HandlerIRQ HANDLER HandleIRQ


HandlerUndef HANDLER HandleUndef


;HandlerUndef


; sub sp, sp, #4 ;decrement sp(to store jump address)


; stmfd sp!, {r14} ;PUSH the work register to stack(lr does't push because it return to original address)


; ldr r0, =HandleUndef ;load the address of HandleXXX to r0


; ldr r0, [r0] ;load the contents(service routine start address) of HandleXXX


; str r0, [sp, #4] ;store the contents(ISR) of HandleXXX to stack


; ldmfd sp!, {r0, pc}


HandlerSWI HANDLER HandleSWI


HandlerDabort HANDLER HandleDabort


HandlerPabort HANDLER HandlePabort


也是需要7种不同的中断向量了哦。这个和单片机是差不多滴。。。一般都是放在前面撒。


异常服务程序


这里不用中断(interrupt)而用异常(exception),毕竟中断只是异常的一种情况,


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇S3C2410支持64M到1GB的NAND FLASH 下一篇ARM Cortex-M3 B[x]指令详解

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: