⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 irq.inc

📁 philips arm7 lpc2103的常用功能的库函数第二部分
💻 INC
字号:
;/***********************************************Copyright (c)********************************************
;**                                Guangzou ZLG-MCU Development Co.,LTD.
;**                                     
;**                                       http://www.zlgmcu.com
;**
;**--------------File Info--------------------------------------------------------------------------------
;** File name:			        irq.inc
;** Last modified Date:         2007-09-20
;** Last Version:		        1.00
;** Descriptions:		        IRQ中断入口宏定义
;**
;**-------------------------------------------------------------------------------------------------------
;** Created by:	                chengmingji		    
;** Created date:               2004-9-17		    
;** Version:				    1.00
;** Descriptions:		        
;**-------------------------------------------------------------------------------------------------------
;** Modified by:			    lixiaocheng
;** Modified Date:		        2007-09-20
;** Version:				    1.01
;** Descriptions:		        
;**
;********************************************************************************************************/

NOInt       EQU 0x80

Usr32Mode   EQU 0x10
Sys32Mode   EQU 0x1f
Irq32Mode   EQU 0x12


 MACRO
$IRQ_Label HANDLER $IRQ_Exception_Function
        EXPORT  $IRQ_Label                      ; 输出的标号
$IRQ_Label
        SUB     LR, LR, #4                      ; Calculate the returning address 计算返回地址
        STMFD   SP!, {R0-R3, R12, LR}           ; Protects the task environments 保存任务环境
        MRS     R3, SPSR                        ; Protects the status variable 保存状态
        STMFD   SP, {R3,LR}^                    ; Protects SPSR and SP in user status, Notice: DO NOT write back.保存SPSR和用户状态的SP,注意不能回写
                                                ; If the SP is written back, it should be adjusted to its appropriate value later.如果回写的是用户的SP,所以后面要调整SP
        NOP
        SUB     SP, SP, #4*2
        
        LDR     R0,=IRQ_EnterSum                ;标识已进入中断
        MOV     R1,#1
        STR     R1,[R0]
        
        MSR     CPSR_c, #(NOInt | Sys32Mode)    ; Switch to the System Mode 切换到系统模式,并关闭了IRQ中断 
       
        ISR_HANDLER     $IRQ_Exception_Function         ; call the C interrupt handler funtion 调用c语言的中断处理程序

        LDR     R0,=IRQ_EnterSum                ;标识已进入中断
        MOV     R1,#0
        STR     R1,[R0]
        
        MSR     CPSR_c, #(NOInt | Irq32Mode)    ; Switch bak to IRQ mode 切换回irq模式
        LDMFD   SP, {R3,LR}^                    ; Recover SPSR and SP in user status, Notic: DO NOT write back. 恢复SPSR和用户状态的SP,注意不能回写
                                                ; If the SP is written back, it should be adjusted to its appropriate value later.如果回写的是用户的SP,所以后面要调整SP
        MSR     SPSR_cxsf, R3
        ADD     SP, SP, #4*2                    ; 

        LDMFD   SP!, {R0-R3, R12, PC}^          ;
    MEND
 END
    
;/********************************************************************************************************
;   END FILE
;********************************************************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -