一般情况下,IRQ中断发生后,系统会在距程序入口0x00000018处执行B   HandlerIRQHandlerIRQ处的代码是HandlerIRQ      HANDLER    HandleIRQ它使用了一个名为HANDLER的宏,此宏扩展后为:SUB     SP, SP, #4          ; SP=SP-4,此地址用于存放转跳地址,也即中断程序的入口地址STMFD SP!, {R0}           ; 把工作寄存器R0压入栈,sp=SP-4(sp先减)LDR     R0, =HandleIRQ        ; 将HandleIRQ的值放入r0LDR     R0, [R0]          ; 把HandleIRQ的值所指向的内容(也就是中断程序的入口地址)放入R0STR     R0, [SP,#4]           ; 通过R0把中断服务程序(ISR)入口地址压入栈的sp=SP+4处LDMFD   SP!, {R0,pc}如注释所讲,此段代码的作用是跳转到HandleIRQ地址处存放的值所指向的代码,那么HandleIRQ地址处存放的值是哪段代码的起始地址呢,启动代码中还有这么一段:LDR       R0, =HandleIRQ ; IRQ异常向量的绝对地址->R0LDR        R1, =IsrIRQ        ; R1 = 二级向量表的中断查询例程IsrIRQ的绝对地址STR      R1, [R0]也就是说,HandleIRQ地址处存放的标号IsrIRQ的地址,程序将跳转到IsrIRQ标号处的代码接着执行,IsrIRQ标号处的代码是:SUB        SP, SP, #4          ; reserved for PC,SP=SP-4STMFD SP!, {R8-R9}        ; SP=SP-8LDR       R9, =INTOFFSET     ; 把INTOFFSET寄存器的值装入R9,其值指向的存储地址存着中断的; 偏移量(以字为单位,即4字节,见P14-16)LDR        R9, [R9]            ; 中断的偏移量装入R9LDR     R8, =HandleEINT0   ; 将HandleEINT0装入R8,其值为二级向量表的入口地址ADD      R8, R8, R9, lsl #2  ; R8=R8+R9*4LDR       R8, [R8]            ; 将所要的中断处理程序的入口地址装入R8STR        R8, [SP,#8]         ; SP=SP+8,将中断处理程序的入口地址推入堆栈LDMFD   SP!, {R8-R9,pc}     ; 出线,R8,R9还原其值,将中断处理程序的入口地址装入pc这段代码的作用是使程序跳转到 HandleEINT0标号地址+INTOFFSET*4 的地址处,该地址是真正的中断处理程序的入口地址。HandleEINT0是中断向量表的入口地址,这其实是根据INTOFFSET寄存器的值在进行查表,INTOFFSET寄存器的值指示所发生的中断的类型,它由硬件控制。中断处理程序一般在C程序中定义,在MDK中可由下面的写法来定义void __irq 函数名(参数列表)要记得将此函数地址保存在中断向量表中:向量表相应地址 = (unsigned)函数名;此向量表相应地址可用一个符号来表示,以增加可读性,此符号可如此定义:符号   EQU  (向量表相应地址)在中断处理程序中要记得将SRCPND和INTPND寄存器的相应位清零以清除挂起状态,否则会不断重复执行此中断处理程序,清零的方法是往相应位写1,而不是写0。



												

S3C2440A中断小记相关推荐

  1. GD32F303调试小记(一)之USART(接收中断、接收空闲中断+DMA、发送DMA)

    前言 之前写了GD32F103调试小记(二)之USART(接收中断.接收空闲中断+DMA.发送DMA)一文.这次我们来看看GD32F303的USART是如何配置的,结合这两篇文章,相信大家GD32的U ...

  2. 8086汇编学习小记-王爽汇编语言实验12

    8086汇编学习小记-王爽汇编语言实验12 0号中断处理程序,开始安装在0000:0200处的程序最后用死循环导致显示不出'divided error',改成直接退出就正常显示了.注意修改ss,sp之 ...

  3. emwin之在中断服务程序中创建窗口的结果

    @2019-04-28 [小记] 使用emwin设计器生成的程序,将该窗口创建放在中断服务程序中出现奇怪现象,非死机但功能间歇性异常,将创建窗口程序放于普通程序中则工作正常 转载于:https://w ...

  4. ARM学习篇 中断定时理解

    1. 中断控制器 a. 中断处理流程 P1--摘自S3C2440A手册 P1简要阐述了S3C2440A内置中断控制器处理中断的流程: ●​若某中断有自中断,则先接收子中断请求,否则,直接接受源中断. ...

  5. S3C2440的中断体系结构

    概述 S3C2440A中的中断控制器接受来自60个中断源的请求.提供这些中断源的可以是内部外设,如DMA控制器.UART.IIC等等.在这些中断源中,UARTn.AC97和EINTn中断对于中断控制器 ...

  6. JavaScript小记(持续更新)

    注意:(2020.01.14) 后续将都在我的学习笔记文档 - JavaScript小记中进行更新,该文章不再更新,请持续关注上述网页 学习js遇到的疑问和js基础都记录在这里,持续更新中. 2019 ...

  7. 【归纳】S3C2440A之ARM学习的所有的问题:

    目录: 问题1:关于Nor/Nand启动判断的问题: 问题2:程序烧写到什么位置啦(即程序的存储位置)?Norflash/Nandflash? 问题3:Nor启动,SRAM除了存储寄存器sp之类,还有 ...

  8. FL2440(S3C2440A 芯片) 开发板开发笔记

    FL2440(S3C2440A 芯片) 开发板开发笔记 开发板的拨码开关指南: FL2440 改 vnfg 飞凌嵌入式 www. witech. com. cn 09. 8. 22 1 开发板使用手册 ...

  9. Xv6学习小记(二)——多核启动

    本文首发于我的个人博客QIMING.INFO,转载请带上链接及署名.(注:本文代码中的注释很重要,如看不清,可移步我的个人博客中查看) 在上文(Xv6学习小记(一)--编译与运行)中,我们介绍了Lin ...

最新文章

  1. 三篇文章了解 TiDB 技术内幕——说存储
  2. flutter 导航页面转换动画效果
  3. 匹配正则_Day233:正则表达式匹配方法 match()
  4. python画一个祝福别人生日快乐_生日贺卡祝福语(精选50条)
  5. Java学习笔记_继承
  6. 亿方云CEO程远:转型第一式:链接企业人与数据
  7. [蓝桥杯][算法提高VIP]聪明的美食家-dp
  8. 可能是全网最通俗易懂的微服务架构改造解读
  9. 搭建Spring开发环境并编写第一个Spring小程序
  10. Web前端和后端开发的区别和要求
  11. Win10彻底关闭Antimalware Service Executable占用内存过高问题
  12. java timer demo_java中任务调度java.util.Timer,ScheduledExecutor,Quartz的机制说明和demo代码实例分享...
  13. c语言ftell函数_使用示例的C语言中的ftell()函数
  14. 【AI视野·今日CV 计算机视觉论文速览 第224期】Tue, 22 Jun 2021
  15. linux系统中打rz命令后出现waiting to receive.**B0100000023be50
  16. 蓝牙耳机Priority设置流程
  17. 如何让你得声音洪亮结实有磁性
  18. 将活跃天数转化为等级,输入等级查询活跃天数
  19. 超级计算机 人脑,迄今为止没有一部超级计算机的综合能力超过人脑
  20. 页面驱动开发(Page Driven) —— 一种大多数人还不认同的技术

热门文章

  1. uni-app注册自动获取短信信息
  2. java-net-php-python-java作业批改系统的设计PPT计算机毕业设计程序
  3. python pandas 增加一列_pandas删除行删除列增加行增加列的实现
  4. JS JQuery实现简单的鼠标移动动画效果
  5. python基础知识大一总结与反思_反思总结及规划 其一
  6. 会声会影应该如何制作电影开幕效果
  7. copypng emitted errors
  8. python核心编程电子书_Python核心编程 PDF 超清第3版
  9. 实战——Linux定时执行Kettle的kjb文件
  10. CocosCreator实现不规则的点击区域监听