?? sys_isr.s
字號:
//=========================================================
// 文 件 名: Sys_isr.S
// 功能描述: 中斷向量處理文件
// 使用時,用戶不需要修改此文件中的內容
// 維護記錄: 2007年1月11日 V1.0 by hongyan.Feng
//=========================================================
#define SP r0
.section .exception_vec,"ax" //定義異常中斷段,在*.ld中已經定義了其起始地址為0xa00001fc
//=========================================================
// 定義兩個軟件中斷向量入口
//=========================================================
.align 2
norm_debug_vec: //Normal debug異常向量入口
j norm_debug_service
.align 2
general_vec: //General異常向量入口
j general_service
//=========================================================
// 定義63個硬件中斷向量入口
//=========================================================
.align 2
int1_vec: //中斷向量IRQ1入口
j int_service //調用int_service函數
.align 2
int2_vec: //中斷向量IRQ2入口
j int_service //調用int_service函數
.align 2
int3_vec: //中斷向量IRQ3入口
j int_service //調用int_service函數
.align 2
int4_vec: //中斷向量IRQ4入口
j int_service //調用int_service函數
.align 2
int5_vec: //中斷向量IRQ5入口
j int_service //調用int_service函數
.align 2
int6_vec: //中斷向量IRQ6入口
j int_service //調用int_service函數
.align 2
int7_vec: //中斷向量IRQ7入口
j int_service //調用int_service函數
.align 2
int8_vec: //中斷向量IRQ8入口
j int_service //調用int_service函數
.align 2
int9_vec: //中斷向量IRQ9入口
j int_service //調用int_service函數
.align 2
int10_vec: //中斷向量IRQ10入口
j int_service //調用int_service函數
.align 2
int11_vec: //中斷向量IRQ11入口
j int_service //調用int_service函數
.align 2
int12_vec: //中斷向量IRQ12入口
j int_service //調用int_service函數
.align 2
int13_vec: //中斷向量IRQ13入口
j int_service //調用int_service函數
.align 2
int14_vec: //中斷向量IRQ14入口
j int_service //調用int_service函數
.align 2
int15_vec: //中斷向量IRQ15入口
j int_service //調用int_service函數
.align 2
int16_vec: //中斷向量IRQ16入口
j int_service //調用int_service函數
.align 2
int17_vec: //中斷向量IRQ17入口
j int_service //調用int_service函數
.align 2
int18_vec: //中斷向量IRQ18入口
j int_service //調用int_service函數
.align 2
int19_vec: //中斷向量IRQ19入口
j int_service //調用int_service函數
.align 2
int20_vec: //中斷向量IRQ20入口
j int_service //調用int_service函數
.align 2
int21_vec: //中斷向量IRQ21入口
j int_service //調用int_service函數
.align 2
int22_vec: //中斷向量IRQ22入口
j int_service //調用int_service函數
.align 2
int23_vec: //中斷向量IRQ23入口
j int_service //調用int_service函數
.align 2
int24_vec: //(Reserved)中斷向量IRQ24入口
j save_reg //調用save_reg函數取得中斷向量號
.align 2
int25_vec: //(Reserved)中斷向量IRQ25入口
j save_reg //調用save_reg函數取得中斷向量號
.align 2
int26_vec: //(Reserved)中斷向量IRQ26入口
j save_reg //調用save_reg函數取得中斷向量號
.align 2
int27_vec: //(Bufctl + TV vblanking end)中斷向量IRQ27入口
j save_reg //調用save_reg函數取得中斷向量號
.align 2
int28_vec: //(GPIO)中斷向量IRQ28入口
j save_reg //調用save_reg函數取得中斷向量號
.align 2
int29_vec: //(C3--ECC Module)中斷向量IRQ29入口
j save_reg //調用save_reg函數取得中斷向量號
.align 2
int30_vec: //(MP4)中斷向量IRQ30入口
j save_reg //調用save_reg函數取得中斷向量號
.align 2
int31_vec: //(RTC)中斷向量IRQ31入口
j save_reg //調用save_reg函數取得中斷向量號
.align 2
int32_vec: //(APBDMA CH4)中斷向量IRQ32入口
j save_reg //調用save_reg函數取得中斷向量號
.align 2
int33_vec: //(APBDMA CH3)中斷向量IRQ33入口
j save_reg //調用save_reg函數取得中斷向量號
.align 2
int34_vec: //(BIN DMA)中斷向量IRQ34入口
j save_reg //調用save_reg函數取得中斷向量號
.align 2
int35_vec: //(LDM DMA)中斷向量IRQ35入口
j save_reg //調用save_reg函數取得中斷向量號
.align 2
int36_vec: //(APBDMA CH2)中斷向量IRQ36入口
j save_reg //調用save_reg函數取得中斷向量號
.align 2
int37_vec: //(APBDMA CH1)中斷向量IRQ37入口
j save_reg //調用save_reg函數取得中斷向量號
.align 2
int38_vec: //(I2S)中斷向量IRQ38入口
j save_reg //調用save_reg函數取得中斷向量號
.align 2
int39_vec: //(I2C)中斷向量IRQ39入口
j save_reg //調用save_reg函數取得中斷向量號
.align 2
int40_vec: //(SD)中斷向量IRQ40入口
j save_reg //調用save_reg函數取得中斷向量號
.align 2
int41_vec: //(Nand)中斷向量IRQ41入口
j save_reg //調用save_reg函數取得中斷向量號
.align 2
int42_vec: //(UART)中斷向量IRQ42入口
j save_reg //調用save_reg函數取得中斷向量號
.align 2
int43_vec: //(SPI)中斷向量IRQ43入口
j save_reg //調用save_reg函數取得中斷向量號
.align 2
int44_vec: //(SIO)中斷向量IRQ44入口
j save_reg //調用save_reg函數取得中斷向量號
.align 2
int45_vec: //(USB host+device)中斷向量IRQ45入口
j save_reg //調用save_reg函數取得中斷向量號
.align 2
int46_vec: //(Reserved)中斷向量IRQ46入口
j save_reg //調用save_reg函數取得中斷向量號
.align 2
int47_vec: //(TV coordinate hit)中斷向量IRQ47入口
j save_reg //調用save_reg函數取得中斷向量號
.align 2
int48_vec: //(CSI capture done)中斷向量IRQ48入口
j save_reg //調用save_reg函數取得中斷向量號
.align 2
int49_vec: //(CSI motion frame end)中斷向量IRQ49入口
j save_reg //調用save_reg函數取得中斷向量號
.align 2
int50_vec: //(CSI coordinate hit)中斷向量IRQ50入口
j save_reg //調用save_reg函數取得中斷向量號
.align 2
int51_vec: //(CSI frame end)中斷向量IRQ51入口
j save_reg //調用save_reg函數取得中斷向量號
.align 2
int52_vec: //(Light Gun)中斷向量IRQ52入口
j save_reg //調用save_reg函數取得中斷向量號
.align 2
int53_vec: //(Reserved)中斷向量IRQ53入口
j save_reg //調用save_reg函數取得中斷向量號
.align 2
int54_vec: //(LCD vblanking start)中斷向量IRQ54入口
j save_reg //調用save_reg函數取得中斷向量號
.align 2
int55_vec: //(TV vblanking start)中斷向量IRQ55入口
j save_reg //調用save_reg函數取得中斷向量號
.align 2
int56_vec: //(Timer)中斷向量IRQ56入口
j save_reg //調用save_reg函數取得中斷向量號
.align 2
int57_vec: //(TMB)中斷向量IRQ57入口
j save_reg //調用save_reg函數取得中斷向量號
.align 2
int58_vec: //(ADC)中斷向量IRQ58入口
j save_reg //調用save_reg函數取得中斷向量號
.align 2
int59_vec: //(MIC OV)中斷向量IRQ59入口
j save_reg //調用save_reg函數取得中斷向量號
.align 2
int60_vec: //(Reserved)中斷向量IRQ60入口
j save_reg //調用save_reg函數取得中斷向量號
.align 2
int61_vec: //(Reserved)中斷向量IRQ61入口
j save_reg //調用save_reg函數取得中斷向量號
.align 2
int62_vec: //(Reserved)中斷向量IRQ62入口
j save_reg //調用save_reg函數取得中斷向量號
.align 2
int63_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, 38*4 //保存現場:保存r1~r31寄存器,保存條件寄存器cr1和中斷計數器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 //通過cr2的b23~b16讀取中斷請求的向量號,并把此數據作為調用函數的入口參數
jl irq_dispatch //調用irq_dispatch函數,此函數在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
.text
.global invalid_cache
invalid_cache:
cache 0x18, [r4,0]
br r3
.global _INT_ON
_INT_ON:
li r7, 1
mfcr r6, cr0
bitset.c r6, r7, 0
mtcr r6, cr0
nop
nop
nop
nop
nop
br r3
.global _INT_OFF
_INT_OFF:
li r7, 0
mfcr r6, cr0
bitset.c r6, r7, 0
mtcr r6, cr0
nop
nop
nop
nop
nop
br r3
//=========================================================
// Sys_isr.S 文件結束
//=========================================================
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -