ARM 中断--IRQ and FIQ配置--外部配置
ARM 中断--IRQ and FIQ配置--外部配置
中断分为外部中断和定时器中断;
中断源都是有一个触发条件,条件满足就会产生中断。不同的中断源触发条件不一样
ARM中中断分为两种:FIQ(fast interrupt request)快速中断请求,IRQ(interrupt requrest)一般的中断请求
为什么FIQ比IRQ的中断响应更快?
在ARM体系中,FIQ的优先级比IRQ高,FIQ优先级为3,IRQ优先级为4,FIQ和IRQ是中断的两种不同类型,FIQ比IRQ有更多的分组寄存器,在中断响应的时候,就不要入栈出栈寄存器。
S5PV210系统中的中断分层:
外部中断/定时器 -> 中断控制器 -> 内核
VECTORED INTERRUPT CONTROLLER 向量控制中断器 VIC
向量中断:每一个中断源都有自己的入口地址/地址寄存器
S5PV210 中断控制器的特点:
分为四种向量中断控制器、支持93种一般中断、有固定的优先级但是可以设置优先级、中断源可以设置为FIQ或者IRQ
1)设置外部中断先由管脚的属性开始设置,在GP管脚的属性设置中有EXT_INT【*】选项
例如: GPH2CON[2] 控制的0-3位全部置为1,1111=EXT_INT[16],第16号外部中断
2)设置外部中断的触发方式,根据EXT_INT[16]被哪一个寄存器所管,可以从手册查,EXT_INT_2_CON控制着外部中断16到23号,然后设置EXT_INT_2_CON就可以设置外部中断触发方式了(高电平、低电平、下降沿、上升沿、下降上升沿)。
3)设置外部中断屏蔽寄存器,EXT_INT_n_MASK,这个寄存器用来设置屏蔽或者不屏蔽外部中断的信号,16号外部中断由EXT_INT_2_MASK控制,设置该寄存器打开或者关闭,1关闭0打开,默认为关闭,此为保护措施
4)设置外部中断判断寄存器,用来判断外部中断是否已经发生,发生之后消除中断,查阅同上理,EXT_INT_2_PEND,可读可写寄存器,有中断产生寄存器自动置为1,那么在中断服务程序之后就要再次手动置1用来消除中断!
5)设置中断源选择寄存器,VICINTSELECT,选择中断源是FIQ还是IRQ,那么怎么知道我们控制的中断信号是属于VIC多少呢?可以查手册560页,位设置总共有32位,0为IRQ1为FIQ,每一位都代表着是一个中断源
6)设置VICIRQSTATUS,判断IRQ是否发生的寄存器,只读,0中断没有发生1中断已经发生
7)设置VICINTENABLE,中断使能寄存器,可读可写,1为使能中断,0为无效写入,因为初始化状态下所有中断都是关闭的
外部中断四个按键低电平触发控制四个LED
#include "int.h"
int flag=4;
void int_init( void);
void intc_setvectaddr(unsigned long intnum, void (*handler)(void));
void intc_clearvectaddr(void);
void intc_enable(unsigned long intnum);
void isr_key(void)
{
if((EXT_INT_3_PEND&0x1)==1)
GPJ2DAT ^= (1<<0); //toggle
if(((EXT_INT_3_PEND>>1)&0x1)==1)
GPJ2DAT ^= (1<<1); //toggle
if(((EXT_INT_3_PEND>>2)&0x1)==1)
GPJ2DAT ^= (1<<2); //toggle
if(((EXT_INT_3_PEND>>3)&0x1)==1)
GPJ2DAT ^= (1<<3); //toggle
intc_clearvectaddr();
EXT_INT_3_PEND |= 0XF<<0;
}
int main(void)
{
GPJ2CON &=~(0xffff);
GPJ2CON |= (0x1111);
int_init();
GPH3CON = (0XFFFF);
EXT_INT_3_CON &=~(0XFFF);//低电平触发
intc_setvectaddr(NUM_EINT16_31, isr_key);
EXT_INT_3_MASK &= ~(0xF<<0);//不屏蔽中断
intc_enable(NUM_EINT16_31);
while (1);
}
首先配置GPIOCON寄存器然后初始化然后设置外部触发模式为低电平触发,设置中断服务程序,不屏蔽中断(因为系统默认是屏蔽中断的)
initial state初始状态为1 那么就是屏蔽状态,如果要使用中断那么就要设定为0
之后就是初始化中断。
在中断服务函数当中可以根据PEND函数来判断是哪一个按键触发了中断,然后需要把四个VIC地址写零
之后再是把PEND写1置零。
值得注意的是系统判断中断有没有并不是看到底有没有触发,而是看 EXT_INT_n_PEND的位值判断,如果是 1 那么就是有中断没有就是没中断,如果在中断服务程序中屏蔽掉PEND函数的置1清中断的操作的话,那么就会一直进入到中断服务程序当中!
转载地址:http://www.eeworld.com.cn/mcu/2018/ic-news071640340.html
ARM 中断--IRQ and FIQ配置--外部配置相关推荐
- SpringBoot_配置-外部配置加载顺序
接下来我们再来看SpringBoot的一个特点,外部配置的加载顺序,也就是说,SpringBoot我们要写一些配置,配置可以写在我们的配置文件,application.properties,放到类路径 ...
- arm中断保护和恢复_ARM中断异常处理的返回
举个小例子,下面是一段ARM汇编代码: 地址 指令 0x3000 BL add 0x3004 MOV r0,#0 0x3008 MOV r1,#1 0x300C MOV r2,#2 AREA test ...
- 二、SpringBoot配置-简述配置加载原理
springboot使用一个全局配置文件 application.properties application.yml 配置文件放在src/main/resources目录或者类路径/config下 ...
- IRQ和FIQ中断的区别
FIQ和IRQ是两种不同类型的中断,ARM为了支持这两种不同的中断,提供了对应的叫做FIQ和IRQ处理器模式(ARM有7种处理模式). 一般的中断控制器里我们可以配置与控制器相连的某个中断输入是FIQ ...
- linux工作原理fiq,笔记:linux中实现fiq模式(关于arm中断,唤醒中断)
因为sep4020的唤醒需要用到fiq模式,上网搜索了一下linux暂时不支持fiq,但是仔细查看了entry-armv.S的文件,其实linux不是不支持linux,只是不能支持太复杂的操作(这个说 ...
- ARM的SVC、IRQ和FIQ模式。
我们可以假设ARM核心有两根中断引脚(实际上是看不见的),一根叫 irq pin, 一根叫fiq pin. 在ARM的cpsr中,有一个I位和一个F位,分别用来禁止IRQ和FIQ的. 先不说中断控制器 ...
- fiq中断的入口地址_ARM中断模式(IRQ)和快速中断模式(FIQ)区别比较
概念 IRQ(Interrupt Request):指中断模式. FIQ(Fast Interrupt Request):指快速中断模式. IRQ与FIQ是ARM处理器的两种不同编程模式(ARM有7 ...
- 控制IRQ和FIQ中断的编译器内部函数 - 基于Keil MDK
置顶/星标公众号,不错过每一条消息 本文是一篇偏向底层的内容. 1.写在前面 编译器内部函数__disable_irq.__enable_irq.__disable_fiq和__enable_fiq用 ...
- fiq中断的入口地址_ARM 之FIQ(快速中断) IRQ(中断)
IRQ,FIQ定义: 这就是个普通中断,当我们程序定义了该中断,并且在程序运行的时候产生了IRQ中断,则此时的芯片是这样运行的------中断处理器吧利用IRQ请求线来高速ARM,ARM就知道有个I ...
最新文章
- docker stats命令源码分析结果
- android 之DatePicker以及TimePicker的用法
- 一个不错的shell 脚本教程 入门级
- 你的元器件为什么会无缘无故地失效了?
- U盘病毒及其相关资源的分析(patch shell32.dll)
- Infragistics netadvantage UltraGrid (UltraWinGrid) 编程手记
- 宁夏职称评计算机,宁夏专业技术人员服务平台职称评审系统:http://124.224.239.164(2)...
- 实体和电商哪个更能赚到?
- 新议题,好多年前的华为面试题
- 从0开始html前端页面开发_CSS设置图像圆角
- view 判断显示 微信_微信小程序WXML页面常用语法(讲解+示例)
- 高手对中科院考博英语的分享
- 代码比较工具三款功能强大Beyond compare、DiffMerge、WinMerge
- Android 图片压缩的几种方法
- pdf在线翻译_推荐可以pdf等格式直接在线翻译的免费工具
- php 导出excel (html),php两种导出excel的方法
- React.js+i18next实现国际化
- 若依分离版整合IJpay实现第三方支付-(微信支付篇_v2)
- php如何实现简繁体互转
- apicloud studio 怎么开启自动wifi同步?
热门文章
- 2020湖南大学考研专业课复习资料
- 首发仿拼多多源码,程序完整版+安装教程+完美运营
- 深圳市考计算机素质分数,深圳市考进面分数线要67.75分?!不然很难进面?
- 江苏,浙江一带的人有的那么富裕,他们大都是做什么的?
- cge模型可以用matlab实现么,CGE模型错误求解
- JavaScript判断是否为中文,英文,数字,符号
- MS8257 超低噪声,宽带,可选反馈电阻跨阻放大器
- 【GDSOI2017】魔兽争霸 x
- 辐射发射测试软件,如何进行电子设备的辐射发射测试
- 串口服务器跟协议转换器,串口服务器 8路RS232+RS485转TCP/IP YTNP308-CMIX