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

📄 sys_isr.s

📁 Taiwan sunplus develop spce3200, it is a test program ----- testboard source code
💻 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 + -