IRQ.s
上传用户:gzxf2008
上传日期:2016-10-05
资源大小:181k
文件大小:2k
源码类别:

单片机开发

开发平台:

C/C++

  1. ;********************************************************************************************************/
  2. NoInt       EQU 0x80
  3. USR32Mode   EQU 0x10
  4. SVC32Mode   EQU 0x13
  5. SYS32Mode   EQU 0x1f
  6. IRQ32Mode   EQU 0x12
  7. FIQ32Mode   EQU 0x11
  8.     CODE32
  9.     PRESERVE8
  10.     AREA    IRQ,CODE,READONLY
  11.     MACRO
  12. $IRQ_Label HANDLER $IRQ_Exception_Function
  13.         EXPORT  $IRQ_Label                      ; The label for exports 输出的标号
  14.         IMPORT  $IRQ_Exception_Function         ; The imported labels 引用的外部标号
  15. $IRQ_Label
  16.         SUB     LR, LR, #4                      ; Calculate the returning address 计算返回地址
  17.         STMFD   SP!, {R0-R3, R12, LR}           ; Protects the task environments 保存任务环境
  18.         MRS     R3, SPSR                        ; Protects the status variable 保存状态
  19.         STMFD   SP, {R3,LR}^                    ; Protects SPSR and SP in user status, Notice: DO NOT write back.保存SPSR和用户状态的SP,注意不能回写
  20.                                                 ; If the SP is written back, it should be adjusted to its appropriate value later.如果回写的是用户的SP,所以后面要调整SP
  21.         NOP
  22.         SUB     SP, SP, #4*2
  23.         MSR     CPSR_c, #(NoInt | SYS32Mode)    ; Switch to the System Mode 切换到系统模式 
  24.        
  25.         BL      $IRQ_Exception_Function         ; call the C interrupt handler funtion 调用c语言的中断处理程序
  26.         MSR     CPSR_c, #(NoInt | IRQ32Mode)    ; Switch bak to IRQ mode 切换回irq模式
  27.         LDMFD   SP, {R3,LR}^                    ; Recover SPSR and SP in user status, Notic: DO NOT write back. 恢复SPSR和用户状态的SP,注意不能回写
  28.                                                 ; If the SP is written back, it should be adjusted to its appropriate value later.如果回写的是用户的SP,所以后面要调整SP
  29.         MSR     SPSR_cxsf, R3
  30.         ADD     SP, SP, #4*2                    ; 
  31.         LDMFD   SP!, {R0-R3, R12, PC}^          ;
  32.     MEND
  33. ;/* 以下添加中断句柄,用户根据实际情况改变 */
  34. ;/* Add interrupt handler here,user could change it as needed */
  35. ;Timer0_Handler  HANDLER Timer0
  36.     END
  37. ;/*********************************************************************************************************
  38. ;**                            End Of File
  39. ;********************************************************************************************************/