这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 关于中断的一段代码如何解释?

共8条 1/1 1 跳转至

关于中断的一段代码如何解释?

菜鸟
2006-12-14 23:45:18     打赏

IRQHandler
; Enhanced Interrupt Controller. EIC_base_addr EQU 0xFFFFF800;

LDR r0, =EIC_base_addr

;IVR_off_addr EQU 0x18 ; Interrupt Vector Register offset
LDR r1, =IVR_off_addr
ADD pc,r0,r1 ; Branch to the IRQ handler.

比如Timer0产生了中断, 程序是如何跳到Timer0的ISR的?




关键词: 关于     中断     一段     代码     如何     解释    

菜鸟
2006-12-15 05:48:00     打赏
2楼
中断产生后,程序回自动跳转到相应的中断向量去的,执行中断向量里设定的跳转指令,然后跳转到中断处理函数去。

菜鸟
2006-12-15 17:45:00     打赏
3楼

手册是最好的老师。看EIC_IVR寄存器的定义,以及它是如何初始化的。


菜鸟
2006-12-15 17:49:00     打赏
4楼
版主回答的言简意赅~

菜鸟
2006-12-18 17:37:00     打赏
5楼

谢谢各位!


菜鸟
2006-12-18 23:42:00     打赏
6楼
[em01]

菜鸟
2006-12-19 00:36:00     打赏
7楼
GOOD!

菜鸟
2006-12-19 18:30:00     打赏
8楼

各位请注意,这里的硬件设计很特别。

是使用了向量中断控制器的例子。这段代码应该是在中断服务程序中,从这里跳到具体中断源(如timer0)的服务程序。

EIC_base_addr:应该是向量中断控制器入口的基地址。

IVR_off_addr:应该是ISR的服务入口

向量中断控制器会根据程序员预先的配置知道各种中断源ISR的地址,如:

timer0: 0x10000

timer1: 0x40000

keyboard: 0x80000

它会自己通过判断中断的优先级把相应的ISR地址存放到EIC_base_addr+IVR_off_addr的寄存器上。

这样CPU不要再像以前那样查询状态寄存器来判断优先级。这些由向量中断控制器完成,并直接给出相应ISR的入口,CPU只要到这个寄存器地址上读取出来就可以直接跳转了


共8条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]