📄 user_irq.c
字号:
//====================================================================================
//文 件 名:User_IRQ.c
//功能描述: SPCE3200 40个中断源的用户中断服务函数。
// 根据中断向量号,用户可编写相应中断服务函数
//维护记录: 2007年1月11日 v1.0 by hongyan.Feng
//====================================================================================
#include "SPCE3200_Register.h"
#include "SPCE3200_Constant.h"
#include ".\MP4_Codec\MP4_Codec.h"
#include ".\System\BLNDMA.h"
//====================================================
// 语法格式:void IRQ63(void)
// 功能描述: 保留中断向量中断服务函数
// 入口参数: 无
// 出口参数: 无
//====================================================
extern unsigned char g_ucMP3IrqFlag;
extern int SP4_MP3Need_PCM_Flag;
extern short SP4_TempPCM[];
void IRQ63(void)
{
g_ucMP3IrqFlag = 1;
SP4_MP3Need_PCM_Flag = 1; // Set flag to start MP3 decoder
SP4_FillSoftFIFO(SP4_TempPCM);
*P_DAC_INT_STATUS = 0xC000 | 0x0004 | 0x0003; // for stereo, 8KBytes
}
//====================================================
// 语法格式:void IRQ62(void)
// 功能描述: 保留中断向量中断服务函数
// 入口参数: 无
// 出口参数: 无
//====================================================
void IRQ62(void)
{
}
//====================================================
// 语法格式:void IRQ61(void)
// 功能描述: 保留中断向量中断服务函数
// 入口参数: 无
// 出口参数: 无
//====================================================
void IRQ61(void)
{
}
//====================================================
// 语法格式:void IRQ60(void)
// 功能描述: 保留中断向量中断服务函数
// 入口参数: 无
// 出口参数: 无
//====================================================
void IRQ60(void)
{
}
//====================================================
// 语法格式:void IRQ59(void)
// 功能描述: MIC溢出中断服务程序
// 入口参数: 无
// 出口参数: 无
//====================================================
void IRQ59(void)
{
}
//====================================================
// 语法格式:void IRQ58(void)
// 功能描述: 通用ADC中断服务函数
// 入口参数: 无
// 出口参数: 无
//====================================================
void IRQ58(void)
{
}
//====================================================
// 语法格式:void IRQ57(void)
// 功能描述: 时基(TMB)中断服务函数
// 入口参数: 无
// 出口参数: 无
//====================================================
void IRQ57(void)
{
}
//====================================================
// 语法格式:void IRQ56(void)
// 功能描述: 定时器(Timer)中断服务函数
// 入口参数: 无
// 出口参数: 无
//====================================================
extern unsigned int MP4_State_Flag;
extern unsigned int g_ulTotalFrame, g_ulKFIdx, g_ulFrameIdx;
extern KEY_FRAME_INFO *g_pAKFAddress, *g_pVKFAddress;
extern unsigned int g_ulSP4counter;
extern unsigned int *g_pulMp4Data;
extern unsigned char g_ucTimerOff;
extern unsigned int g_unMP4_TVCount;
extern unsigned int g_unMP4HW_DecodeBuff[3];
extern unsigned int g_unMP4HW_TVBuffer[3];
extern unsigned int g_unBLD_DstWidth;
extern unsigned int g_unBLD_DstHigh;
extern unsigned int g_unMP4HW_dvWidth;
extern unsigned int g_unMP4HW_dvHigh;
unsigned int g_DvFrameNum=0;
unsigned int g_DvFlag=0;
unsigned int ReadBufPtr;
unsigned int TVBufPtr;
unsigned int MP4_EOF = 0;
void IRQ56(void)
{
unsigned int timer_int1=0, timer_int2=0,timer_int3=0;
unsigned int timer_int_cs = 0;
timer_int1 = (*P_TIMER1_MODE_CTRL & C_TIMER_INT_FLAG) >> 25;
timer_int2 = (*P_TIMER2_MODE_CTRL & C_TIMER_INT_FLAG) >> 24;
timer_int3 = (*P_TIMER3_MODE_CTRL & C_TIMER_INT_FLAG) >> 23;
timer_int_cs = timer_int1 | timer_int2 | timer_int3;
if(timer_int_cs & 0x8)//timer for video
{
if (MP4_State_Flag & MASK_MP4_PLAY)
{
if ((g_ulFrameIdx < g_pVKFAddress->ulTotalFrame) && (MP4_EOF))
{
g_ulSP4counter = 0;
g_DvFlag=1;
if(*P_MPEG4_REFBUFFER_SEL==0)
{
*P_MPEG4_REFBUFFER_SEL = 1;
*P_MPEG4_WRITEBUFFER_SEL = 0;
}
else
{
*P_MPEG4_REFBUFFER_SEL = 0;
*P_MPEG4_WRITEBUFFER_SEL = 1;
}
mp4_decompress(*g_pulMp4Data);
ReadBufPtr = *P_MPEG4_REFBUFFER_SEL;
TVBufPtr = g_unMP4_TVCount + 1;
if(TVBufPtr==3) TVBufPtr=0;
BlnDmaStart_linear2block_Dma(g_unMP4HW_DecodeBuff[ReadBufPtr], g_unMP4HW_TVBuffer[TVBufPtr], 0, 0, g_unBLD_DstWidth, g_unBLD_DstHigh, g_unMP4HW_dvWidth, g_unMP4HW_dvHigh, 0, 0, 0);
g_pulMp4Data++;
g_ulFrameIdx++;
MP4_EOF = 0;
}
else if (g_ulFrameIdx < g_ulTotalFrame)
{
g_ulFrameIdx++;
}
}
if(g_ucTimerOff==0)
{
*P_TIMER3_MODE_CTRL = C_TIMER_CTRL_EN | C_TIMER_INT_EN | C_TIMER_INT_FLAG;
}
}//~timer for video
if((timer_int_cs & 0x4))//timer for audio
{
if(g_ucMP3IrqFlag==1)
{
SP4_MP3_Service_Loop();
SP4_MP3_Service_Loop();
SP4_MP3_Service_Loop();
g_ucMP3IrqFlag = 0;
}//~if(g_ucMP3IrqFlag==1)
*P_TIMER2_MODE_CTRL = C_TIMER_CTRL_EN | C_TIMER_INT_EN | C_TIMER_INT_FLAG;
}//~//timer for audio
}
//====================================================
// 语法格式:void IRQ55(void)
// 功能描述: TV垂直空白(TV vblanking start)开始中断服务函数
// 入口参数: 无
// 出口参数: 无
//====================================================
extern unsigned int g_unMP4_TVCount;
void IRQ55(void)
{
if(g_DvFlag==1 && ((*P_MPEG4_COMPRESS_CTRL & 0x10) == 0) && (*P_BLNDMA_INT_STATUS!=0x00000100))
{
// mp4_switch_decode_frame_buffer(++g_DvFrameNum);
g_unMP4_TVCount++;
g_unMP4_TVCount = g_unMP4_TVCount % 3;
*P_TV_BUFFERA_SEL = g_unMP4_TVCount;
g_DvFlag = 0;
}
}
//====================================================
// 语法格式:void IRQ54(void)
// 功能描述: LCD垂直空白(LCD vblanking start)开始中断服务函数
// 入口参数: 无
// 出口参数: 无
//====================================================
void IRQ54(void)
{
}
//====================================================
// 语法格式:void IRQ53(void)
// 功能描述: 保留中断向量中断服务函数
// 入口参数: 无
// 出口参数: 无
//====================================================
void IRQ53(void)
{
}
//====================================================
// 语法格式:void IRQ52(void)
// 功能描述: TV光枪(Light Gun)中断服务函数
// 入口参数: 无
// 出口参数: 无
//====================================================
void IRQ52(void)
{
}
//====================================================
// 语法格式:void IRQ51(void)
// 功能描述: CSI帧结束(CSI frame end)中断服务函数
// 入口参数: 无
// 出口参数: 无
//====================================================
void IRQ51(void)
{
}
//====================================================
// 语法格式:void IRQ50(void)
// 功能描述: CSI坐标选中(CSI coordinate hit)中断服务函数
// 入口参数: 无
// 出口参数: 无
//====================================================
void IRQ50(void)
{
}
//====================================================
// 语法格式:void IRQ49(void)
// 功能描述: CSI运动帧结束(CSI motion frame end)中断服务函数
// 入口参数: 无
// 出口参数: 无
//====================================================
void IRQ49(void)
{
}
//====================================================
// 语法格式:void IRQ48(void)
// 功能描述: CSI捕获完成(CSI capture done)中断服务函数
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -