📄 mem_transfer.c
字号:
////---------------------------------------------------------------------
// 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 + -