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配置--外部配置相关推荐

  1. SpringBoot_配置-外部配置加载顺序

    接下来我们再来看SpringBoot的一个特点,外部配置的加载顺序,也就是说,SpringBoot我们要写一些配置,配置可以写在我们的配置文件,application.properties,放到类路径 ...

  2. arm中断保护和恢复_ARM中断异常处理的返回

    举个小例子,下面是一段ARM汇编代码: 地址 指令 0x3000 BL add 0x3004 MOV r0,#0 0x3008 MOV r1,#1 0x300C MOV r2,#2 AREA test ...

  3. 二、SpringBoot配置-简述配置加载原理

    springboot使用一个全局配置文件 application.properties application.yml 配置文件放在src/main/resources目录或者类路径/config下 ...

  4. IRQ和FIQ中断的区别

    FIQ和IRQ是两种不同类型的中断,ARM为了支持这两种不同的中断,提供了对应的叫做FIQ和IRQ处理器模式(ARM有7种处理模式). 一般的中断控制器里我们可以配置与控制器相连的某个中断输入是FIQ ...

  5. linux工作原理fiq,笔记:linux中实现fiq模式(关于arm中断,唤醒中断)

    因为sep4020的唤醒需要用到fiq模式,上网搜索了一下linux暂时不支持fiq,但是仔细查看了entry-armv.S的文件,其实linux不是不支持linux,只是不能支持太复杂的操作(这个说 ...

  6. ARM的SVC、IRQ和FIQ模式。

    我们可以假设ARM核心有两根中断引脚(实际上是看不见的),一根叫 irq pin, 一根叫fiq pin. 在ARM的cpsr中,有一个I位和一个F位,分别用来禁止IRQ和FIQ的. 先不说中断控制器 ...

  7. fiq中断的入口地址_ARM中断模式(IRQ)和快速中断模式(FIQ)区别比较

     概念 IRQ(Interrupt Request):指中断模式. FIQ(Fast Interrupt Request):指快速中断模式. IRQ与FIQ是ARM处理器的两种不同编程模式(ARM有7 ...

  8. 控制IRQ和FIQ中断的编译器内部函数 - 基于Keil MDK

    置顶/星标公众号,不错过每一条消息 本文是一篇偏向底层的内容. 1.写在前面 编译器内部函数__disable_irq.__enable_irq.__disable_fiq和__enable_fiq用 ...

  9. fiq中断的入口地址_ARM 之FIQ(快速中断) IRQ(中断)

    IRQ,FIQ定义:  这就是个普通中断,当我们程序定义了该中断,并且在程序运行的时候产生了IRQ中断,则此时的芯片是这样运行的------中断处理器吧利用IRQ请求线来高速ARM,ARM就知道有个I ...

最新文章

  1. docker stats命令源码分析结果
  2. android 之DatePicker以及TimePicker的用法
  3. 一个不错的shell 脚本教程 入门级
  4. 你的元器件为什么会无缘无故地失效了?
  5. U盘病毒及其相关资源的分析(patch shell32.dll)
  6. Infragistics netadvantage UltraGrid (UltraWinGrid) 编程手记
  7. 宁夏职称评计算机,宁夏专业技术人员服务平台职称评审系统:http://124.224.239.164(2)...
  8. 实体和电商哪个更能赚到?
  9. 新议题,好多年前的华为面试题
  10. 从0开始html前端页面开发_CSS设置图像圆角
  11. view 判断显示 微信_微信小程序WXML页面常用语法(讲解+示例)
  12. 高手对中科院考博英语的分享
  13. 代码比较工具三款功能强大Beyond compare、DiffMerge、WinMerge
  14. Android 图片压缩的几种方法
  15. pdf在线翻译_推荐可以pdf等格式直接在线翻译的免费工具
  16. php 导出excel (html),php两种导出excel的方法
  17. React.js+i18next实现国际化
  18. 若依分离版整合IJpay实现第三方支付-(微信支付篇_v2)
  19. php如何实现简繁体互转
  20. apicloud studio 怎么开启自动wifi同步?

热门文章

  1. 2020湖南大学考研专业课复习资料
  2. 首发仿拼多多源码,程序完整版+安装教程+完美运营
  3. 深圳市考计算机素质分数,深圳市考进面分数线要67.75分?!不然很难进面?
  4. 江苏,浙江一带的人有的那么富裕,他们大都是做什么的?
  5. cge模型可以用matlab实现么,CGE模型错误求解
  6. JavaScript判断是否为中文,英文,数字,符号
  7. MS8257 超低噪声,宽带,可选反馈电阻跨阻放大器
  8. 【GDSOI2017】魔兽争霸 x
  9. 辐射发射测试软件,如何进行电子设备的辐射发射测试
  10. 串口服务器跟协议转换器,串口服务器 8路RS232+RS485转TCP/IP YTNP308-CMIX