📄 sys_isr.s
字号:
//=========================================================
// File Name: Sys_isr.S
// Description: IRQ process file
// when using, user does not need to modify the contents of file.
// Update: 2007.1.11 V1.0 by hongyan.Feng
//=========================================================
#define SP r0
.section .exception_vec,"ax" //Define abnormal section, the start address 0xa00001fc has been defined in *.ld
//=========================================================
// define two software interrupt entries
//=========================================================
.align 2
norm_debug_vec: //Normal debug abnormal interrupt entry
j norm_debug_service
.align 2
general_vec: //General abnormal interrupt entry
j general_service
//=========================================================
// define 63 hardware interrupt entries
//=========================================================
.align 2
int1_vec: //IRQ1 entry
j int_service //Call int_service
.align 2
int2_vec: //IRQ2 entry
j int_service //Call int_service
.align 2
int3_vec: //IRQ3 entry
j int_service //Call int_service
.align 2
int4_vec: //IRQ4 entry
j int_service //Call int_service
.align 2
int5_vec: //IRQ5 entry
j int_service //Call int_service
.align 2
int6_vec: //IRQ6 entry
j int_service //Call int_service
.align 2
int7_vec: //IRQ7 entry
j int_service //Call int_service
.align 2
int8_vec: //IRQ8 entry
j int_service //Call int_service
.align 2
int9_vec: //IRQ9 entry
j int_service //Call int_service
.align 2
int10_vec: //IRQ10 entry
j int_service //Call int_service
.align 2
int11_vec: // RQ11 entry
j int_service //Call int_service
.align 2
int12_vec: //IRQ12 entry
j int_service //Call int_service
.align 2
int13_vec: //IRQ13 entry
j int_service //Call int_service
.align 2
int14_vec: //IRQ14 entry
j int_service //Call int_service
.align 2
int15_vec: //IRQ15 entry
j int_service //Call int_service
.align 2
int16_vec: //IRQ16 entry
j int_service //Call int_service
.align 2
int17_vec: //IRQ17 entry
j int_service //Call int_service
.align 2
int18_vec: //IRQ18 entry
j int_service //Call int_service
.align 2
int19_vec: //IRQ19 entry
j int_service //Call int_service
.align 2
int20_vec: //IRQ20 entry
j int_service //Call int_service
.align 2
int21_vec: //IRQ21 entry
j int_service //Call int_service
.align 2
int22_vec: //IRQ22 entry
j int_service //Call int_service
.align 2
int23_vec: //IRQ23 entry
j int_service //Call int_service
.align 2
int24_vec: //(Reserved) IRQ24 entry
j save_reg //Call save_reg to get interrupt vector
.align 2
int25_vec: //(Reserved) IRQ25 entry
j save_reg //Call save_reg to get interrupt vector
.align 2
int26_vec: //(Reserved) IRQ26 entry
j save_reg //Call save_reg to get interrupt vector
.align 2
int27_vec: //(Bufctl + TV vblanking end) IRQ27 entry
j save_reg //Call save_reg to get interrupt vector
.align 2
int28_vec: //(GPIO) IRQ28 entry
j save_reg //Call save_reg to get interrupt vector
.align 2
int29_vec: //(C3--ECC Module) IRQ29 entry
j save_reg //Call save_reg to get interrupt vector
.align 2
int30_vec: //(MP4) IRQ30 entry
j save_reg //Call save_reg to get interrupt vector
.align 2
int31_vec: //(RTC) IRQ31 entry
j save_reg //Call save_reg to get interrupt vector
.align 2
int32_vec: //(APBDMA CH4) IRQ32 entry
j save_reg //Call save_reg to get interrupt vector
.align 2
int33_vec: //(APBDMA CH3) IRQ33 entry
j save_reg //Call save_reg to get interrupt vector
.align 2
int34_vec: //(BIN DMA) IRQ34 entry
j save_reg //Call save_reg to get interrupt vector
.align 2
int35_vec: //(LDM DMA) IRQ35 entry
j save_reg //Call save_reg to get interrupt vector
.align 2
int36_vec: //(APBDMA CH2) IRQ36 entry
j save_reg //Call save_reg to get interrupt vector
.align 2
int37_vec: //(APBDMA CH1) IRQ37 entry
j save_reg //Call save_reg to get interrupt vector
.align 2
int38_vec: //(I2S) IRQ38 entry
j save_reg //Call save_reg to get interrupt vector
.align 2
int39_vec: //(I2C) IRQ39 entry
j save_reg //Call save_reg to get interrupt vector
.align 2
int40_vec: //(SD) IRQ40 entry
j save_reg //Call save_reg to get interrupt vector
.align 2
int41_vec: //(Nand) IRQ41 entry
j save_reg //Call save_reg to get interrupt vector
.align 2
int42_vec: //(UART) IRQ42 entry
j save_reg //Call save_reg to get interrupt vector
.align 2
int43_vec: //(SPI) IRQ43 entry
j save_reg //Call save_reg to get interrupt vector
.align 2
int44_vec: //(SIO) IRQ44 entry
j save_reg //Call save_reg to get interrupt vector
.align 2
int45_vec: //(USB host+device) IRQ45 entry
j save_reg //Call save_reg to get interrupt vector
.align 2
int46_vec: //(Reserved) IRQ46 entry
j save_reg //Call save_reg to get interrupt vector
.align 2
int47_vec: //(TV coordinate hit) IRQ47 entry
j save_reg //Call save_reg to get interrupt vector
.align 2
int48_vec: //(CSI capture done) IRQ48 entry
j save_reg //Call save_reg to get interrupt vector
.align 2
int49_vec: //(CSI motion frame end) IRQ49 entry
j save_reg //Call save_reg to get interrupt vector
.align 2
int50_vec: //(CSI coordinate hit) IRQ50 entry
j save_reg //Call save_reg to get interrupt vector
.align 2
int51_vec: //(CSI frame end) IRQ51 entry
j save_reg //Call save_reg to get interrupt vector
.align 2
int52_vec: //(Light Gun) IRQ52 entry
j save_reg //Call save_reg to get interrupt vector
.align 2
int53_vec: //(Reserved) IRQ53 entry
j save_reg //Call save_reg to get interrupt vector
.align 2
int54_vec: //(LCD vblanking start) IRQ54 entry
j save_reg //Call save_reg to get interrupt vector
.align 2
int55_vec: //(TV vblanking start) IRQ55 entry
j save_reg //Call save_reg to get interrupt vector
.align 2
int56_vec: //(Timer) IRQ56 entry
j save_reg //Call save_reg to get interrupt vector
.align 2
int57_vec: //(TMB) IRQ57 entry
j save_reg //Call save_reg to get interrupt vector
.align 2
int58_vec: //(ADC) IRQ58 entry
j save_reg //Call save_reg to get interrupt vector
.align 2
int59_vec: //(MIC OV) IRQ59 entry
j save_reg //Call save_reg to get interrupt vector
.align 2
int60_vec: //(Reserved) IRQ60 entry
j save_reg //Call save_reg to get interrupt vector
.align 2
int61_vec: //(Reserved) IRQ61 entry
j save_reg //Call save_reg to get interrupt vector
.align 2
int62_vec: //(Reserved) IRQ62 entry
j save_reg //Call save_reg to get interrupt vector
.align 2
int63_vec: //(DAC) IRQ63 entry
j save_reg //Call save_reg to get interrupt vector
.extern intmsg //This function is defined in Sys_IRQ.c
###########################################################
# Software ISR
###########################################################
norm_debug_service: //Software interrupt 1(Normal debug abnormal)ISR
jl intmsg //Call intmsg function
general_service: //Software interrupt 2(General abnormal)ISR
jl intmsg //Call intmsg function
int_service:
jl intmsg //Call intmsg function
.extern irq_dispatch //This function is defined in Sys_IRQ.c
.set r1
##########################################################
# assemble language format:save_reg
# C format:void save_reg(void)
# Description:ISR:protect and recover field, Call irq_dispatch
# Input Arguments: None
# Output Arguments: None
##########################################################
save_reg:
subi SP, 38*4 //Save register:save r1~r31 registers,save condition register cr1 and interruput counter cr5
sw r1, [SP, 1*4]
sw r2, [SP, 2*4]
sw r3, [SP, 3*4]
sw r4, [SP, 4*4]
sw r5, [SP, 5*4]
sw r6, [SP, 6*4]
sw r7, [SP, 7*4]
sw r8, [SP, 8*4]
sw r9, [SP, 9*4]
sw r10, [SP, 10*4]
sw r11, [SP, 11*4]
sw r12, [SP, 12*4]
sw r13, [SP, 13*4]
sw r14, [SP, 14*4]
sw r15, [SP, 15*4]
sw r16, [SP, 16*4]
sw r17, [SP, 17*4]
sw r18, [SP, 18*4]
sw r19, [SP, 19*4]
sw r20, [SP, 20*4]
sw r21, [SP, 21*4]
sw r22, [SP, 22*4]
sw r23, [SP, 23*4]
sw r24, [SP, 24*4]
sw r25, [SP, 25*4]
sw r26, [SP, 26*4]
sw r27, [SP, 27*4]
sw r28, [SP, 28*4]
sw r29, [SP, 29*4]
sw r30, [SP, 30*4]
sw r31, [SP, 31*4]
mfcr r13, cr1
mfcr r15, cr5
sw r13, [SP, 33*4]
sw r15, [SP, 35*4]
mfcr r4, cr2 //Read IRQ vectors through b23~b16 in cr2, and take them as the entry parameters of function to be called.
jl irq_dispatch //Call irq_dispatch funtion:which has been defined in Sys_IRQ.c.
lw r1, [SP, 1*4]
lw r2, [SP, 2*4]
lw r3, [SP, 3*4]
lw r4, [SP, 4*4]
lw r5, [SP, 5*4]
lw r6, [SP, 6*4]
lw r7, [SP, 7*4]
lw r8, [SP, 8*4]
lw r9, [SP, 9*4]
lw r10, [SP, 10*4]
lw r11, [SP, 11*4]
lw r12, [SP, 12*4]
lw r13, [SP, 13*4]
lw r14, [SP, 14*4]
lw r15, [SP, 15*4]
lw r16, [SP, 16*4]
lw r17, [SP, 17*4]
lw r18, [SP, 18*4]
lw r19, [SP, 19*4]
lw r20, [SP, 20*4]
lw r21, [SP, 21*4]
lw r22, [SP, 22*4]
lw r23, [SP, 23*4]
lw r24, [SP, 24*4]
lw r25, [SP, 25*4]
lw r26, [SP, 26*4]
lw r27, [SP, 27*4]
lw r28, [SP, 28*4]
lw r29, [SP, 29*4]
lw r30, [SP, 30*4]
lw r31, [SP, 31*4]
lw r30, [SP, 33*4]
lw r31, [SP, 35*4]
mtcr r30, cr1
mtcr r31, cr5
addi SP, 38*4
rte
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -