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

📄 sys_isr.s

📁 凌阳SPCE3200 系统开发板随机自带源程序。共安排了32个子目录
💻 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:										//(Reserved)中断向量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

⌨️ 快捷键说明

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