📄 user_irq.c
字号:
//====================================================================================
//文 件 名:User_IRQ.c
//功能描述: SPCE3200 40个中断源的用户中断服务函数。
// 根据中断向量号,用户可编写相应中断服务函数
//维护记录: 2007年1月11日 v1.0 by hongyan.Feng
//====================================================================================
#include ".\System\systemHeader.h"
#include ".\Function\FunctionHeader.h"
#include ".\Peripheral\PeripheralHeader.h"
#include ".\UserDemo\UserDemoHeader.h"
extern U32 g_ulTotalFrame, g_ulKFIdx, g_ulFrameIdx;
extern U32 MP4_State_Flag;
extern U32 *g_pulMp4Data;
extern U32 g_ulSP4counter;
U32 MP4_EOF = 0;
extern U32 g_ulW_NodeIdx, g_ulRA_NodeIdx, g_ulRV_NodeIdx;
extern KEY_FRAME_INFO *g_pAKFAddress, *g_pVKFAddress;
extern PKF_NODE g_pKF_Node;
extern U32 g_ulFreeNode;
extern KF_NODE g_pKF_List[Max_KF_Amount];
extern U32 g_ulReadPort, g_ulWritePort, g_ulCurrentBufferLen;
extern U32 g_uldiff_node;
extern unsigned int *MP3_Addr;
extern unsigned short *g_pSP4_MP3Address;
extern unsigned int *KFAudioEnd;
extern U32 g_ulNextIdx, g_ulStartIdx;
extern U32 g_ulTotalKF;
extern U8 g_ucTimerOff;
extern U8 g_ucMP3IrqFlag;
unsigned int g_DvFrameNum=0;
unsigned int g_DvFlag=0;
unsigned int MP3_Isr=0;
extern short SP4_TempPCM[];
extern int SP4_MP3Need_PCM_Flag;
extern void SP4_FillSoftFIFO(unsigned short *TempPCM);
//====================================================
// 语法格式:void IRQ63(void)
// 功能描述: 保留中断向量中断服务函数
// 入口参数: 无
// 出口参数: 无
//====================================================
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;
}
//====================================================
// 语法格式: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)中断服务函数
// 入口参数: 无
// 出口参数: 无
//====================================================
unsigned int ReadBufPtr;
unsigned int TVBufPtr;
void IRQ56(void)
{
U32 timer_int0=0, timer_int1=0, timer_int2=0,timer_int3=0;
U32 timer_int_cs = 0;
static int counter = 0;
//timer_int0 = (*P_TM0_CTRL & 0x04000000) >> 26;
timer_int1 = (*P_TIMER1_MODE_CTRL & 0x04000000) >> 25;
timer_int2 = (*P_TIMER2_MODE_CTRL & 0x04000000) >> 24;
timer_int3 = (*P_TIMER3_MODE_CTRL & 0x04000000) >> 23;
timer_int_cs = timer_int1 | timer_int2 | timer_int3;
if(timer_int_cs & 0x8)//timer for video
{
//*P_ADC_GPIO_OE ^= 0x00000080; // Output high at ADC bit7
if (MP4_State_Flag & MASK_MP4_PLAY)
{
//if ((g_ulFrameIdx < g_ulTotalFrame) && (MP4_EOF))
if ((g_ulFrameIdx < g_pVKFAddress->ulTotalFrame) && (MP4_EOF))
{
g_ulSP4counter = 0;
//*P_ADC_GPIO_OE ^= 0x00000080; // Output high at ADC bit7
#ifdef DECODE_SOFT_SWITCH_BUFF
#ifndef DISABLE_VBLANKING
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);
//*P_TVE_BUF_PTR =ReadBufPtr;
#else
mp4_decompress(*g_pulMp4Data);
mp4_switch_decode_frame_buffer(++g_DvFrameNum);
#endif
#endif
g_pulMp4Data++;
g_ulFrameIdx++;
MP4_EOF = 0;
}
else if (g_ulFrameIdx < g_ulTotalFrame)
{
g_ulFrameIdx++;
}
}
if(g_ucTimerOff==0)
{
*P_TIMER3_MODE_CTRL = TIMER_ON | TIMER_IRQ_ON | TIMER_IRQ_CLR;
}
}//~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 = TIMER_ON | TIMER_IRQ_ON | TIMER_IRQ_CLR;
}//~//timer for audio
}
//====================================================
// 语法格式:void IRQ55(void)
// 功能描述: TV垂直空白(TV vblanking start)开始中断服务函数
// 入口参数: 无
// 出口参数: 无
//====================================================
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_BUFFER_SEL = g_unMP4_TVCount;
g_DvFlag = 0;
}
}
//====================================================
// 语法格式:void IRQ54(void)
// 功能描述: LCD垂直空白(LCD vblanking start)开始中断服务函数
// 入口参数: 无
// 出口参数: 无
//====================================================
void IRQ54(void)
{
if((*P_TFT_INT_STATUS & 0x10000) == 0x10000)
{
*P_LCD_BUFFER_SEL = *P_TV_BUFFER_SEL;
*P_TFT_INT_STATUS = 0x10000;
}
}
//====================================================
// 语法格式: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)
{
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -