?? sys_irq.c
字號:
#include "Include/Sys_Global.h"
#include "Include/PPU_Control.h"
#include "..\SysLib_Basic\Include\SPU_Control.h"
#include "..\SysLib_Basic\Include\Sys_Register.h"
void IRQ63();
void IRQ62();
void IRQ61();
void IRQ60();
void IRQ59();
void IRQ56();
void IRQ53();
void IRQ51();
void IRQ50();
void IRQ49();
void IRQ48();
void IRQ30();
void IRQ22();
void intmsg();
extern int framecnt;
//extern unsigned int old_yuv, md_frame_int;
extern U32 md_frame_int;
unsigned int MP3_Isr=0;
void irq_dispatch(U32 cp0_cause )
{
S32 intvec;
intvec = (cp0_cause & 0x00FC0000)>>18;
switch (intvec) {
case 63: // TVE IRQ 1
IRQ63();
break;
case 62: // TVE IRQ 2
IRQ62();
break;
case 61: // TVE IRQ 3
IRQ61();
break;
case 60: // TVE IRQ 4
IRQ60();
break;
case 59: // LCD Interrupt
IRQ59();
break;
case 56:
IRQ56(); // timer irq
break;
case 53: // PPU Vertical IRQ
IRQ53();
break;
case 51: // Sensor IRQ 0/1
IRQ51();
break;
case 50: // Sensor IRQ 2
IRQ50();
break;
case 49: // Sensor IRQ 3
IRQ49();
break;
case 48: // Sensor IRQ 4
IRQ48();
break;
case 22: // BUFCTL IRQ
IRQ22();
break;
case 30:
IRQ30();
break;
}
return;
}
void intmsg(void)
{
while(1);
}
extern short TempPCM[];
extern int Need_PCM_Flag;
extern void FillSoftFIFO(unsigned short *TempPCM);
void IRQ63(void)
{
/* FillSoftFIFO(TempPCM);
Need_PCM_Flag = 1; // Set flag to start MP3 decoder
*P_SPU_SoftIRQEN = 0xC000 | 0x0004 | 0x0003; // for stereo, 8KBytes
MP3_Service_Loop(); // add by jackie
MP3_Service_Loop();
MP3_Service_Loop(); */
// print1("IRQ 63\n");
}
extern void SPU_IRQ_Service(void);
void IRQ62(void) //SPU Beat Count ISR
{
// unsigned int TempValue;
// (*P_SPU_BeatCnt)
// (*P_SPU_BeatCnt) |= 0x4FFF;
// TempValue = (*P_SPU_BeatCnt);
// TempValue &= 0x3FFF; //Write 0 to BeatIRQEn to clear the Beat Count IRQ Flag.
// *P_SPU_BeatCnt = TempValue;
SPU_IRQ_Service();
}
void IRQ61(void)
{
}
void IRQ60(void)
{
}
void IRQ59(void)
{
}
void IRQ48(void)
{
// if ((*P_CSI_IRQSTS & 0x63) == 0)
// print2("CSI Wrong Interrupt 57: ", 0, *P_CSI_IRQSTS);
if (*P_CSI_IRQSTS & 0x1) {
// print1("TG_OF Int\n");
*P_CSI_IRQSTS = 0x1;
}
if (*P_CSI_IRQSTS & 0x2) {
// print1("CAP_ACK Int\n");
*P_CSI_IRQSTS = 0x2;
}
if (*P_CSI_IRQSTS & 0x20) {
// print1("CSI Frame Loss Int\n");
*P_CSI_IRQSTS = 0x20;
}
if (*P_CSI_IRQSTS & 0x40) {
// print1("CSI MD_UF Int\n");
*P_CSI_IRQSTS = 0x40;
}
}
void IRQ51(void)
{
// if ((*P_CSI_IRQSTS & 0x4) == 0)
// print2("CSI Wrong Interrupt 56: ", 0, *P_CSI_IRQSTS);
*P_CSI_IRQSTS = 0x4;
// framecnt++;
}
void IRQ49(void)
{
// if ((*P_CSI_IRQSTS & 0x8) == 0)
// print2("CSI Wrong Interrupt 55: ", 0, *P_CSI_IRQSTS);
*P_CSI_IRQSTS = 0x8;
md_frame_int = 1;
//CSI Motion Dectect FRAME
}
void IRQ50(void)
{
// U32 new_yuv, diff;
// if ((*P_CSI_IRQSTS & 0x10) == 0)
// print2("CSI Wrong Interrupt 54: ", 0, *P_CSI_IRQSTS);
*P_CSI_IRQSTS = 0x10;
// new_yuv = *P_CSI_MD_YUV;
// new_yuv = (new_yuv>>16);
// if (new_yuv >= old_yuv)
// diff = new_yuv - old_yuv;
// else
// diff = old_yuv - new_yuv;
//
// print3("RGB = ", 0, *P_CSI_MD_RGB);
// old_yuv = new_yuv;
}
void IRQ22(void)
{
// print1("IRQ 22\n");
*(U32*)(0x88090028) = 0;
}
void IRQ53(void)
{
// print1("IRQ 53\n");
*P_IRQ_STATUS = 0x00000001;
PPU_Service();
}
void IRQ56(void)
{
static int counter = 0;
// print1("Timer 0 IRQ\n"); // 1~2ms
counter+=1;
if( counter == 5 )
{
// print1("Timer 1 IRQ\n"); // 5~10ms
counter = 0;
}
*P_TM0_CTRL = TIMER_ON | TIMER_IRQ_ON | TIMER_IRQ_CLR;
}
void IRQ30(void)
{
unsigned int a,b;
//P_Int_Mask
a=*P_Int_clr;
b=a&0x10;
*P_Int_clr=a;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -