S3C2440A中断小记
一般情况下,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中断小记相关推荐
- GD32F303调试小记(一)之USART(接收中断、接收空闲中断+DMA、发送DMA)
前言 之前写了GD32F103调试小记(二)之USART(接收中断.接收空闲中断+DMA.发送DMA)一文.这次我们来看看GD32F303的USART是如何配置的,结合这两篇文章,相信大家GD32的U ...
- 8086汇编学习小记-王爽汇编语言实验12
8086汇编学习小记-王爽汇编语言实验12 0号中断处理程序,开始安装在0000:0200处的程序最后用死循环导致显示不出'divided error',改成直接退出就正常显示了.注意修改ss,sp之 ...
- emwin之在中断服务程序中创建窗口的结果
@2019-04-28 [小记] 使用emwin设计器生成的程序,将该窗口创建放在中断服务程序中出现奇怪现象,非死机但功能间歇性异常,将创建窗口程序放于普通程序中则工作正常 转载于:https://w ...
- ARM学习篇 中断定时理解
1. 中断控制器 a. 中断处理流程 P1--摘自S3C2440A手册 P1简要阐述了S3C2440A内置中断控制器处理中断的流程: ●若某中断有自中断,则先接收子中断请求,否则,直接接受源中断. ...
- S3C2440的中断体系结构
概述 S3C2440A中的中断控制器接受来自60个中断源的请求.提供这些中断源的可以是内部外设,如DMA控制器.UART.IIC等等.在这些中断源中,UARTn.AC97和EINTn中断对于中断控制器 ...
- JavaScript小记(持续更新)
注意:(2020.01.14) 后续将都在我的学习笔记文档 - JavaScript小记中进行更新,该文章不再更新,请持续关注上述网页 学习js遇到的疑问和js基础都记录在这里,持续更新中. 2019 ...
- 【归纳】S3C2440A之ARM学习的所有的问题:
目录: 问题1:关于Nor/Nand启动判断的问题: 问题2:程序烧写到什么位置啦(即程序的存储位置)?Norflash/Nandflash? 问题3:Nor启动,SRAM除了存储寄存器sp之类,还有 ...
- FL2440(S3C2440A 芯片) 开发板开发笔记
FL2440(S3C2440A 芯片) 开发板开发笔记 开发板的拨码开关指南: FL2440 改 vnfg 飞凌嵌入式 www. witech. com. cn 09. 8. 22 1 开发板使用手册 ...
- Xv6学习小记(二)——多核启动
本文首发于我的个人博客QIMING.INFO,转载请带上链接及署名.(注:本文代码中的注释很重要,如看不清,可移步我的个人博客中查看) 在上文(Xv6学习小记(一)--编译与运行)中,我们介绍了Lin ...
最新文章
- 三篇文章了解 TiDB 技术内幕——说存储
- flutter 导航页面转换动画效果
- 匹配正则_Day233:正则表达式匹配方法 match()
- python画一个祝福别人生日快乐_生日贺卡祝福语(精选50条)
- Java学习笔记_继承
- 亿方云CEO程远:转型第一式:链接企业人与数据
- [蓝桥杯][算法提高VIP]聪明的美食家-dp
- 可能是全网最通俗易懂的微服务架构改造解读
- 搭建Spring开发环境并编写第一个Spring小程序
- Web前端和后端开发的区别和要求
- Win10彻底关闭Antimalware Service Executable占用内存过高问题
- java timer demo_java中任务调度java.util.Timer,ScheduledExecutor,Quartz的机制说明和demo代码实例分享...
- c语言ftell函数_使用示例的C语言中的ftell()函数
- 【AI视野·今日CV 计算机视觉论文速览 第224期】Tue, 22 Jun 2021
- linux系统中打rz命令后出现waiting to receive.**B0100000023be50
- 蓝牙耳机Priority设置流程
- 如何让你得声音洪亮结实有磁性
- 将活跃天数转化为等级,输入等级查询活跃天数
- 超级计算机 人脑,迄今为止没有一部超级计算机的综合能力超过人脑
- 页面驱动开发(Page Driven) —— 一种大多数人还不认同的技术
热门文章
- uni-app注册自动获取短信信息
- java-net-php-python-java作业批改系统的设计PPT计算机毕业设计程序
- python pandas 增加一列_pandas删除行删除列增加行增加列的实现
- JS JQuery实现简单的鼠标移动动画效果
- python基础知识大一总结与反思_反思总结及规划 其一
- 会声会影应该如何制作电影开幕效果
- copypng emitted errors
- python核心编程电子书_Python核心编程 PDF 超清第3版
- 实战——Linux定时执行Kettle的kjb文件
- CocosCreator实现不规则的点击区域监听