ARM中断系统小结
%A 初看ARM中断系统觉得有点乱,写点东西希望对大家有点帮助
%A 中断详细建立过程(1)
%A 首先我们先来看两个东西.
%A ;/* EXCEPTION HANDLER VECTOR TABLE */
%A
%A
%A
%A ^ DRAM_BASE
%A HandleReset # 4
%A HandleUndef # 4
%A HandleSwi # 4
%A HandlePrefetch # 4
%A HandleAbort # 4
%A HandleReserv # 4
%A HandleIrq # 4
%A HandleFiq # 4
%A 小注: 这里的^是MAP,#是FIELD
%A 也就是在DARM的BANK0里面开始的地方定义了一个中断向量表,用于存放中断程序的入口地址。
%A
%A
%A
%A
%A ExceptionHandlerTable
%A DCD UserCodeArea
%A DCD SystemUndefinedHandler
%A DCD SystemSwiHandler
%A DCD SystemPrefetchHandler
%A DCD SystemAbortHandler
%A DCD SystemReserv
%A DCD SystemIrqHandler
%A DCD SystemFiqHandler
%A 这个表中存放的是汇编程序中中断处理函数的入口地址,每一项对应一个中断函数。
%A
%A
%A
%A
%A 下面我们从程序的开始处分析:
%A AREA Init, CODE, READONLY
%A ENTRY
%A
%A
%A
%A B Reset_Handler
%A B Undefined_Handler
%A B SWI_Handler
%A B Prefetch_Handler
%A B Abort_Handler
%A NOP Reserved vector
%A B IRQ_Handler
%A B FIQ_Handler
%A
%A
%A
%A
%A FIQ_Handler
%A SUB sp, sp, #4
%A STMFD sp!, {r0} FD满递减堆栈 执行寄存器压栈操作.
%A LDR r0, =HandleFiq 汇编里的处理函数地址,然后跳到C中,在DRAM。
%A LDR r0, [r0] 中断向量地址给R0.
%A STR r0, [sp, #4] 中断向量地址给
%A LDMFD sp!, {r0, pc}
%A 在程序的开始处,首先建立了默认的中断调用函数.这个过程大家一定非常熟悉,
%A 首先执行了压栈,然后给出了中断入口地址.这个HandleFiq就是我们前面提到的在DRAM中建立的中断向量其中一个的地址。
%A 在HandleFiq开始的四个字节中,放着汇编中断处理函数的入口地址。
%A
%A
%A
%A 汇编中断处理函数的地址是如何放到DRAM中断向量表里的呢?
%A
%A
%A
%A 我们上面提到的另一个表就发挥作用了。看下面这段程序:
%A EXCEPTION_VECTOR_TABLE_SETUP
%A LDR r0, =HandleReset
%A LDR r1, =ExceptionHandlerTable
%A MOV r2, #8
%A
%A ExceptLoop
%A LDR r3, [r1], #4
%A STR r3, [r0], #4
%A SUBS r2, r2, #1 Down Count
%A BNE ExceptLoop ;; 从表里取出来给了HandleReset后面的空间
%A 这一段把ExceptionHandlerTable里的中断处理函数的地址拷贝给了DRAM里的中断向量表。这样两者就联系起来
%A 在执行程序开始的跳转之后就自然跳到了*******Handler.真正的处理函数之一如下所示:
%A
%A
%A
%A 它实际上只调用了C语言的中断处理函数,其他什么也没做。
%A SystemFiqHandler
%A IMPORT ISR_FiqHandler
%A STMFD sp!, {r0-r7, lr}
%A BL ISR_FiqHandler
%A LDMFD sp!, {r0-r7, lr}
%A SUBS pc, lr, #4
%A
%A
%A
%A 它实际上只调用了C语言的中断处理函数,其他什么也没做。
%A void ISR_FiqHandler(void)
%A {
%A IntOffSet = (U32)INTOFFSET;
%A (IntOffSet>>2)
%A (*InterruptHandlers[IntOffSet>>2])(); // Call interrupt service routine
%A }
%A
%A%A
%A
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
红色飓风FPGA普及行动 第三讲:VerilogHDL基础
东芝CV60电梯直流开门机电路
高频变压器的制作流程
求UCOS 的移植范例
台积电2nm N2工艺节点今年投产 A16和N2P明年上市
Google AI芯片通知撤换 三星HBM3E认证再传卡关
红色飓风FPGA普及行动 第四讲:Verilog HDL中的组合逻辑设计方法
鸣志电器:运动控制与智能照明领域的创新引领者
奥的斯电梯直流开门机电路(2)
飞思卡尔杯-第六届设计应用大奖赛 优秀奖获奖论文4
研究人员开发新的超材料,为可弯曲、可拉伸的计算机芯片铺平了道路
飞思卡尔杯-第六届设计应用大奖赛 优秀奖获奖论文6
极越汽车更名枫盛汽车
Arm引领AI时代芯片设计的范式跃迁
顶级飞利浦ARM7:LPC2292带网口彩色LCD屏开发板(二个版本)
奥的斯电梯直流开门机电路(3)
飞思卡尔杯-第六届设计应用大奖赛 优秀奖获奖论文3
大厂PCB布局参考
红色飓风FPGA普及行动 第二讲:FPGA设计入门
飞思卡尔杯-第六届设计应用大奖赛 优秀奖获奖论文2
可编程控制器EDA教程 13
飞思卡尔杯-第六届设计应用大奖赛 优秀奖获奖论文5
关于VxWorks系统启动盘的制作!
红色飓风FPGA普及行动 第一讲:FPGA系统设计基础
英特尔 CEO 宣布裁员、重组、削减 15 亿美元的成本、扩大重返办公室的授权
奥的斯电梯直流开门机电路(1A)
汇川技术:工业机器人业务的崛起之星
如何建立arm9的交叉编译环境?
pcb抄板,电子产品克隆开发设计
奥的斯电梯直流开门机电路(1B)