设为首页 加入收藏

TOP

嵌入式学习之ARM中断编程
2014-11-24 03:17:20 来源: 作者: 【 】 浏览:1
Tags:嵌入式 习之 ARM 中断 编程

一、中断控制寄存器


ARM微处理器支持7种工作模式,分别为:


1. 用户模式(Usr) 用于正常执行程序


2. 快速中断模式(FIQ) 用于高速数据传输


3. 外部中断模式(IRQ) 用于通常的中断处理


4. 管理模式(SVC) 操作系统使用的保护模式(高权限),复位和软件中断进入


5. 数据访问终止模式(abt) 当数据或指令预取终止时进入该模式,可用于虚拟内存及存储保护


6. 系统模式(sys) 运行均有特权的操作系统任务


7. 未定义指令终止模式(und) 用于支持硬件协处理器的软件仿真(浮点、微量运算)


通过软件编程可以实现各个模式之间进行切换,各个模式所占的寄存器如下图所示:



每种中断模式除了共同的寄存器R0~R15这16个寄存器之外,还包括CPSR即当前程序状态寄存器(current programe status register),CPSR中的各个位用于指明当前程序所处的中断状态和模式,寄存器的各位作用如下:



M0~M4用于表示程序当前工作的中断模式,对应于如下各个工作模式:



T位用于指定当前CPU是出去Thumb(16位)还是处于ARM(32位)状态;


N位:N=1表示运算的结果为负数;N=0 表示运算的结果为正数或零;


Z 位:Z=1 表示运算的结果为零;Z=0表示运算的结果为非零;


C位:进位、借位标记位:当运算结果产生了进位时(无符号数溢出),C=1,否则C=0。


二、中断控制编程


void init_irq( )
{
// S2,S3对应的2根引脚设为中断引脚 EINT0,ENT2
GPFCON &= ~(GPF0_msk | GPF2_msk);
GPFCON |= GPF0_eint | GPF2_eint;


// S4对应的引脚设为中断引脚EINT11
GPGCON &= ~GPG3_msk;
GPGCON |= GPG3_eint;

// 对于EINT11,需要在EINTMASK寄存器中使能它
EINTMASK &= ~(1<<11);

/*
* 设定优先级:
* ARB_SEL0 = 00b, ARB_MODE0 = 0: REQ1 > REQ3,即EINT0 > EINT2
* 仲裁器1、6无需设置
* 最终:
* EINT0 > EINT2 > EINT11即K2 > K3 > K4
*/
PRIORITY = (PRIORITY & ((~0x01) | (0x3<<7))) | (0x0 << 7) ;


// EINT0、EINT2、EINT8_23使能
INTMSK &= (~(1<<0)) & (~(1<<2)) & (~(1<<5));
}



void int_init(void)
{
rSRCPND = rSRCPND; // clear all interrupt
rINTPND = rINTPND; // clear all interrupt

// nIntMode='3';
rGPFCON = (rGPFCON & 0xffcc) | (1<<5) | (1<<1); // PF0/2 = EINT0/2
rGPGCON = (rGPGCON & 0xff3fff3f) | (1<<23) | (1<<7); // PG3/11 = EINT11/19

pISR_EINT0=(UINT32T)isrEINT0;//int0_int; //isrEINT0;
pISR_EINT8_23=(UINT32T)isrEINT11_19;//int11_int; //isrEINT11_19;


rEINTPEND = 0xffffff;
rSRCPND = BIT_EINT0 | BIT_EINT8_23; //to clear the previous pending states
rINTPND = BIT_EINT0 | BIT_EINT8_23;

rEXTINT0 = (rEXTINT0 & ~((7<<8) | (0x7<<0))) | 0x2<<8 | 0x2<<0; // EINT0/2=falling edge triggered
rEXTINT1 = (rEXTINT1 & ~(7<<12)) | 0x2<<12; //EINT11=falling edge triggered


rEINTMASK &= ~(1<<11);
rINTMSK &= ~(BIT_EINT0 | BIT_EINT8_23);
}


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇通过Android trace文件分析死锁ANR 下一篇嵌入式学习之ARM中断

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·哈希表 - 菜鸟教程 (2025-12-24 20:18:55)
·MySQL存储引擎InnoDB (2025-12-24 20:18:53)
·索引堆及其优化 - 菜 (2025-12-24 20:18:50)
·Shell 中各种括号的 (2025-12-24 19:50:39)
·Shell 变量 - 菜鸟教 (2025-12-24 19:50:37)