0
点赞
收藏
分享

微信扫一扫

【ARM】中断控制 ——第六篇

眼君 2022-10-10 阅读 52

6d63dc5dd3994f75ae53a20768cc10f6.gif

目录

1、中断概述

1.1、什么是中断?

1.2、中断作用

1.3、中断控制模块

2、中断源配置

3、GIC(中断控制模块)

4、中断信号设置

5、操作步骤

6、完整程序代码


1、中断概述

1.1、什么是中断?

1.2、中断作用

1.3、中断控制模块

        中断控制模块:GPIO外部中断寄存器(中断触发条件)、GIC中断控制器 (中断管理)、处理器(响应中断)、IRQ中断和FIQ中断(两种中断方式)。

        中断可以分为:外部中断和内部中断。

2、中断源配置

注意:当中断处理完成后,需要把状态清空

3、GIC(中断控制模块)

        分发管脚使能(端口管脚使能):使能相应的中断到分发器,GIC能够接收对应中断,把中断打开。

4、中断信号设置

5、操作步骤

6、完整程序代码

#include "exynos_4412.h"
#include "uart.h"//调用串口初始化库

void do_irq()
{
//获取中断号
//ICCIAR
int id = 0;
id = CPU0.ICCIAR;
printf("中断号为:%d\n",id); //执行中断程序,打印该 id

//清除GPIO标志
EXT_INT41_PEND |= 1<<1;

//清除GIC标志
ICDICPR.ICDICPR1 |= 1<<25;

//中断标志
CPU0.ICCEOIR = CPU0.ICCEOIR & ~(0x3ff) | id;
}

void key_init()
{
//GPIO设置中断
GPX1.CON |= 0xf<<4;//引脚为中断输入

//配置上升沿为中断源
EXT_INT41_CON = EXT_INT41_CON & ~(0x7<<4) | 0x3<<4;

//使能引脚中断
EXT_INT41_MASK ~(1<<1);

//GIC设置
ICDDCR = 1;//GIC使能

//端口使能,引脚中断能够进入GIC, 57中断号(25管脚)进行使能
ICDISER.ICDISER1 |= 1<<25;

//ICDIPR设置中断优先级
//当前按键---57号中断,配置57中断号
ICDIPR.ICDIPR14 = ICDIPR.ICDIPR14 & ~(0xff<<8) | 1<<8;

//产生中断,送入对应CPU
ICDIPTR.ICDIPTR14 = ICDIPTR.ICDIPTR14 & ~(0xff<<8) | 0x1<<8;

//cpu中断通道使能,开启GIC到CPU的中断通道
CPU0.ICCICR = 1;

//CPU过滤优先级中断
CPU0.ICCPMR = 255;

}

void delay()//延时函数
{
int i,j;
for(i = 0;i < 1000;i++)
{
for(j = 0;j <1000;j++);
}
}

int main()
{
uart_init();//串口初始化

key_init();//按下k2按键,执行中断

while(1)//正常执行
{
printf("------程序执行中------\n");
delay();
}
return 0;
}

        当按下k2按下按键释放后(上升沿触发),就会暂停当前执行程序,去执行中断任务程序,打印id内容。

 ✨本篇到此结束啦!欢迎点赞👍收藏❤关注😎

ade2d02221184de18874af569fd12e2c.png

举报

相关推荐

0 条评论