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

📄 user_irq.c

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