ARM·中断控制器
之前在基础篇里面看过中断概念的视频,不过因为介绍的十分繁琐,效果不是很好。今天看了高级开发篇,决定把中断的内容简化一些。
我觉得可以把这篇笔记分成2个区,寄存器区和代码区。寄存器区方便以后查看,代码区方便对中断控制的分析
@******************************************************************************
@ File:head.S
@ 功能:初始化,设置中断模式、管理模式的栈,设置好中断处理函数
@******************************************************************************
.extern
.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管脚初始化,把中断函数初始化 ;
#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
#define GPF2_eint
#define GPG3_eint
#define GPF0_msk
#define GPF2_msk
#define GPG3_msk
void disable_watch_dog(void)
{
}
void init_led(void)
{
}
void init_irq( )
{
ARM中断控制 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)