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

📄 user_irq.c

📁 凌阳SPCE3200 系统开发板随机自带源程序。共安排了32个子目录
💻 C
📖 第 1 页 / 共 2 页
字号:
//====================================================================================
//文 件 名: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 + -