ARM·中断控制器
之前在基础篇里面看过中断概念的视频,不过因为介绍的十分繁琐,效果不是很好。今天看了高级开发篇,决定把中断的内容简化一些。
我觉得可以把这篇笔记分成2个区,寄存器区和代码区。寄存器区方便以后查看,代码区方便对中断控制的分析
【代码分析】
@******************************************************************************
@ File:head.S
@ 功能:初始化,设置中断模式、管理模式的栈,设置好中断处理函数
@******************************************************************************
.extern main @extern 声明引用main函数
.text
.global _start
_start:
@******************************************************************************
@ 中断向量,本程序中,除Reset和HandleIRQ外,其它异常都没有使用
@******************************************************************************
@ 0x04: 未定义指令中止模式的向量地址
HandleUndef:
@ 0x08: 管理模式的向量地址,通过SWI指令进入此模式
HandleSWI:
@ 0x0c: 指令预取终止导致的异常的向量地址
HandlePrefetchAbort:
@ 0x10: 数据访问终止导致的异常的向量地址
HandleDataAbort:
@ 0x14: 保留
HandleNotUsed:
@ 0x18: 中断模式的向量地址
@ 0x1c: 快中断模式的向量地址
HandleFIQ:
Reset:
halt_loop:
HandleIRQ:
int_return:
注意:
(1)异常向量表(这里只用到了reset和IRQ异常)和各工作模式的CPRS


(2)
1.在管理模式允许中断,在中断模式屏蔽中断,防止中断嵌套;且在管理模式用来Thumb,可以对表查看,做了解。
2.在每一中异常下都必须设置堆栈指针,便于调用C函数,因为pc在每种状态下都是独立的。
3.中断初始化的同时,也顺便将硬件GPIO管脚初始化,把中断函数初始化 ;
【关于中断寄存器,也就是这章的重点,也就都在中断函数初始化 bl init_irq @ 调用中断初始化函数,在init.c中中】
#include "s3c24xx.h"
#define GPF4_out (1<<(4*2))
#define GPF5_out (1<<(5*2))
#define GPF6_out (1<<(6*2))
#define GPF4_msk (3<<(4*2))
#define GPF5_msk (3<<(5*2))
#define GPF6_msk (3<<(6*2))
#define GPF0_eint (0x2<<(0*2))
#define GPF2_eint (0x2<<(2*2))
#define GPG3_eint (0x2<<(3*2))
#define GPF0_msk (3<<(0*2))
#define GPF2_msk (3<<(2*2))
#define GPG3_msk (3<<(3*2))
void disable_watch_dog(void)
{
}
void init_led(void)
{
}
void init_irq( )
{
}
红色部分,便是我们这章的重点内容,也就是对中断寄存器的配置,init的初始化 。

关键词:
ARM中断控制
评论