ARM·中斷控制器
之前在基礎篇里面看過中斷概念的視頻,不過因為介紹的十分繁瑣,效果不是很好。今天看了高級開發(fā)篇,決定把中斷的內容簡化一些。
我覺得可以把這篇筆記分成2個區(qū),寄存器區(qū)和代碼區(qū)。寄存器區(qū)方便以后查看,代碼區(qū)方便對中斷控制的分析
【代碼分析】
@******************************************************************************
@ File:head.S
@ 功能:初始化,設置中斷模式、管理模式的棧,設置好中斷處理函數(shù)
@******************************************************************************
.extern main @extern 聲明引用main函數(shù)
.text
.global _start
_start:
@******************************************************************************
@ 中斷向量,本程序中,除Reset和HandleIRQ外,其它異常都沒有使用
@******************************************************************************
@ 0x04: 未定義指令中止模式的向量地址
HandleUndef:
@ 0x08: 管理模式的向量地址,通過SWI指令進入此模式
HandleSWI:
@ 0x0c: 指令預取終止導致的異常的向量地址
HandlePrefetchAbort:
@ 0x10: 數(shù)據訪問終止導致的異常的向量地址
HandleDataAbort:
@ 0x14: 保留
HandleNotUsed:
@ 0x18: 中斷模式的向量地址
@ 0x1c: 快中斷模式的向量地址
HandleFIQ:
Reset:
halt_loop:
HandleIRQ:
int_return:
注意:
(1)異常向量表(這里只用到了reset和IRQ異常)和各工作模式的CPRS
(2)
1.在管理模式允許中斷,在中斷模式屏蔽中斷,防止中斷嵌套;且在管理模式用來Thumb,可以對表查看,做了解。
2.在每一中異常下都必須設置堆棧指針,便于調用C函數(shù),因為pc在每種狀態(tài)下都是獨立的。
3.中斷初始化的同時,也順便將硬件GPIO管腳初始化,把中斷函數(shù)初始化 ;
【關于中斷寄存器,也就是這章的重點,也就都在中斷函數(shù)初始化 bl init_irq @ 調用中斷初始化函數(shù),在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中斷控制
評論