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

📄 sys_isr.s

📁 用OV7720制作摄像头的详细电路原理图
💻 S
字号:
//=========================================================// 文 件 名: Sys_isr.S// 功能描述: 中断向量处理文件//           使用时,用户不需要修改此文件中的内容// 维护记录: 2007年1月11日    V1.0     by hongyan.Feng//           2007年10月30日   V2.0     by Lijian (Add some registers to be saved)//=========================================================#define    SP        r0#define    AT        r1#define    BP        r2#define    LR        r3#define    A0        r4#define    A1        r5#define    A2        r6#define    A3        r7#define    T0        r8#define    T1        r9#define    T2        r10#define    T3        r11#define    S0        r12#define    S1        r13#define    S2        r14#define    S3        r15#define    S4        r16#define    S5        r17#define    S6        r18#define    S7        r19#define    S8        r20#define    S9        r21#define    T4        r22#define    T5        r23#define    T6        r24#define    T7        r25#define    T8        r26#define    T9        r27#define    R28       r28#define    JP        r29#define    K0        r30#define    K1        r31// CP0 register define#define CP0_STATUS   cr0#define CP0_COND     cr1#define CP0_CAUSE    cr2#define CP0_EPC      cr5#define CP0_EXCPVEC  cr3#define CP0_CCR      cr4#define CP0_BADVA    cr6#define CP0_WIRE     cr7#define CP0_INDEX    cr8#define CP0_CONTEXT  cr9#define CP0_RANDOM   cr10#define CP0_ENTRYHI  cr11#define CP0_ENTRYLO  cr12#define CP0_FMARLO   cr13#define CP0_FMARHI   cr14#define CP0_FMCR     cr15#define CP0_FFMR     cr16#define CP0_LLADDR   cr17#define CP0_PREV     cr18#define CP0_DREG     cr29#define CP0_DEPC     cr30#define CP0_DSAVE    cr31#define SPR_HI       sr1#define SPR_LO       sr2//specification define#define SR_CNT       sr0#define SR_LCR       sr1#define SR_SCR       sr2#define STACK_SIZE   32/* uC/OS-specific stuff from here on.. */#define E_SP         0*4#define E_AT         1*4#define E_BP         2*4#define E_LR         3*4#define E_A0         4*4#define E_A1         5*4#define E_A2         6*4#define E_A3         7*4#define E_T0         8*4#define E_T1         9*4#define E_T2         10*4#define E_T3         11*4#define E_S0         12*4#define E_S1         13*4#define E_S2         14*4#define E_S3         15*4#define E_S4         16*4#define E_S5         17*4#define E_S6         18*4#define E_S7         19*4#define E_S8         20*4#define E_S9         21*4#define E_T4         22*4#define E_T5         23*4#define E_T6         24*4#define E_T7         25*4#define E_T8         26*4#define E_T9         27*4#define E_R28        28*4#define E_JP         29*4#define E_K0         30*4#define E_K1         31*4#define E_CP0_STATUS 32*4#define E_CP0_COND   33*4#define E_CP0_CAUSE  34*4#define E_CP0_EPC    35*4#define E_SPR_HI     36*4#define E_SPR_LO     37*4#define E_SR_CNT     38*4#define E_SR_LCR     39*4#define E_SR_SCR     40*4#define E_SIZE       41*4 /* must be even */.section .exception_vec,"ax"   //定义异常中断段,在*.ld中已经定义了其起始地址为0xa00001fc//=========================================================// 定义两个软件中断向量入口//=========================================================.align 2norm_debug_vec:         //Normal debug异常向量入口    j norm_debug_service.align 2general_vec:            //General异常向量入口    j general_service//=========================================================// 定义63个硬件中断向量入口//=========================================================.align 2int1_vec:               //中断向量IRQ1入口    j int_service       //调用int_service函数.align 2int2_vec:               //中断向量IRQ2入口    j int_service       //调用int_service函数.align 2int3_vec:               //中断向量IRQ3入口    j int_service       //调用int_service函数.align 2int4_vec:               //中断向量IRQ4入口    j int_service       //调用int_service函数.align 2int5_vec:               //中断向量IRQ5入口    j int_service       //调用int_service函数.align 2int6_vec:               //中断向量IRQ6入口    j int_service       //调用int_service函数.align 2int7_vec:               //中断向量IRQ7入口    j int_service       //调用int_service函数.align 2int8_vec:               //中断向量IRQ8入口    j int_service       //调用int_service函数.align 2int9_vec:               //中断向量IRQ9入口    j int_service       //调用int_service函数.align 2int10_vec:              //中断向量IRQ10入口    j int_service       //调用int_service函数.align 2int11_vec:              //中断向量IRQ11入口    j int_service       //调用int_service函数.align 2int12_vec:              //中断向量IRQ12入口    j int_service       //调用int_service函数.align 2int13_vec:              //中断向量IRQ13入口    j int_service       //调用int_service函数.align 2int14_vec:              //中断向量IRQ14入口    j int_service       //调用int_service函数.align 2int15_vec:              //中断向量IRQ15入口    j int_service       //调用int_service函数.align 2int16_vec:              //中断向量IRQ16入口    j int_service       //调用int_service函数.align 2int17_vec:              //中断向量IRQ17入口    j int_service       //调用int_service函数.align 2int18_vec:              //中断向量IRQ18入口    j int_service       //调用int_service函数.align 2int19_vec:              //中断向量IRQ19入口    j int_service       //调用int_service函数.align 2int20_vec:              //中断向量IRQ20入口    j int_service       //调用int_service函数.align 2int21_vec:              //中断向量IRQ21入口    j int_service       //调用int_service函数.align 2int22_vec:              //中断向量IRQ22入口    j int_service       //调用int_service函数.align 2int23_vec:              //中断向量IRQ23入口    j int_service       //调用int_service函数.align 2int24_vec:              //(Reserved)中断向量IRQ24入口    j save_reg          //调用save_reg函数取得中断向量号.align 2int25_vec:              //(Reserved)中断向量IRQ25入口    j save_reg          //调用save_reg函数取得中断向量号.align 2int26_vec:              //(Reserved)中断向量IRQ26入口    j save_reg          //调用save_reg函数取得中断向量号.align 2int27_vec:              //(Bufctl + TV vblanking end)中断向量IRQ27入口    j save_reg          //调用save_reg函数取得中断向量号.align 2int28_vec:              //(GPIO)中断向量IRQ28入口    j save_reg          //调用save_reg函数取得中断向量号.align 2int29_vec:              //(C3--ECC Module)中断向量IRQ29入口    j save_reg          //调用save_reg函数取得中断向量号.align 2int30_vec:              //(MP4)中断向量IRQ30入口    j save_reg          //调用save_reg函数取得中断向量号.align 2int31_vec:              //(RTC)中断向量IRQ31入口    j save_reg          //调用save_reg函数取得中断向量号.align 2int32_vec:              //(APBDMA CH4)中断向量IRQ32入口    j save_reg          //调用save_reg函数取得中断向量号.align 2int33_vec:              //(APBDMA CH3)中断向量IRQ33入口    j save_reg          //调用save_reg函数取得中断向量号.align 2int34_vec:              //(BIN DMA)中断向量IRQ34入口    j save_reg          //调用save_reg函数取得中断向量号.align 2int35_vec:              //(LDM DMA)中断向量IRQ35入口    j save_reg          //调用save_reg函数取得中断向量号.align 2int36_vec:              //(APBDMA CH2)中断向量IRQ36入口    j save_reg          //调用save_reg函数取得中断向量号.align 2int37_vec:              //(APBDMA CH1)中断向量IRQ37入口    j save_reg          //调用save_reg函数取得中断向量号.align 2int38_vec:              //(I2S)中断向量IRQ38入口    j save_reg          //调用save_reg函数取得中断向量号.align 2int39_vec:              //(I2C)中断向量IRQ39入口    j save_reg          //调用save_reg函数取得中断向量号.align 2int40_vec:              //(SD)中断向量IRQ40入口    j save_reg          //调用save_reg函数取得中断向量号.align 2int41_vec:              //(Nand)中断向量IRQ41入口    j save_reg          //调用save_reg函数取得中断向量号.align 2int42_vec:              //(UART)中断向量IRQ42入口    j save_reg          //调用save_reg函数取得中断向量号.align 2int43_vec:              //(SPI)中断向量IRQ43入口    j save_reg          //调用save_reg函数取得中断向量号.align 2int44_vec:              //(SIO)中断向量IRQ44入口    j save_reg          //调用save_reg函数取得中断向量号.align 2int45_vec:              //(USB host+device)中断向量IRQ45入口    j save_reg          //调用save_reg函数取得中断向量号.align 2int46_vec:              //(Reserved)中断向量IRQ46入口    j save_reg          //调用save_reg函数取得中断向量号.align 2int47_vec:              //(TV coordinate hit)中断向量IRQ47入口    j save_reg          //调用save_reg函数取得中断向量号.align 2int48_vec:              //(CSI capture done)中断向量IRQ48入口    j save_reg          //调用save_reg函数取得中断向量号.align 2int49_vec:              //(CSI motion frame end)中断向量IRQ49入口    j save_reg          //调用save_reg函数取得中断向量号.align 2int50_vec:              //(CSI coordinate hit)中断向量IRQ50入口    j save_reg          //调用save_reg函数取得中断向量号.align 2int51_vec:              //(CSI frame end)中断向量IRQ51入口    j save_reg          //调用save_reg函数取得中断向量号.align 2int52_vec:              //(Light Gun)中断向量IRQ52入口    j save_reg          //调用save_reg函数取得中断向量号.align 2int53_vec:              //(Reserved)中断向量IRQ53入口    j save_reg          //调用save_reg函数取得中断向量号.align 2int54_vec:              //(LCD vblanking start)中断向量IRQ54入口    j save_reg          //调用save_reg函数取得中断向量号.align 2int55_vec:              //(TV vblanking start)中断向量IRQ55入口    j save_reg          //调用save_reg函数取得中断向量号.align 2int56_vec:              //(Timer)中断向量IRQ56入口    j save_reg          //调用save_reg函数取得中断向量号.align 2int57_vec:              //(TMB)中断向量IRQ57入口    j save_reg          //调用save_reg函数取得中断向量号.align 2int58_vec:              //(ADC)中断向量IRQ58入口    j save_reg          //调用save_reg函数取得中断向量号.align 2int59_vec:              //(MIC OV)中断向量IRQ59入口    j save_reg          //调用save_reg函数取得中断向量号.align 2int60_vec:              //(Reserved)中断向量IRQ60入口    j save_reg          //调用save_reg函数取得中断向量号.align 2int61_vec:              //(Reserved)中断向量IRQ61入口    j   save_reg        //调用save_reg函数取得中断向量号.align 2int62_vec:              //(Reserved)中断向量IRQ62入口    j save_reg          //调用save_reg函数取得中断向量号.align 2int63_vec:              //(DAC)中断向量IRQ63入口    j save_reg          //调用save_reg函数取得中断向量号.extern intmsg          //该函数在Sys_IRQ.c文件中定义//=========================================================// 软件中断服务函数//=========================================================norm_debug_service:     //软件中断1(Normal debug异常)中断服务程序    jl intmsg           //调用intmsg函数general_service:        //软件中断2(General异常)中断服务程序    jl intmsg           //调用intmsg函数int_service:    jl intmsg           //调用intmsg函数.extern irq_dispatch    //该函数在Sys_IRQ.c文件中定义.set r1//=========================================================// 汇编语言格式:save_reg// C 语 言 格式:void save_reg(void)// 功 能  描 述:中断服务函数,//              保护及恢复现场,调用irq_dispatch函数// 入 口  参 数:无// 出 口  参 数:无//=========================================================save_reg:    subi    SP, E_SIZE    /* push general registers to stack */    sw AT, [SP,E_AT]    sw BP, [SP,E_BP]    sw LR, [SP,E_LR]    sw A0, [SP,E_A0]    sw A1, [SP,E_A1]    sw A2, [SP,E_A2]    sw A3, [SP,E_A3]    sw T0, [SP,E_T0]    sw T1, [SP,E_T1]    sw T2, [SP,E_T2]    sw T3, [SP,E_T3]    sw S0, [SP,E_S0]    sw S1, [SP,E_S1]    sw S2, [SP,E_S2]    sw S3, [SP,E_S3]    sw S4, [SP,E_S4]    sw S5, [SP,E_S5]    sw S6, [SP,E_S6]    sw S7, [SP,E_S7]    sw S8, [SP,E_S8]    sw S9, [SP,E_S9]    sw T4, [SP,E_T4]    sw T5, [SP,E_T5]    sw T6, [SP,E_T6]    sw T7, [SP,E_T7]    sw T8, [SP,E_T8]    sw T9, [SP,E_T9]    sw R28,[SP,E_R28]    sw JP, [SP,E_JP]    sw K0, [SP,E_K0]    sw K1, [SP,E_K1]    /* push CP0 registers to stack */    mfcr    S1, CP0_COND    sw S1, [SP,E_CP0_COND]    mfcr    S3, CP0_EPC    sw S3, [SP,E_CP0_EPC]    mfcr    S4, CP0_STATUS    sw S4, [SP,E_CP0_STATUS]    /* push special control registers to stack */    mfceh   S1    sw S1, [SP,E_SPR_HI]    mfcel   S1    sw S1, [SP,E_SPR_LO]    mfsr    S1, SR_CNT    sw S1, [SP,E_SR_CNT]    mfsr    S1, SR_LCR    sw S1, [SP,E_SR_LCR]    mfsr    S1, SR_SCR    sw S1, [SP,E_SR_SCR]    mfcr    A0, CP0_CAUSE    jl irq_dispatchno_ctxsw:    /* pop special registers from stack */    lw      T0, [SP, E_SPR_HI]    mtceh   T0    lw      T0, [SP, E_SPR_LO]    mtcel   T0    lw      T0, [SP, E_SR_CNT]    mtsr    T0, SR_CNT    lw      T0, [SP, E_SR_LCR]    mtsr    T0, SR_LCR    lw      T0, [SP, E_SR_SCR]    mtsr    T0, SR_SCR    /* pop general registers from stack */    lw AT, [SP,E_AT]    lw BP, [SP,E_BP]    lw LR, [SP,E_LR]    lw A0, [SP,E_A0]    lw A1, [SP,E_A1]    lw A2, [SP,E_A2]    lw A3, [SP,E_A3]    lw T2, [SP,E_T2]    lw T3, [SP,E_T3]    lw S0, [SP,E_S0]    lw S1, [SP,E_S1]    lw S2, [SP,E_S2]    lw S3, [SP,E_S3]    lw S4, [SP,E_S4]    lw S5, [SP,E_S5]    lw S6, [SP,E_S6]    lw S7, [SP,E_S7]    lw S8, [SP,E_S8]    lw S9, [SP,E_S9]    lw T4, [SP,E_T4]    lw T5, [SP,E_T5]    lw T6, [SP,E_T6]    lw T7, [SP,E_T7]    lw T8, [SP,E_T8]    lw T9, [SP,E_T9]    lw R28,[SP,E_R28]    lw JP, [SP,E_JP]    lw K0, [SP,E_K0]    lw K1, [SP,E_K1]    /* pop CP0 registers from stack */    lw T0, [SP,E_CP0_COND]    mtcr T0, CP0_COND    lw T0, [SP,E_CP0_EPC]    mtcr  T0, CP0_EPC    lw T0, [SP,E_CP0_STATUS]    mtcr T0, CP0_STATUS    pflush    lw T0, [SP,E_T0]    lw T1, [SP,E_T1]    addi SP, E_SIZEscore_fun_rte1:    rte

⌨️ 快捷键说明

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