IRQ.s
上传用户:yyhongfa
上传日期:2013-01-18
资源大小:267k
文件大小:3k
开发平台:

C/C++

  1. ;/****************************************Copyright (c)**************************************************
  2. ;**                               广州周立功单片机发展有限公司
  3. ;**                                     研    究    所
  4. ;**                                        产品一部 
  5. ;**
  6. ;**                                 http://www.zlgmcu.com
  7. ;**
  8. ;**--------------文件信息--------------------------------------------------------------------------------
  9. ;**文   件   名: IRQ.s
  10. ;**创   建   人: 陈明计
  11. ;**最后修改日期: 2004年2月2日
  12. ;**描        述: 允许中断嵌套时的IRQ句柄
  13. ;**              每个工程应当有独立的这个文件的拷贝,并进行相应的修改   
  14. ;**--------------历史版本信息----------------------------------------------------------------------------
  15. ;** 创建人: 陈明计
  16. ;** 版  本: v1.0
  17. ;** 日 期: 2004年2月2日
  18. ;** 描 述: 原始版本
  19. ;**
  20. ;**------------------------------------------------------------------------------------------------------
  21. ;** 修改人: 
  22. ;** 版  本: 
  23. ;** 日 期: 
  24. ;** 描 述: 
  25. ;**
  26. ;**--------------当前版本修订------------------------------------------------------------------------------
  27. ;** 修改人:
  28. ;** 日 期:
  29. ;** 描 述:
  30. ;**
  31. ;**------------------------------------------------------------------------------------------------------
  32. ;********************************************************************************************************/
  33. NoInt       EQU 0x80
  34. USR32Mode   EQU 0x10
  35. SVC32Mode   EQU 0x13
  36. SYS32Mode   EQU 0x1f
  37. IRQ32Mode   EQU 0x12
  38. FIQ32Mode   EQU 0x11
  39.     CODE32
  40.     AREA    IRQ,CODE,READONLY
  41.     MACRO
  42. $IRQ_Label HANDLER $IRQ_Exception_Function
  43.         EXPORT  $IRQ_Label                      ; 输出的标号
  44.         IMPORT  $IRQ_Exception_Function         ; 引用的外部标号
  45. $IRQ_Label
  46.         SUB     LR, LR, #4                      ; 计算返回地址
  47.         STMFD   SP!, {R0-R3, R12, LR}           ; 保存任务环境
  48.         MRS     R3, SPSR                        ; 保存状态
  49.         STMFD   SP!, {R3}
  50.         STMFD   SP, {LR}^                       ; 保存用户状态的SP,注意不能回写
  51.                                                 ; 如果回写的是用户的SP,所以后面要调整SP
  52.         SUB     SP, SP, #4
  53.         MSR     CPSR_c, #(NoInt | SYS32Mode)    ; 切换到系统模式
  54.        
  55.         BL      $IRQ_Exception_Function         ; 调用c语言的中断处理程序
  56.         MSR     CPSR_c, #(NoInt | IRQ32Mode)    ; 切换回irq模式
  57.         LDMFD   SP, {LR}^                       ; 恢复用户状态的SP,注意不能回写
  58.                                                 ; 如果回写的是用户的SP,所以后面要调整SP
  59.         ADD     SP, SP, #4                      ; 
  60.         LDMFD   SP!, {R3}
  61.         MSR     SPSR_cxsf, R3
  62.         LDMFD   SP!, {R0-R3, R12, PC}^          ;
  63.     MEND
  64. ;/* 以下添加中断句柄,用户根据实际情况改变 */
  65. Timer0_Handler  HANDLER Timer0
  66.     END
  67. ;/*********************************************************************************************************
  68. ;**                            End Of File
  69. ;********************************************************************************************************/