ARM对中断IRQ的处理

本文介绍了在ARM嵌入式系统中,如何处理中断IRQ。启动时,中断向量表位于0x8000 0000地址,当IRQ中断发生时,程序跳转到IRQHandler,保存上下文,读取返回地址,然后根据EIC_base_addr和IVR_off_addr定位到中断服务程序并清除中断标志位,最后恢复上下文并返回执行。中断服务程序的地址通过安装中断向量服务程序时设置的IVR寄存器确定。
摘要由CSDN通过智能技术生成
  •  Startup中断向量表

     ;*******************************************************************************
     ; Exception vectors
    ;*******************************************************************************
    LDR PC, Reset_Addr     ;  地址为0x8000 0000
    LDR PC, Undefined_Addr
    LDR PC, SWI_Addr
    LDR PC, Prefetch_Addr
    LDR PC, Abort_Addr
    NOP ; Reserved vector
    LDR PC, IRQ_Addr
    LDR PC, FIQ_Addr
   ; *******************************************************************************
   ; Exception handlers address table
   ;*******************************************************************************
   Reset_Addr DCD __program_start ;地址为0x8000 0020
   Undefined_Addr DCD UndefinedHandler
   SWI_Addr DCD SWIHandler
   Prefetch_Addr DCD PrefetchAbortHandler
   Abort_Addr DCD DataAbortHandler
   DCD 0 ; Reserved vector
   IRQ_Addr DCD IRQHandler
   FIQ_Addr DCD FIQHandler
   ;*******************************************************************************
   ; Peripherals IRQ handlers address table
   ;*******************************************************************************
    PRCCUCMU_Addr DCD PRCCUCMUIRQHandler ;地址为0x8000 0040

         对于嵌入式系统来说,一般将上面产生的代码放在flash中,地址0x8000 0000(该sector同时remap到0x0000 0000)。将__program_start,UndefinedHandler等地址放到指令缓冲池中。从而可以实现全局范围内跳转。根据ARM指令长度可知,上述__program_start的地址存放的物理地址是0x8000 0020,根据ARM流水线的情况,LDR PC, Reset_Addr产生汇编语言指令为LDR PC, [PC, #24]。

IRQ中断发生时,程序跳转到IRQHandler处。

  • IRQHandler

IRQHandler
  

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值