再开始ARM920t的中断体系分析前,我们先来回忆一个中断触发时8051单片机的处理流程:
(1)保护现场
(2)cpu的pc指针自动跳转到中断向量表处找出对应的中断处理入口,即中断处理函数
(3)进入中断处理函数后首先要分辨中断源,然后进行对应的中断处理
(4)中断处理完,清除中断
(5)返回现场
中断程序的设置流程:
(1)建立中断向量表
(2)初始化中断:打开开关、设置优先级、中断模式下的堆栈指针等
(3)建立中断处理函数:汇编调用C函数
开始分析ARM920t的中断处理过程,原理和51单片机类似直接开始分析我的实验代码。
(1)保护现场
(2)cpu的pc指针自动跳转到中断向量表处找出对应的中断处理入口,即中断处理函数
(3)进入中断处理函数后首先要分辨中断源,然后进行对应的中断处理
(4)中断处理完,清除中断
(5)返回现场
中断程序的设置流程:
(1)建立中断向量表
(2)初始化中断:打开开关、设置优先级、中断模式下的堆栈指针等
(3)建立中断处理函数:汇编调用C函数
开始分析ARM920t的中断处理过程,原理和51单片机类似直接开始分析我的实验代码。
进入代码时间:
File:head.S
.extern main
.text
.global _start
_start:
@******************************************************************************
@ (1)建立中断异常向量表:每一条指令占用4个字节的空间
@******************************************************************************
b Reset @ 0x00:(有使用)启动复位也是一种特殊的“异常”
HandleUndef:
b HandleUndef @ 0x04: 未定义指令中止模式的向量地址
HandleSWI:
b HandleSWI @ 0x08: 管理模式的向量地址,通过SWI指令进入此模式
HandlePrefetchAbort:
b HandlePrefetchAbort @ 0x0c: 指令预取终止导致的异常的向量地址
HandleDataAbort:
b HandleDataAbort @ 0x10: 数据访问终止导致的异常的向量地址
HandleNotUsed:
b HandleNotUsed @ 0x14: 保留
b HandleIRQ @ 0x18: (有使用)中断模式的向量地址
HandleFIQ:
b HandleFIQ @ 0x1c: 快中断模式的向量地址
Reset:
ldr sp, =4096 @ 设置栈指针,以下都是C函数,调用前需要设好栈
bl disable_watch_dog @ 关闭WATCHDOG,否则CPU会不断重启
msr cp