?? irq.s
字號:
;/*
;*********************************************************************************************************
;* 文件: IRQ.S
;* 描述: IRQ 中斷入口函數, 具體 IRQ 中斷服務功能函數在相應服務函數中實現(參考 OSTickISR 函數).
; 采用了一個宏做為向量服務程序的入口, 所以必須將入口值設置為 ISR 的具體地址值.
; 未用的向量中斷均指向 RStartup 處(即軟復位).
;* 編寫: 深思 (001-12345@sohu.com).
;*********************************************************************************************************
;*/
IMPORT OSTCBCur ; 指向當前任務TCB的指針
IMPORT OSTCBHighRdy ; 指向將要運行的任務TCB的指針
IMPORT __OSIntCtxSw ; 中斷級任務切換函數.
IMPORT OsEnterSum
AREA IRQMACRO,CODE,READONLY
CODE32
MACRO
$HandlerT HANDLER $ISR_Function
IMPORT $ISR_Function
EXPORT $HandlerT
$HandlerT
SUB LR, LR, #4 ; 計算返回地址.
STMFD SP!, {R0-R12, LR}
LDR R0, =OsEnterSum
LDR R1, =0x01 ; 避免中斷嵌套.
STR R1, [R0]
LDR LR, =IRQ_Return+4 ; 因為 ISR 采用了 __irq 關鍵字.
MRS R0, SPSR
STMFD SP!, {R0} ; 保存 SPSR.
MRS R0, CPSR
MSR SPSR_cxsf, R0
LDR PC, =$ISR_Function ; IRQ 中斷矢量跳轉至服務程序.
MEND
;// ************************************************
IRQ_Return
LDMFD SP!, {R0}
MSR SPSR_cxsf, R0 ; 恢復 SPSR.
LDR R0, =OsEnterSum
LDR R1, =0x00
STR R1, [R0]
LDR R0, =OSTCBHighRdy ; 判斷是否需要切換任務.
LDR R0, [R0]
LDR R1, =OSTCBCur
LDR R1, [R1]
CMP R0, R1
LDMEQFD SP!, {R0-R12, PC}^ ; 不進行任務切換.
LDMFD SP!, {R0-R12, LR}
LDR PC, =__OSIntCtxSw ; 進行中斷級任務切換.
;// ********************************************************************************************************
HandlerIRQ HANDLER ISR_IRQ ; 非向量中斷.
HandlerEINT0 HANDLER IRQ_Error
HandlerEINT1 HANDLER IRQ_Error
HandlerEINT2 HANDLER IRQ_Error
HandlerEINT3 HANDLER IRQ_Error
HandlerEINT4567 HANDLER IRQ_Error
HandlerTICK HANDLER IRQ_Error
HandlerZDMA0 HANDLER IRQ_Error
HandlerZDMA1 HANDLER IRQ_Error
HandlerBDMA0 HANDLER IRQ_Error
HandlerBDMA1 HANDLER IRQ_Error
HandlerWDT HANDLER IRQ_Error
HandlerUERR01 HANDLER IRQ_Error
HandlerTIMER0 HANDLER IRQ_Error
HandlerTIMER1 HANDLER IRQ_Error
HandlerTIMER2 HANDLER IRQ_Error
HandlerTIMER3 HANDLER IRQ_Error
HandlerTIMER4 HANDLER IRQ_Error
HandlerTIMER5 HANDLER ISR_Timer5 ; 作為系統節拍發生器使用.
HandlerURXD0 HANDLER IRQ_Error
HandlerURXD1 HANDLER IRQ_Error
HandlerIIC HANDLER IRQ_Error
HandlerSIO HANDLER IRQ_Error
HandlerUTXD0 HANDLER ISR_UTXD0 ; UART0 接收/發送中斷.
HandlerUTXD1 HANDLER IRQ_Error
HandlerRTC HANDLER IRQ_Error
HandlerADC HANDLER IRQ_Error
;/*
;*********************************************************************************************************
END
;*********************************************************************************************************
;*/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -