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

📄 irq_isr.s

📁 S3C2410学习的基础资料 大部分实验源码及工程
💻 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 + -