以s3c2440 ARM9核为例:

一:s3c2440 ARM处理器特性:

1、S3C2440支持60个中断源,含子中断源;

2、ARM9采用五级流水线方式;

3、支持外部中断和内部中断;

二、s3c2440 支持的寄存器:

2.1 外部中断寄存器

24个外部中断占用GPF0-GPF7(EINT0-EINT7),GPG0-GPG15(EINT8-EINT23)。用这些脚做中断输入,则必须配置引脚为中断,并且不要上拉。具体可参考datesheet数据手册。

寄存器:

EXTINT0-EXTINT2:分别设置EINT0—EINT7、EINT8—EINT15、EINT16—EINT23的触发方式(高电平触发、低电平触发、下降沿触发、上升沿触发)。

EINTFLT0-EINTFLT3:控制滤波时钟和滤波宽度。

EINTPEND:这个是中断挂起寄存器,清除时要写1,后面还有几个是写1清除。当一个外部中断(EINT4-EINT23)发生后,那么相应的位会被置1。为什么没有EINT0-EINT3,因为它们分别由SRCPND寄存器的后4位控制。

EINTMASK:这个简单,是屏蔽中断用的,也就是说位为1时,此次中断无效。

2.2 内部中断寄存器

内部中断有8个寄存器。

寄存器:

SUBSRCPND:当一个中断发生后,那么相应的位会被置1,表示一个中断发生了。

INTSUBMSK:与上一个是一样的,中断屏蔽寄存器。

SRCPND:当一个中断发生后,那么相应的位会被置1,表示一个或一类中断发生了。

INTMSK:用来屏蔽SRCPND寄存器所标识的中断。但只能屏蔽IRQ中断,不能屏蔽FIQ中断。

INTMOD:当INTMOD中某位被设置为1时,它对应的中断被设为FIQ,CPU将进入快速中断模式。

PRIORITY:用于设置IRQ中断的优先级。具体使用方法可参考芯片手册。

INTPND:中断优先级仲裁器选出优先级最高中断后,这个中断在INTPND寄存器中的相应位被置1,随后,CPU进入中断模式处理它。同一时间内,此寄存器只有一位被置1。

INTOFFSET:用来表示INTPND寄存器中哪位被置1了,即记录INTPND中位[x]为1的位x的值。清除INTPND、SRCPND时自动清除。

三、中断处理流程

1、中断控制器汇集各类外设发出的中断信号,然后通知CPU。

2、CPU保存当前程序的运行环境,然后调用中断服务程序(ISR),来处理中断。

3、在ISR中通过读取外设的相关的寄存器来识别中断的类型,并进行相应的处理。

4、清除中断:通过读写相关中断控制寄存器和外设相关寄存器来实现。(注意消除中断是必要的)

5、恢复被中断程序的执行环境,继续执行被中断的程序。

四、代码:

main.c

1 intmain()2 {3 ................4 //其他部分初始化

5 button_init();6 init_irq();7 while(1);8 return 0;9 }

interrupt.c

1 /*interrupt registes*/

2 #define SRCPND (volatile unsigned long *)0x4A000000

3 #define INTMOD (volatile unsigned long *)0x4A000004

4 #define INTMSK (volatile unsigned long *)0x4A000008

5 #define PRIORITY (volatile unsigned long *)0x4A00000c

6 #define INTPND (volatile unsigned long *)0x4A000010

7 #define INTOFFSET (volatile unsigned long *)0x4A000014

8 #define SUBSRCPND (volatile unsigned long *)0x4A000018

9 #define INTSUBMSK (volatile unsigned long *)0x4A00001c

10

11 #define EINTMASK (volatile unsigned long *)0x560000a4

12 #define EINTPEND (volatile unsigned long *)0x560000a8

13

14 voidinit_irq()15 {16

17 //对于EINT4,需要在EINTMASK寄存器中使能它

18 *(EINTMASK) &= ~(1<<4);19

20

21 //EINT0、EINT1、EINT2、EINT4_7使能

22 *(INTMSK) &= (~(1<<0)) & (~(1<<1)) & (~(1<<2)) & (~(1<<4));23

24 __asm__(25 /*开中断*/

26 "mrs r0,cpsr\n"

27 "bic r0, r0, #0x80\n"

28 "msr cpsr_c, r0\n"

29 :30 :31 );32 }33

34 voidhandle_int()35 {36 /*读取产生中断的源*/

37 unsigned long value = *(INTOFFSET);38

39 switch(value)40 {41 case 0: //EINT0~K4

42 led_on();43 break;44

45 case 1: //EINT1~K1

46 led_off();47 break;48

49 case 2: //EINT2~K3

50 led_on();51 break;52

53 case 4: //EINT4~K2

54 led_off();55 break;56

57 default:58 break;59 }60

61 /*中断清除*/

62 if(value == 4)63 *(EINTPEND) = (1 << 4);64 *(SRCPND) = 1 <

start.S

1 irq:

2 sub lr, lr, #4

3 stmfd sp!, {r0-r12, lr} /* 保护现场 */4 bl handle_int5 ldmfd sp!, {r0-r12, pc}^ /* 恢复现场,^表示把spsr恢复到cpsr */

五:部分代码解释:

sub lr, lr, #4

arm中断保护和恢复_ARM中断处理过程相关推荐

  1. arm中断保护和恢复_ARM中断返回的详细分析

    原标题:ARM中断返回的详细分析 在ARM体系中,通常有以下3种方式控制程序的执行流程: 1.在正常执行过程中,每执行一条ARM指令,程序计数器PC的值加4个字节:每执行一条Thumb指令,程序计数器 ...

  2. arm中断保护和恢复_ARM的中断处理详细过程

    ARM有七种异常中断类型,优先级.工作模式(有七种工作模式).地址.功能都不一样.如其中软件中断SWI优先级为6,工作模式管理模式,异常向量地址为0x00000008,功能是用户定义的中断指令,可用于 ...

  3. arm中断保护和恢复_ARM异常中断的原因及处理措施

    当ARM异常中断发生时,系统执行完当前指令后,将跳转到相应的异常中断处理程序处执行.当异常中断处理程序执行完成后,程序返回到发生中断指令的下条指令处执 行.在进入异常中断处理程序时,要保存被中断程序的 ...

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

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

  5. arm中断保护和恢复_嵌入式ARM系统异常和中断处理知识总结

    关于异常处理,分为三部分: 1. ARM异常和模式:core处理异常时的操作,几种模式介绍. 2. Vector table: 3. 异常优先级 4. lr偏移:几种异常如何返回 异常和中断处理简介 ...

  6. arm中断保护和恢复_浅谈ARM处理器的七种异常处理

    昨天的文章,我们谈了ARM处理器的七种运行模式,分别是:用户模式User(usr),系统模式System(sys),快速中断模式(fiq),管理模式Supervisor(svc),外部中断模式(irq ...

  7. linux中断系统那些事之----中断处理过程【转】

    转自:http://blog.csdn.net/xiaojsj111/article/details/14129661 以外部中断irq为例来说明,当外部硬件产生中断时,linux的处理过程.首先先说 ...

  8. 中断处理过程示意图_PCIe中断方法和系统与流程

    本发明实施例涉及通信技术领域,尤其涉及一种PCIe中断方法和系统. 背景技术: PCIe(Peripheral Component Interconnect Express,高速外围组件互联)是最新的 ...

  9. 中断处理过程示意图_中断和中断处理流程

    1. 中断概念 中断是指由于接收到来自外围硬件(相对于中央处理器和内存)的异步信号或来自软件的同步信号,而进行相应的硬件/软件处理.发出这样的信号称为进行中断请求(interrupt request, ...

最新文章

  1. 掌握ConstraintLayout(十)按比例设置视图大小
  2. 处理js事件时,获取键盘数字注意
  3. poj2987最大权闭包(输出最少建塔个数)
  4. 横坐标标签如何变斜体?
  5. linux windows爆音,升级Windows 10后 部分情况下有爆音,杂音,音频卡顿现象
  6. kaggle手机验证问题
  7. 计算机无法识别读卡器怎么办,电脑无法识别读卡器怎么办
  8. wps文字表格制作拼音田字格模板_学生练字字帖模板118个打包下载 118个WPS、WORD田字格模板...
  9. 简谈java的split
  10. 随笔(3)——智慧医养融合:从智能交互到交互智能
  11. 勤哲Excel服务器在图书出版企业管理系统中的应用
  12. Mysql学习——建表语句详解
  13. Java怎么学?分享6个学习窍门
  14. win10系统安装CH340驱动
  15. 信息检索与利用(第三版)第三章信息素养
  16. “UnsatisfiedDependencyException“的解决方案
  17. 幼儿园调查过程怎么写_幼儿园的调查报告范文
  18. 游戏防外挂、破解解决方案
  19. 2013-04《信息资源管理 02378》真卷解析,逐题解析+背诵技巧
  20. OCP考试的那段难忘的经历

热门文章

  1. 从应用上看计算机将向那个方向发展,(2)2019年6月一级Ms Office试题
  2. python学习Day4 流程控制(if分支,while循环,for循环)
  3. Django模板语言及视图
  4. GET,POST请求
  5. salt一键部署jdk
  6. Windows下配置Apache服务器
  7. JSP数据库操作和调用自己写的java类
  8. linux 服务器网络有关的内核参数
  9. 基本概念----Beginning Visual C#
  10. MVC部分视图的使用