我的LED显示屏+KEY+Interrupt实验

上一篇 / 下一篇  2010-02-16 11:21:00 / 天气: 晴朗 / 心情: 高兴

没什么好说的,只是搞不懂怎么把中断向量表固化到0x1000000,并映射到0x00000000地址
程序流程比较简单,首先运行2410init中的b ResetHandler跳转到初始化,然后在初始化结束以后跳转到main执行,main返回以后b .死循环
我们看看IRQ的执行过程,首先b HandlerIRQmm这里的HandlerIRQ是在2410init中定义的宏,也就是HandlerIRQ HANDLER HandleIRQ
HandlerIRQ可以理解成一个标号,无所谓
HandleIRQ是定义在 _ISR_STARTADDRESS+0x18地址的变量,保存了IRQ中断服务函数的入口地址
^ _ISR_STARTADDRESS ;0x33ffff00
HandleReset # 4 ;系统复位
HandleUndef # 4
HandleSWI # 4
HandlePabort # 4
HandleDabort # 4
HandleReserved # 4
HandleIRQ # 4 ;初始化成IsrIRQ的入口地址
HandleFIQ # 4 ;以上是异常向量表
HandleEINT0 # 4 ;以下定义不同IRQ的中断服务程序入口
HandleEINT1 # 4
HandleEINT2 # 4
;.
;.
HandleRTC # 4
HandleADC # 4 ;在IsrIRQ中断服务程序中实现中断服务分支
IRQ中断以后系统跳转到0x00000018也就是b HandlerIRQ,前边我们说了HandlerIRQ实际上是一个宏,实现跳转到变量HandleIRQ指定的地址(初始化成IsrIRQ中断服务函数),进入IRQ中断服务程序.在IsrIRQ中断服务程序中,根据INTOFFSET(中断偏移)实现中断服务分支程序.所以我们在主函数中需要初始化IRQ中断服务分支,如pISR_EINT1 = (unsigned)KeyIRQ1,其中pISR_EINT1 =_ISR_STARTADDRESS+0x24,KeyIRQ1是按键1的响应函数.
下面我们详细介绍按下Key1的中断服务过程:
1.跳转到0x00000018
2.调用HandlerIRQ HANDLER HandleIRQ
3.在2中跳转到HandleIRQ,也就是IsrIRQ
4.在3中取到IRQ中断偏移INTOFFSET = 0x01,跳转到HandleEINT0 + 0x01也就是变量HandleEINT1地址
关键点:异常向量表&IRQ中断分支表的初始化

TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2024-09-21  
1234567
891011121314
15161718192021
22232425262728
2930     

数据统计

  • 访问量: 1823
  • 日志数: 119
  • 建立时间: 2010-01-07
  • 更新时间: 2010-08-03

RSS订阅

Open Toolbar