📄 expdrv.s
字号:
;**************************************************************************************************
;*
;* 作者: 胡翌博,浙江大学信电系电路与系统2001研
;*
;* 文件名:expDrv.s
;*
;* 版本: 3.2
;*
;* 功能描述:本文件包含了各个模式下的异常处理程序
;*
;* 被本文件引用的文件列表:no
;*
;* 本文件引用的文件列表:no
;*
;* 版本更迭:
;* DATE Version Author REMARKS
;* 07-20-2003 2.0 胡翌博
;* 07-27-2003 3.0 胡翌博
;* 08-15-2003 3.1 胡翌博 --文件名从intDrv.s更新为expDrv.s
;* 08-29-2003 3.2 胡翌博 --修正了swi异常处理程序中错误的代码
;**************************************************************************************************
;**************************************************************************************************
;* 异常入口:
;* Exception type Lower Higher
;* reset 0x00000000 0xFFFF0000
;* undefined 0x00000004 0xFFFF0004
;* swi 0x00000008 0xFFFF0008
;* prefetch 0x0000000c 0xFFFF000c
;* data 0x00000010 0xFFFF0010
;* reserved 0x00000014 0xFFFF0014
;* irq 0x00000018 0xFFFF0018
;* fiq 0x0000001c 0xFFFF001c
;**************************************************************************************************
;**************************************************************************************************
;* 异常优先级:
;* Exception type Priority
;* reset 1
;* data 2
;* fiq 3
;* irq 4
;* prefetch 5
;* undefined,swi 6
;**************************************************************************************************
AREA ExpDrv, CODE, READONLY
CODE32
;**************************************************************************************************
;* 将expDrv中的中断处理程序声明为全局的,便于外部文件中的程序访问
;**************************************************************************************************
EXPORT undefinedHandler
EXPORT swiHandler
EXPORT prefetchHandler
EXPORT dataHandler
EXPORT irqHandler
EXPORT fiqHandler
;**************************************************************************************************
;* Reset Handler-->0x00000000:1
;* 在init.s文件中
;**************************************************************************************************
;**************************************************************************************************
;* Undefined insturction Handler-->0x00000004:6
;**************************************************************************************************
undefinedHandler
MOVS pc,lr
;**************************************************************************************************
;* SWI Handler-->0x00000008:6
;**************************************************************************************************
swiHandler
;以下是原来错误的代码
;STMFD R13!, {R0-R2, lr} ;保存工作寄存器和返回地址
;LDR R0, [R14, #-4] ;获取SWI指令二进制编码
;BIC R0, R0, #0xFF000000 ;SWI指令二进制编码的高8位清零
;MOV R1, R0, LSR #8 ;获得低24位的SWI超级调用号
;ADR R2, swiTable ;获取SWI超级调用表的起始地址
;LDR pc, [R2, R1, LSL #2] ;跳转到相应的超级调用
;以下是修改后正确的代码
STMFD R13!, {R0-R1, lr} ;保存工作寄存器和返回地址
LDR R0, [R14, #-4] ;获取SWI指令二进制编码
BIC R0, R0, #0xFF000000 ;SWI指令二进制编码的高8位清零
ADR R1, swiTable ;获取SWI超级调用表的起始地址
LDR pc, [R1, R0, LSL #2]
drtReturn
LDMFD R13!, {R0-R2, pc}^ ;恢复现场,直接退出异常模式
softReset
LDR r0, =0x03FF5000 ;复位前熄灭所有LED
LDR r1, =0x000000FF
STR r1, [r0]
LDR r0, =0x03FF5008
LDR r1, =0x000000FF
STR r1, [r0]
LDR pc, =0x00000000 ;软复位重新执行
swiTable
DCD drtReturn
DCD softReset
;**************************************************************************************************
;* Prefetch abort Handler-->0x0000000C:5
;**************************************************************************************************
prefetchHandler
SUBS pc,lr,#4
;**************************************************************************************************
;* Data abort Handler-->0x00000010:2
;**************************************************************************************************
dataHandler
SUBS pc,lr,#8
;**************************************************************************************************
;* FIQ Handler-->0x00000018:3
;**************************************************************************************************
fiqHandler
SUBS pc,lr,#4
;**************************************************************************************************
;* IRQ Handler-->0x0000001C:4
;**************************************************************************************************
irqHandler
SUBS pc,lr,#4
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -