📄 irq_isr.s
字号:
;/********************************************************************************************************
;* 文件: IRQ_ISR.S.
;* 描述: IRQ 中断服务程序入口.
;* 编写: bobey
;********************************************************************************************************/
GET S3C2410SFR.S
MACRO
$INT_Source ISR_Function $ISR_Fun
IMPORT $ISR_Fun
DCD $ISR_Fun
MEND
;/**********************************************************************************************************
;* 功能: 1. 定义各 IRQ 中断服务程序入口地址, 未用中断请将服务函数指向 Default_IRQ_ISR.
;* 2. 中断服务函数请参考 OS_TIMER4_ISR 编写.
;**********************************************************************************************************/
EXPORT HandlerIRQ
AREA __IRQ_ISR,CODE,READONLY
ISR_Table
EINT0_______0 ISR_Function Default_IRQ_ISR
EINT1_______1 ISR_Function Default_IRQ_ISR
EINT2_______2 ISR_Function Default_IRQ_ISR
EINT3_______3 ISR_Function Default_IRQ_ISR
EINT4_7_____4 ISR_Function Default_IRQ_ISR
EINT8_23____5 ISR_Function Default_IRQ_ISR
Reserved____6 ISR_Function Default_IRQ_ISR
nBATT_FLT___7 ISR_Function Default_IRQ_ISR
INT_TICK____8 ISR_Function Default_IRQ_ISR
INT_WDT_____9 ISR_Function Default_IRQ_ISR
INT_TIMER0__10 ISR_Function Default_IRQ_ISR
INT_TIMER1__11 ISR_Function Default_IRQ_ISR
INT_TIMER2__12 ISR_Function Default_IRQ_ISR
INT_TIMER3__13 ISR_Function Default_IRQ_ISR
INT_TIMER4__14 ISR_Function OS_TIMER4_ISR ; uC/OS 系统节拍服务函数.
INT_UART2___15 ISR_Function Default_IRQ_ISR
INT_LCD_____16 ISR_Function Default_IRQ_ISR
INT_DMA0____17 ISR_Function Default_IRQ_ISR
INT_DMA1____18 ISR_Function Default_IRQ_ISR
INT_DMA2____19 ISR_Function Default_IRQ_ISR
INT_DMA3____20 ISR_Function Default_IRQ_ISR
INT_SDI_____21 ISR_Function Default_IRQ_ISR
INT_SPI0____22 ISR_Function Default_IRQ_ISR
INT_UART1___23 ISR_Function Default_IRQ_ISR
Reserved____24 ISR_Function Default_IRQ_ISR
INT_USBD____25 ISR_Function Default_IRQ_ISR
INT_USBH____26 ISR_Function Default_IRQ_ISR
INT_IIC_____27 ISR_Function Default_IRQ_ISR
INT_UART0___28 ISR_Function ISR_Uart0 ; UART0 中断服务函数.
INT_SPI1____29 ISR_Function Default_IRQ_ISR
INT_RTC_____30 ISR_Function Default_IRQ_ISR
INT_ADC_____31 ISR_Function Default_IRQ_ISR
;/**********************************************************************************************************
;* 函数: HandlerIRQ.
;* 功能: 完成 IRQ 中断程序的矢量转移及堆栈管理.
;**********************************************************************************************************/
IMPORT OSTCBCur ; 指向当前任务TCB的指针
IMPORT OSTCBHighRdy ; 指向将要运行的任务TCB的指针
IMPORT __OSIntCtxSw ; 中断级任务切换函数.
IMPORT OsEnterSum
HandlerIRQ
SUB LR, LR, #4 ; 计算返回地址.
STMFD SP!, {R0-R12, LR}
LDR R0, =OsEnterSum
LDR R1, =0x01 ; 避免中断嵌套.
STR R1, [R0]
LDR LR, =HandlerIRQ01+4
MRS R0, SPSR
STMFD SP!, {R0} ; 保存 SPSR.
MRS R0, CPSR
MSR SPSR_cxsf, R0
LDR R0, =ISR_Table
LDR R1, =INTOFFSET ; INTERRUPT OFFSET.
LDR R1, [R1]
ADD R0, R0, R1,LSL #2
LDR PC, [R0] ; 矢量跳转.
HandlerIRQ01
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 ; 进行中断级任务切换.
;/********************************************************************************************************
END
;*********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -