IRQ.s
上传用户:pudewen666
上传日期:2007-06-08
资源大小:75k
文件大小:3k
源码类别:

微处理器开发

开发平台:

Windows_Unix

  1. ;/****************************************Copyright (c)**************************************************
  2. ;**                               Guangzou ZLG-MCU Development Co.,LTD.
  3. ;**                                      graduate school
  4. ;**                                 http://www.zlgmcu.com
  5. ;**
  6. ;**--------------File Info-------------------------------------------------------------------------------
  7. ;** File Name: IRQ.s
  8. ;** Last modified Date:  2004-06-14
  9. ;** Last Version: 1.1
  10. ;** Descriptions: The irq handle that what allow the interrupt nesting. 
  11. ;**
  12. ;**------------------------------------------------------------------------------------------------------
  13. ;** Created By: Chenmingji
  14. ;** Created date:   2004-09-17
  15. ;** Version: 1.0
  16. ;** Descriptions: First version
  17. ;**
  18. ;**------------------------------------------------------------------------------------------------------
  19. ;** Modified by:
  20. ;** Modified date:
  21. ;** Version:
  22. ;** Descriptions:
  23. ;**
  24. ;********************************************************************************************************/
  25. NoInt       EQU 0x80
  26. USR32Mode   EQU 0x10
  27. SVC32Mode   EQU 0x13
  28. SYS32Mode   EQU 0x1f
  29. IRQ32Mode   EQU 0x12
  30. FIQ32Mode   EQU 0x11
  31.     CODE32
  32.     AREA    IRQ,CODE,READONLY
  33.     MACRO
  34. $IRQ_Label HANDLER $IRQ_Exception_Function
  35.         EXPORT  $IRQ_Label                      ; The label for exports 输出的标号
  36.         IMPORT  $IRQ_Exception_Function         ; The imported labels 引用的外部标号
  37. $IRQ_Label
  38.         SUB     LR, LR, #4                      ; Calculate the returning address 计算返回地址
  39.         STMFD   SP!, {R0-R3, R12, LR}           ; Protects the task environments 保存任务环境
  40.         MRS     R3, SPSR                        ; Protects the status variable 保存状态
  41.         STMFD   SP, {R3,LR}^                    ; Protects SPSR and SP in user status, Notice: DO NOT write back.保存SPSR和用户状态的SP,注意不能回写
  42.                                                 ; If the SP is written back, it should be adjusted to its appropriate value later.如果回写的是用户的SP,所以后面要调整SP
  43.         NOP
  44.         SUB     SP, SP, #4*2
  45.         MSR     CPSR_c, #(NoInt | SYS32Mode)    ; Switch to the System Mode 切换到系统模式 
  46.        
  47.         BL      $IRQ_Exception_Function         ; call the C interrupt handler funtion 调用c语言的中断处理程序
  48.         MSR     CPSR_c, #(NoInt | IRQ32Mode)    ; Switch bak to IRQ mode 切换回irq模式
  49.         LDMFD   SP, {R3,LR}^                    ; Recover SPSR and SP in user status, Notic: DO NOT write back. 恢复SPSR和用户状态的SP,注意不能回写
  50.                                                 ; If the SP is written back, it should be adjusted to its appropriate value later.如果回写的是用户的SP,所以后面要调整SP
  51.         MSR     SPSR_cxsf, R3
  52.         ADD     SP, SP, #4*2                    ; 
  53.         LDMFD   SP!, {R0-R3, R12, PC}^          ;
  54.     MEND
  55. ;/* 以下添加中断句柄,用户根据实际情况改变 */
  56. ;/* Add interrupt handler here,user could change it as needed */
  57. ;Timer0_Handler  HANDLER Timer0
  58.     END
  59. ;/*********************************************************************************************************
  60. ;**                            End Of File
  61. ;********************************************************************************************************/