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

📄 mem_transfer.c

📁 瑞芯微RK2608固件源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
////---------------------------------------------------------------------
//    DmaChl->DmaSar = ((unsigned long)(src)<<1)+(unsigned long)0x4000000;
//    DmaChl->DmaDar = ((unsigned long)(dst)<<1)+(unsigned long)0x40000;
//    
//    DmaChl->DmaCtl.Lsb = 0x00060025;                 //0x00060013;
//    DmaChl->DmaCtl.Msb = 16*8;                       //16*16;
//    
//    DmaChl->DmaCfg.Lsb = 0x00000020;
//    DmaChl->DmaCfg.Msb = 0x00001004;
//    
//    DmaChl->DmaSgr = 0x00800098;                 //0x01000130;
//    
//    DmaChl->DmaDsr = 0x00800098;                 //0x01000130;
//    
//    Dma_16x16Block   = 1;
//    
//    DmaChl->Priority   = 2;
//
//    DmaChl->pResFlag   = &Dma_16x16Block;
//        
//    CALL_DmaChannelSetup(0);
//  
//}
//    
///***************************************************************************
// *  Func:
// *      copy_uv_from_external_to_internal
// *  Dsecripton:
// *      External SDRAM to Internal SRAM
// *  NB:
// *      32bit-32bit
// *  Author:
// *      Fang ZF
// *      Jian Huan   (Modify)
// *  Date:
// *      2006-2006-1-3 21:36
// *      2006-1-10 9:01
// **************************************************************************/
//__attribute__((section(".avi_v_text, \"ax\"")))
//void    copy_uv_from_external_to_internal(DECODER *xvid_dec, short x, short y)
//{
//    unsigned long   xy_cord;
//    unsigned long   src = 0, dst = 0;
//    DMA_CHANNEL_REG *DmaChl;
//    
//    while(DMA_CHANNEL_FULL == ( DmaChl = GetDmaChannelState(0))); 
//    
//    xy_cord = (unsigned long)(xvid_dec->width) * (unsigned long)(y<<3) + (unsigned long)(x<<4);
//
//    src = (unsigned long)((unsigned long)(xvid_dec->ref->uv_page)<<16) + 0x2c00 + (unsigned long)xy_cord;
//    dst = (unsigned long)IntMem.mb_uv_row + (unsigned long)(x<<4);
////---------------------------------------------------------------------
//    DmaChl->pDmaFnct    = DMA_FNCT_NULL;
//    DmaChl->pDmaFnctArg = DMA_FNCT_NULL;
////---------------------------------------------------------------------
//
//    DmaChl->DmaSar = ((unsigned long)(src)<<1)+(unsigned long)0x4000000;
//    DmaChl->DmaDar = ((unsigned long)(dst)<<1)+(unsigned long)0x40000;
//    
//    DmaChl->DmaCtl.Lsb = 0x00060025;                 //0x00060013;
//    DmaChl->DmaCtl.Msb = 16*4;                       //16*8;
//    
//    DmaChl->DmaCfg.Lsb = 0x00000020;
//    DmaChl->DmaCfg.Msb = 0x00001004;
//    
//    DmaChl->DmaSgr = 0x00800098;                 //0x01000130;
//    
//    DmaChl->DmaDsr = 0x00800098;                 //0x01000130;
//    
//    Dma_16x8Block   = 1;
//    
//    DmaChl->Priority   = 2;
//    
//    DmaChl->pResFlag   = &Dma_16x8Block;
//
//    CALL_DmaChannelSetup(0);
//
//}
//
///*********************************************************************
// *  Func:
// *      DMA_RGB_I2E
// *  Description:
// *      RGB Internal SRAM to External SDRAM
// *  Author:
// *      Jian H
// *  Date:
// *      2006-1-5 9:10
// *********************************************************************/
//__attribute__((section(".avi_v_text, \"ax\"")))
//void DMA_RGB_I2E(unsigned short *RgbBuf, short y, short size)
//{
//    unsigned long dstRGB;
//    unsigned long RGBPage;
//    DMA_CHANNEL_REG *DmaChl;
//
//    while(DMA_CHANNEL_FULL == ( DmaChl = GetDmaChannelState(1))); 
//    
//    RGBPage = 262144 + ((unsigned long)AviRgbSdramIndex)*(unsigned long)76800;
//    dstRGB = (unsigned long )(RGBPage) + (unsigned long)(y)*(unsigned long)(16);          //????SDRAM????????Y????????????
//
////---------------------------------------------------------------------
//    DmaChl->pDmaFnct    = DMA_FNCT_NULL;
//    DmaChl->pDmaFnctArg = DMA_FNCT_NULL;
////--------------------------------------------------------------------- 
//    
//    DmaChl->DmaSar = (unsigned long)(((unsigned long)(RgbBuf)<<1)+(unsigned long)0x40000);
//    DmaChl->DmaDar = ((unsigned long)(dstRGB)<<1)+(unsigned long)0x4000000;
//    
//    DmaChl->DmaCtl.Lsb = 0x00040025;              
//    DmaChl->DmaCtl.Msb = 0x00000A00;             //320*16/2
//    
//    DmaChl->DmaCfg.Lsb = 0x00000020;
//    DmaChl->DmaCfg.Msb = 0x00001004;
//    
//    DmaChl->DmaDsr = 0x00800070;
//    
//    Dma_RGB_I2E   = 1;
//    
//    DmaChl->Priority   = 2;
//
//    DmaChl->pResFlag   = &Dma_RGB_I2E;
//        
//    CALL_DmaChannelSetup(1);
//}

/*********************************************************************
 *  Func:
 *      DMA_RGB_E2E
 *  Description:
 *      RGB External SAM to LCD
 *  Author:
 *      Jian Huan
 *  Date:
 *      2006-1-5 10:01
 *********************************************************************/
unsigned int  LcdTanCtr;
 __attribute__((section(".avi_v_text, \"ax\"")))
void DMA_Sdram2LcdFnct(void *parg)
{
    unsigned long srcRGB;
    unsigned long RGBPage;
    DMA_CHANNEL_REG *DmaChl;
    unsigned long TanDataLen;
    
//------------------------------------------------------------------------------
//  ??????????????????
//------------------------------------------------------------------------------
    TanDataLen = 240*16;

    if(uiAviStatusBarDispFlag != AVI_STATUS_BAR_NULL){
        TanDataLen = (MAX_PIC_YSIZE - VIDEO_UPMAIN_PIC_YSIZE - VIDEO_DOWNMAIN_PIC_YSIZE) * 16;
    }  
//------------------------------------------------------------------------------  

    //RGBPage = 4 + (LCDSdramIndex<<1); 
    RGBPage = 262144 + ((unsigned long)LCDSdramIndex)*(unsigned long)76800; 

    if(LcdTanCtr > 0){
        
    	while(DMA_CHANNEL_FULL == ( DmaChl = GetDmaChannelState(1)));     	
        
        if(uiAviStatusBarDispFlag != AVI_STATUS_BAR_NULL){
            srcRGB = (unsigned long )(RGBPage) + (unsigned long)(10-(LcdTanCtr))*240*32+VIDEO_UPMAIN_PIC_YSIZE;
        }else{
            srcRGB = (unsigned long )(RGBPage) + (unsigned long)(10-(LcdTanCtr))*240*32;
        }
        
        srcRGB = ((unsigned long)(srcRGB)<<1)+(unsigned long)0x4000000;
        
//---------------------------------------------------------------------
        DmaChl->pDmaFnct    = DMA_Sdram2LcdFnct;
        DmaChl->pDmaFnctArg = LcdTanCtr-1;
        LcdTanCtr = LcdTanCtr-1;
//---------------------------------------------------------------------     
        DmaChl->DmaSar = srcRGB; 
        DmaChl->DmaDar = ((unsigned long)(LCD_DATA)<<1);
    
        if(uiAviStatusBarDispFlag != AVI_STATUS_BAR_NULL){
            DmaChl->DmaCtl.Lsb = 0x00020123;
        }else{    
            DmaChl->DmaCtl.Lsb = 0x00000123;             //SRC_GATHER_EN:0 DINC:No change, SRC_TR_WIDTH:16-bit, DST_TR_WIDTH:16-bit, INT_EN:1
        }
        
        DmaChl->DmaCtl.Msb = TanDataLen;             //320*240/2
    
        DmaChl->DmaCfg.Lsb = 0x00000000;
        DmaChl->DmaCfg.Msb = 0x00001004;
    
        if(uiAviStatusBarDispFlag != AVI_STATUS_BAR_NULL){
            DmaChl->DmaSgr = (unsigned long)(((unsigned long)(((unsigned long)(MAX_PIC_YSIZE) - VIDEO_UPMAIN_PIC_YSIZE - VIDEO_DOWNMAIN_PIC_YSIZE) >> 1)<<20) | (unsigned long)((VIDEO_UPMAIN_PIC_YSIZE + VIDEO_DOWNMAIN_PIC_YSIZE) >> 1));//0x0dc00004  ;//2|(110<<20);       <jh@2006-3-2 9:12>
        }else{
            DmaChl->DmaSgr = 0x00000000  ;//2|(110<<20);       <jh@2006-3-2 9:12>
        }
    
        Dma_RGB_E2LCD   = 1;
        
        DmaChl->Priority   = 0;
        
        DmaChl->pResFlag   = &Dma_RGB_E2LCD; 
        
        CALL_DmaChannelSetup(1);
    }else{
//---------------------------------------------------------------------
//        DmaChl->pDmaFnct    = DMA_FNCT_NULL;
//        DmaChl->pDmaFnctArg = DMA_FNCT_NULL;
        //---------------------------------------------------------------------   
//============================================================================//
        if(uiAviLcdDmaDoneFlag == 1){
            uiAviLcdDmaDoneFlag = 2;
        }
//============================================================================//
    }
}

 __attribute__((section(".avi_v_text, \"ax\"")))
void DMA_RGB_E2LCD(void)
{
    unsigned long srcRGB;
    unsigned long RGBPage;
    unsigned long TanDataLen;
    DMA_CHANNEL_REG *DmaChl;
    int     lcd_looptimes = 0;
        

    LCDSdramIndex = (LCDSdramIndex+1)%(AVI_RGB_SDRAM_BUF_CONT+1);  //zcs &1    
    
    RGBPage = 262144 + ((unsigned long)LCDSdramIndex)*(unsigned long)76800; 

    if(BITT_N_FRAME(&FRAME_TYPE_LABEL[0], LCDSdramIndex) != 0){
        BITC_N_FRAME(&FRAME_TYPE_LABEL[0],  LCDSdramIndex);
        return;
    }          
    
//------------------------------------------------------------------------------
//  ??????????????????
//------------------------------------------------------------------------------
    TanDataLen = 240*16;

    if(uiAviStatusBarDispFlag != AVI_STATUS_BAR_NULL){
        TanDataLen = (MAX_PIC_YSIZE - VIDEO_UPMAIN_PIC_YSIZE - VIDEO_DOWNMAIN_PIC_YSIZE)*16;
    }  
//------------------------------------------------------------------------------  
        
    while(DMA_CHANNEL_FULL == ( DmaChl = GetDmaChannelState(1))); 

    if(uiAviStatusBarDispFlag != AVI_STATUS_BAR_NULL){
        srcRGB = (unsigned long )((unsigned long )(RGBPage))+VIDEO_UPMAIN_PIC_YSIZE;
    }else{
        srcRGB = (unsigned long )((unsigned long )(RGBPage));
    }

//-----------------------------------------------------------------
    DmaChl->pDmaFnct    = DMA_Sdram2LcdFnct;
    DmaChl->pDmaFnctArg = 9;
    LcdTanCtr           = 9;
//-----------------------------------------------------------------     
    DmaChl->DmaSar = ((unsigned long)(srcRGB)<<1)+(unsigned long)0x4000000; 
    DmaChl->DmaDar = ((unsigned long)(LCD_DATA)<<1);
    
    if(uiAviStatusBarDispFlag != AVI_STATUS_BAR_NULL){
        DmaChl->DmaCtl.Lsb = 0x00020123;
    }else{    
        DmaChl->DmaCtl.Lsb = 0x00000123;             //SRC_GATHER_EN:0 DINC:No change, SRC_TR_WIDTH:16-bit, DST_TR_WIDTH:16-bit, INT_EN:1
    }

    if(uiAviStatusBarDispFlag != AVI_STATUS_BAR_NULL){
        DmaChl->DmaSgr = (unsigned long)(((unsigned long)(((unsigned long)(MAX_PIC_YSIZE) - VIDEO_UPMAIN_PIC_YSIZE - VIDEO_DOWNMAIN_PIC_YSIZE) >> 1)<<20) | (unsigned long)((VIDEO_UPMAIN_PIC_YSIZE + VIDEO_DOWNMAIN_PIC_YSIZE) >> 1));//0x0dc00004  ;//2|(110<<20);       <jh@2006-3-2 9:12>
    }else{
        DmaChl->DmaSgr = 0x00000000;
    }

    DmaChl->DmaCtl.Msb = TanDataLen;             //320*240/2
    
    DmaChl->DmaCfg.Lsb = 0x00000000;
    DmaChl->DmaCfg.Msb = 0x00001004;
    
    Dma_RGB_E2LCD      = 1;
    
    DmaChl->Priority   = 0;
    
    DmaChl->pResFlag   = &Dma_RGB_E2LCD;
    
    CALL_DmaChannelSetup(1);
}

__attribute__((section(".avi_v_text, \"ax\"")))
unsigned int GetLCDSdramIndex()
{
	return LCDSdramIndex;
}
void CALL_DmaChannelSetup(unsigned int channel){
	unsigned int imask_tmp;
    DMA_DISABLE_INTERRUPT;
    	DmaChannelSetup(channel);
    DMA_ENABLE_INTERRUPT;
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -