ARM架构的外部中断介绍(S5PV210芯片)

1、外部中断介绍

在这里插入图片描述

(1)中断源的划分:内部中断和外部中断。所谓内部中断和外部中断,是根据中断源来自Soc内部还是外部,
(1)比如串口、定时器等都是Soc内部自带的,所以触发的中断都是内部中断;
(2)给Soc外接一个烟雾报警器,通过GPIO引脚和Soc相连,烟雾报警器通过GPIO引脚向Soc发送中断信号,此时烟雾报警器属于Soc的外部器件,所以触发的中断就是外部中断;
(3)S5PV210芯片支持32个外部中断,其中外部中断16-31共享一个中断编号16,在编程时需要区分;
(4)中断相关更详细的知识参考博客:《ARM架构的中断机制详解(S5PV210芯片)》

2、外部中断的工作方式

(1)外部中断通过GPIO和Soc相连,通过GPIO引脚向Soc发送中断信号;
(2)GPIO是复用的,有多种模式,所以需要先把GPIO设置成外部中断模式;
补充:GPIO相关知识参考博客:《ARM芯片学习(S5PV210开发)——GPIO控制LED》

3、外部中断的触发方式

(1)前面介绍了外部中断是通过GPIO引脚触发,GPIO引脚就是检测电平的变化,其中就涉及到怎样的电平变化会被认为是触发了中断;
(2)电平触发:检测当前GPIO引脚的电平是否满足触发中断的条件,如果满足就会一直触发。比如设置成低电平触发模式,则当Soc检测到GPIO引脚是低电平就会触发中断;
(3)边沿触发:下降沿触发、上升沿触发、双边沿触发。边沿触发是检测GPIO引脚是否动态发生了某种变化,当GPIO引脚上的电平发生了对应的变化才会触发;

4、寄存器介绍

4.1、外部中断控制寄存器

在这里插入图片描述

(1)外部中断控制器每4位对应一个外部中断,其中3位有效,一位保留,32个外部中断对应4个外部中断控制器;
(2)外部中断控制设置外部中断的触发方式;

4.2、外部中断挂起寄存器

在这里插入图片描述

(1)外部中断挂起寄存器类似于状态寄存器,当外部中断发生时,硬件会自动将对应位置1,我们在中断处理程序中去查询挂起寄存器就知道是哪个外部中断源发生中断;
(2)当我们处理完中断后,需要将中断挂起寄存器清零;

4.3、外部中断使能寄存器

在这里插入图片描述

寄存器的低8位有效,每一位对应一个外部中断,写0表示使能中断;

5、外部中断实际案例分析

5.1、硬件原理图

在这里插入图片描述
在这里插入图片描述

(1)上面是按键的原理图,总共6个按键,分别对应于外部中断编号EINT2、EINT3、EINT16、EINT17、EINT18、EINT19;
(2)通过原理图可以看到外部中断对应的GPIO引脚分别是GPH0_2、GPH0_3、GPH2_0-GPH2_3;
(3)我们需要把GPIO引脚的模式设置成外部中断模式;

5.2、设置GPIO引脚的模式

在这里插入图片描述

(1)通过设置GPIO引脚的控制寄存器,将GPIO引脚的模式设置成外部中断模式;
(2)比如上面的寄存器说明中,只需要把对应GPIO引脚的控制位写成1111即可;

5.3、初始化按键的外部中断

// 以中断方式来处理按键的初始化
void key_init_interrupt(void)
{
	// 1. 外部中断对应的GPIO模式设置
	rGPH0CON |= 0xFF<<8;		// GPH0_2 GPH0_3设置为外部中断模式
	rGPH2CON |= 0xFFFF<<0;		// GPH2_0123共4个引脚设置为外部中断模式
	
	// 2. 中断触发模式设置
	rEXT_INT_0_CON &= ~(0xFF<<8);	// bit8~bit15全部清零
	rEXT_INT_0_CON |= ((2<<8)|(2<<12));		// EXT_INT2和EXT_INT3设置为下降沿触发
	rEXT_INT_2_CON &= ~(0xFFFF<<0);
	rEXT_INT_2_CON |= ((2<<0)|(2<<4)|(2<<8)|(2<<12));	
	
	// 3. 中断允许
	rEXT_INT_0_MASK &= ~(3<<2);			// 外部中断允许
	rEXT_INT_2_MASK &= ~(0x0f<<0);
	
	// 4. 清挂起,清除是写1,不是写0
	rEXT_INT_0_PEND |= (3<<2);
	rEXT_INT_2_PEND |= (0x0F<<0);
}

结合前面介绍的寄存器来理解外部中断的初始化;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

正在起飞的蜗牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值