📄 irq.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 + -