S3C2440中断处理

一、中断处理机制概述

中断是CPU在执行程序过程中,遇到急需处理的事件时,暂时停止当前程序的执行,转而执行处理该事件的中断服务程序,并在处理完毕后返回原程序继续执行的过程。S3C2440提供了丰富的中断源,包括内部中断和外部中断,以及支持子中断的功能。

二、中断处理得流程

上图为中断处理的框图,首先中断源分为有子中断和无子中断两类;
(1)当有子中断时,SUBSRCPND和SRCPND会自动置位,紧接着需要将中断屏蔽寄存器和次级中断屏蔽寄存器(SUBMASK和INTMSK以及INTSUBMSK设置为0)使能(开启中断服务),此时表明中断设置成功;
接下来使用INTOFFSET中断偏移寄存器可以准确定位到中断处理函数的地址处,进而进行中断处理;需要注意的是在中断处理函数中,当处理完业务之后,必须将之前因中断产生而置位的中断标志位清除(一般写入1即可),顺序必须遵循如上框图,从左至右,依次清除;
(2)无子中断的处理过程和有子中断的基本一致,省略掉子中断的那一部分即可;

二、中断实现

外部中断:通过引脚接收
S3C2440有24个外部中断引脚
EXTINT0 —》设置信号
EINTMASK–》信号使能
EINTPEND–》 信号标志

 

 

 

void deal_eint8_23(void)
{
	 if(EINTPEND & (1 << EINT8))
	 {
		EINTPEND |= (0x01 << EINT8);
	 }
}

void deal_irq_c(void)
{
	unsigned int irq_num = INTOFFSET;
	switch(irq_num)
	{
		case EINT8_23:
		 deal_eint8_23();
		break;
		default:
		break;
	}

	SRCPND |= (1 << irq_num);
	INTPND = INTPND;
}

void eint8_init(void)
{
	//配置GPG0功能位eint8
	GPGCON &= ~(0x3 << 0);
	GPGCON |= (0x2 << 0);

	//设置eint8的触发方式
	EXTINT1 &= ~(0x7 << 0);
	EXTINT1 |= (0x2 << 0);

	//使能eint8
	EINTMASK &= ~(0x1 << 8);

	//使能eint8_23
	INTMSK &= ~(0x1 << 5);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值