//====================================================================================
//文 件 名:Sys_IRQ.c
//功能描述: SPCE3200 40个中断源(硬件)的中断向量分支及软件中断处理。
// 使用时,用户不需要修改此文件中的内容
//维护记录: 2007年1月11日 v1.0 by hongyan.Feng
//====================================================================================
//===================================================
// 声明用户定义外部中断服务函数
//===================================================
extern void IRQ63(void);
extern void IRQ62(void);
extern void IRQ61(void);
extern void IRQ60(void);
extern void IRQ59(void);
extern void IRQ58(void);
extern void IRQ57(void);
extern void IRQ56(void);
extern void IRQ55(void);
extern void IRQ54(void);
extern void IRQ53(void);
extern void IRQ52(void);
extern void IRQ51(void);
extern void IRQ50(void);
extern void IRQ49(void);
extern void IRQ48(void);
extern void IRQ47(void);
extern void IRQ46(void);
extern void IRQ45(void);
extern void IRQ44(void);
extern void IRQ43(void);
extern void IRQ42(void);
extern void IRQ41(void);
extern void IRQ40(void);
extern void IRQ39(void);
extern void IRQ38(void);
extern void IRQ37(void);
extern void IRQ36(void);
extern void IRQ35(void);
extern void IRQ34(void);
extern void IRQ33(void);
extern void IRQ32(void);
extern void IRQ31(void);
extern void IRQ30(void);
extern void IRQ29(void);
extern void IRQ28(void);
extern void IRQ27(void);
extern void IRQ26(void);
extern void IRQ25(void);
extern void IRQ24(void);
//====================================================
// 语法格式:void intmsg(void)
// 功能描述: 软件中断及除SPCE3200 40个硬件中断之外的
// S+core内核硬件中断处理程序
// 入口参数: 无
// 出口参数: 无
//====================================================
void intmsg(void)
{
while(1);
}
//====================================================
// 语法格式:void irq_dispatch(unsigned int cp0_cause)
// 功能描述: 取SPCE3200 40个硬件中断的中断向量号,
// 根据中断向量号调用相应中断服务程序
// 入口参数: cp0_cause为S+core内核寄存器cr2的内容
// 其中第23~18位为63个硬件中断的中断请求(中断向量号)
// 出口参数: 无
//====================================================
void irq_dispatch(unsigned int cp0_cause)
{
int intvec=0;
intvec = (cp0_cause & 0x00FC0000)>>18;
// 取中断向量号
switch (intvec)
{
case 63: // DAC中断
IRQ63();
break;
case 62: // 保留
IRQ62();
break;
case 61: // 保留
IRQ61();
break;
case 60: // 保留
IRQ60();
break;
case 59: // MIC溢出中断
IRQ59();
break;
case 58: // ADC中断
IRQ58();
break;
case 57: // TMB中断
IRQ57();
break;
case 56:
IRQ56(); // Timer中断
break;
case 55:
IRQ55(); // TV vblanking start中断
break;
case 54:
IRQ54(); // LCD vblanking start中断
break;
case 53:
IRQ53(); // 保留
break;
case 52: // Light Gun中断
IRQ52();
break;
case 51: // CSI frame end中断
IRQ51();
break;
case 50: // CSI coordinate hit中断
IRQ50();
break;
case 49: // CSI motion frame end中断
IRQ49();
break;
case 48: // CSI capture done中断
IRQ48();
break;
case 47: // TV coordinate hit中断
IRQ47();
break;
case 46: // 保留
IRQ46();
break;
case 45: // USB host+device中断
IRQ45();
break;
case 44: // SIO中断
IRQ44();
break;
case 43: // SPI中断
IRQ43();
break;
case 42: // UART中断
IRQ42();
break;
case 41: // Nand中断
IRQ41();
break;
case 40: // SD中断
IRQ40();
break;
case 39: // I2C中断
IRQ39();
break;
case 38: // I2S中断
IRQ38();
break;
case 37: // APBDMA CH1中断
IRQ37();
break;
case 36: // APBDMA CH2中断
IRQ36();
break;
case 35: // LDM DMA中断
IRQ35();
break;
case 34: // BIN DMA中断
IRQ34();
break;
case 33: // APBDMA CH3中断
IRQ33();
break;
case 32: // APBDMA CH4中断
IRQ32();
break;
case 31: // RTC中断
IRQ31();
break;
case 30: // MP4中断
IRQ30();
break;
case 29: // C3--ECC Module中断
IRQ29();
break;
case 28: // GPIO中断
IRQ28();
break;
case 27: // BUFCTL and TVvblanking end中断
IRQ27();
break;
case 26: // 保留
IRQ26();
break;
case 25: // 保留
IRQ25();
break;
case 24: // 保留
IRQ24();
break;
default:
break;
}
return;
}