这是根据韦东山的关于中断的代码改成在mini2440板子上可以运行的代码。
以下是5个文件的所有内容:
@是注释符!!
head.S文件内容:
@**************************************************************************
@ File:head.S
@ 功能:初始化,设置中断模式、系统模式的栈,设置好中断处理函数
@**************************************************************************
.extern main
.text
.global _start
_start:
@**************************************************************************
@ 中断向量,本程序中,除Reset和HandleIRQ外,其他异常都没有使用
@**************************************************************************
@0x00地址处的指令为"b Reset",在系统复位后,这条指令将跳去执行标号"Reset"开始的代码
b Reset
@0x04:未定义指令终止模式的向量地址
HandleUndef:
b HandleUndef
@0x08:管理模式的向量地址,通过SWI指令进入此模式
HandleSWI:
b HandleSWI
@0x0c:指令预取终止导致的异常的向量地址
HandlePrefetchAbort:
b HandlePrefetchAbort
@0x10:数据访问终止导致的异常的向量地址
HandleDataAbort:
b HandleDataAbort
@0x14:保留
HandleNotUsed:
b HandleNotUsed
@0x18:中断模式的向量地址
b HandleIRQ
@0x1c:快中断模式的向量地址
HandleFIQ:
b HandleFIQ
Reset:
ldr sp,=4096
@设置栈指针,以下都是C函数,调用前需要设好栈。栈是用 @来保存C函数的变量和返回地址
bl disable_watch_dog @关闭WATCHDOG,否则CPU会不断重启
msr cpsr_c,#0xd2 @进入中断模式
ldr sp,=3072 @设置中断模式的栈指针,这里的sp寄存器是sp_irq