ARM架构的外部中断介绍(S5PV210芯片)
Posted 正在起飞的蜗牛
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);
结合前面介绍的寄存器来理解外部中断的初始化;
以上是关于ARM架构的外部中断介绍(S5PV210芯片)的主要内容,如果未能解决你的问题,请参考以下文章