?? dma_b.c
字號:
mDmaSType2b(DMA_DATA_2D) |
mDmaLType2b(DMA_DATA_SEQUENTAIL) |
mDmaLen12b(SIZE_V / 4) |
mDmaID4b(ID_CHN_YUV),
#else
// CHNI_RGB + 0
DONT_CARE,
// CHNI_RGB + 1
mDmaLocMemAddr14b(BUFFER_RGB_OFF_0), // watch-out
// CHNI_RGB + 2
mDmaSysWidth6b(RGB_PIXEL_SIZE * PIXEL_Y / 8) |
mDmaSysOff14b((RGB_PIXEL_SIZE * DEFAULT_STRIDE / 4) + 1 - (RGB_PIXEL_SIZE * PIXEL_Y / 4)) |
mDmaLocWidth4b(DONT_CARE) |
mDmaLocOff8b(DONT_CARE),
// CHNI_RGB + 3
mDmaIntChainMask1b(TRUE) |
mDmaEn1b(TRUE) |
mDmaChainEn1b(TRUE) |
mDmaDir1b(DMA_DIR_2SYS) |
mDmaSType2b(DMA_DATA_2D) |
mDmaLType2b(DMA_DATA_SEQUENTAIL) |
mDmaLen12b(RGB_PIXEL_SIZE * SIZE_Y / 4) |
mDmaID4b(ID_CHN_RGB),
#endif
///////////////////////////////////////////////////
// 9
// CHNI_LOAD_PREDITOR + 0
DONT_CARE,
// CHNI_LOAD_PREDITOR + 1
mDmaLocMemAddr14b(PREDICTOR0_OFF), // watch-out
// CHNI_LOAD_PREDITOR + 2
mDmaSysWidth6b(DONT_CARE) |
mDmaSysOff14b(DONT_CARE) |
mDmaLocWidth4b(4) |
mDmaLocOff8b(8 + 1 - 4),
// CHNI_LOAD_PREDITOR + 3
mDmaIntChainMask1b(TRUE) |
mDmaEn1b(TRUE) |
mDmaChainEn1b(TRUE) | // chain to store_preditor
mDmaDir1b(DMA_DIR_2LOCAL) |
mDmaSType2b(DMA_DATA_SEQUENTAIL) |
mDmaLType2b(DMA_DATA_2D) |
mDmaLen12b(0x10) |
mDmaID4b(ID_CHN_ACDC),
////////////////////////////////////////////////////////////////
// 10
// CHNI_STORE_PREDITOR + 0
DONT_CARE,
// CHNI_STORE_PREDITOR + 1
mDmaLocMemAddr14b(PREDICTOR8_OFF),
// CHNI_STORE_PREDITOR + 2
mDmaSysWidth6b(DONT_CARE) |
mDmaSysOff14b(DONT_CARE) |
mDmaLocWidth4b(4) |
mDmaLocOff8b(8 + 1 - 4),
// CHNI_STORE_PREDITOR + 3
mDmaLoc3dOff8b(DONT_CARE) |
mDmaIntChainMask1b(FALSE) |
mDmaEn1b(TRUE) |
mDmaChainEn1b(FALSE) |
mDmaDir1b(DMA_DIR_2SYS) |
mDmaSType2b(DMA_DATA_SEQUENTAIL) |
mDmaLType2b(DMA_DATA_2D) |
mDmaLen12b(0x10) |
mDmaID4b(ID_CHN_ACDC)
};
void dma_dec_commandq_init(DECODER * dec)
{
uint32_t * dma_cmd_tgl0 = (uint32_t *)((uint32_t)dec->pu32BaseAddr + DMA_CMD_OFF_0);
uint32_t * dma_cmd_tgl1 = (uint32_t *)((uint32_t)dec->pu32BaseAddr + DMA_CMD_OFF_1);
#if 0
volatile MDMA * ptDma = (MDMA *)((uint32_t)dec->pu32BaseAddr + DMA_OFF);
// move toggle 0 dma command
ptDma->GRPC = 0; // always do
ptDma->SMaddr = mDmaSysMemAddr29b(u32dma_const0);
ptDma->LMaddr =
mDmaLocMemAddr14b(DMA_CMD_OFF_0) |
mDmaLoc2dWidth4b(8) |
mDmaLoc2dOff8b(1) |
mDmaLoc3dWidth4b(2);
ptDma->BlkWidth =
mDmaSysWidth6b(DONT_CARE) |
mDmaSysOff14b(DONT_CARE) |
mDmaLocWidth4b(8) |
mDmaLocOff8b(1);
ptDma->Control =
mDmaIntChainMask1b(FALSE) |
mDmaEn1b(TRUE) |
mDmaChainEn1b(FALSE) |
mDmaDir1b(DMA_DIR_2LOCAL) |
mDmaSType2b(DMA_DATA_SEQUENTAIL) |
mDmaLType2b(DMA_DATA_2D) |
mDmaLen12b(sizeof(u32dma_const0)/sizeof(uint32_t)) |
mDmaID4b(0);
// wait DMA
mFa526DrainWrBuf();
while((ptDma->Status & BIT0) == 0)
;
// move toggle 1 dma command
ptDma->SMaddr = mDmaSysMemAddr29b(u32dma_const1);
ptDma->LMaddr =
mDmaLocMemAddr14b(DMA_CMD_OFF_1) |
mDmaLoc2dWidth4b(8) |
mDmaLoc2dOff8b(1) |
mDmaLoc3dWidth4b(2);
ptDma->Control =
mDmaIntChainMask1b(FALSE) |
mDmaEn1b(TRUE) |
mDmaChainEn1b(FALSE) |
mDmaDir1b(DMA_DIR_2LOCAL) |
mDmaSType2b(DMA_DATA_SEQUENTAIL) |
mDmaLType2b(DMA_DATA_2D) |
mDmaLen12b(sizeof(u32dma_const1)/sizeof(uint32_t)) |
mDmaID4b(0);
// wait DMA
mFa526DrainWrBuf();
while((ptDma->Status & BIT0) == 0)
;
#else
memcpy (dma_cmd_tgl0, u32dma_const0, sizeof (u32dma_const0));
memcpy (dma_cmd_tgl1, u32dma_const1, sizeof (u32dma_const1));
#endif
#if (OUTPUT_FMT == OUTPUT_FMT_YUV)
dma_cmd_tgl0[CHNP_YUV_Y + 2] =
dma_cmd_tgl0[CHNI_YUV_Y + 2] =
dma_cmd_tgl1[CHNP_YUV_Y + 2] =
dma_cmd_tgl1[CHNI_YUV_Y + 2] =
mDmaSysWidth6b(PIXEL_Y / 8) |
mDmaSysOff14b((dec->output_stride / 4) + 1 - (PIXEL_Y / 4)) |
mDmaLocWidth4b(DONT_CARE) |
mDmaLocOff8b(DONT_CARE);
dma_cmd_tgl0[CHNP_YUV_U + 2] =
dma_cmd_tgl0[CHNP_YUV_V + 2] =
dma_cmd_tgl0[CHNI_YUV_U + 2] =
dma_cmd_tgl0[CHNI_YUV_V + 2] =
dma_cmd_tgl1[CHNP_YUV_U + 2] =
dma_cmd_tgl1[CHNP_YUV_V + 2] =
dma_cmd_tgl1[CHNI_YUV_U + 2] =
dma_cmd_tgl1[CHNI_YUV_V + 2] =
mDmaSysWidth6b(PIXEL_U / 8) |
mDmaSysOff14b(((dec->output_stride /2) / 4) + 1 - (PIXEL_U / 4)) |
mDmaLocWidth4b(DONT_CARE) |
mDmaLocOff8b(DONT_CARE);
#else
dma_cmd_tgl0[CHNP_RGB + 2] =
dma_cmd_tgl0[CHNI_RGB + 2] =
dma_cmd_tgl1[CHNP_RGB + 2] =
dma_cmd_tgl1[CHNI_RGB + 2] =
mDmaSysWidth6b(RGB_PIXEL_SIZE * PIXEL_Y / 8) |
mDmaSysOff14b((RGB_PIXEL_SIZE * dec->output_stride / 4) + 1 - (RGB_PIXEL_SIZE * PIXEL_Y / 4)) |
mDmaLocWidth4b(DONT_CARE) |
mDmaLocOff8b(DONT_CARE);
#endif
dma_cmd_tgl0[CHNP_REF_4MV_Y0 + 2] =
dma_cmd_tgl0[CHNP_REF_4MV_Y1 + 2] =
dma_cmd_tgl0[CHNP_REF_4MV_Y2 + 2] =
dma_cmd_tgl0[CHNP_REF_4MV_Y3 + 2] =
dma_cmd_tgl1[CHNP_REF_4MV_Y0 + 2] =
dma_cmd_tgl1[CHNP_REF_4MV_Y1 + 2] =
dma_cmd_tgl1[CHNP_REF_4MV_Y2 + 2] =
dma_cmd_tgl1[CHNP_REF_4MV_Y3 + 2] =
mDmaSysWidth6b(2 * SIZE_U / 8) |
mDmaSysOff14b((dec->mb_width * 2 * SIZE_U / 4) + 1 - (2 * SIZE_U / 4)) |
mDmaLocWidth4b(PIXEL_U / 4) |
mDmaLocOff8b((8 * PIXEL_U / 4) + 1 - (PIXEL_U / 4));
dma_cmd_tgl0[CHNP_REF_1MV_Y + 2] =
dma_cmd_tgl1[CHNP_REF_1MV_Y + 2] =
mDmaSysWidth6b(3 * SIZE_U / 8) |
mDmaSysOff14b((dec->mb_width * 2 * SIZE_U / 4) + 1 - (3 * SIZE_U / 4)) |
mDmaLocWidth4b(PIXEL_U / 4) |
mDmaLocOff8b(((8 * PIXEL_U) / 4) + 1 - (PIXEL_U / 4));
dma_cmd_tgl0[CHNP_REF_4MV_U + 2] =
dma_cmd_tgl0[CHNP_REF_4MV_V + 2] =
dma_cmd_tgl0[CHNP_REF_1MV_U + 2] =
dma_cmd_tgl0[CHNP_REF_1MV_V + 2] =
dma_cmd_tgl1[CHNP_REF_4MV_U + 2] =
dma_cmd_tgl1[CHNP_REF_4MV_V + 2] =
dma_cmd_tgl1[CHNP_REF_1MV_U + 2] =
dma_cmd_tgl1[CHNP_REF_1MV_V + 2] =
mDmaSysWidth6b(2 * SIZE_U / 8) |
mDmaSysOff14b((dec->mb_width * SIZE_U / 4) + 1 - (2 * SIZE_U / 4)) |
mDmaLocWidth4b(PIXEL_U / 4) |
mDmaLocOff8b(((8 * PIXEL_U) / 4) + 1 - (PIXEL_U / 4));
dma_cmd_tgl0[CHNP_IMG_Y + 2] =
dma_cmd_tgl0[CHNI_IMG_Y + 2] =
dma_cmd_tgl1[CHNP_IMG_Y + 2] =
dma_cmd_tgl1[CHNI_IMG_Y + 2] =
mDmaSysWidth6b(2 * SIZE_U / 8) |
mDmaSysOff14b((dec->mb_width * 2 * SIZE_U / 4) + 1 - (2 * SIZE_U / 4)) |
mDmaLocWidth4b(PIXEL_U / 4) |
mDmaLocOff8b((2 * PIXEL_U / 4) + 1 - (PIXEL_U / 4));
}
#else
void dma_dec_commandq_init(DECODER * dec)
{
uint32_t * dma_cmd_tgl0 = (uint32_t *)((uint32_t)dec->pu32BaseAddr + DMA_CMD_OFF_0);
uint32_t * dma_cmd_tgl1 = (uint32_t *)((uint32_t)dec->pu32BaseAddr + DMA_CMD_OFF_1);
///////////////////////////////////////////////////
// i-frame
// vld->toggle vld(load) dmc img(yuv) rgb
// 0 1 0 1
// 1 0 1 0
// ...
///////////////////////////////////////////////////
// Toggle 0
///////////////////////////////////////////////////
dma_cmd_tgl0[CHNI_IMG_Y + 1] =
mDmaLoc2dWidth4b(8) | // 8 lines/block
mDmaLoc2dOff8b(1 - (PIXEL_U - 1) * (2 * PIXEL_U) / 4) | // jump to next block
mDmaLoc3dWidth4b(2) | // 2 block/row
mDmaLocMemAddr14b(INTER_Y_OFF_0);
mDmaLocInc2b(DMA_INCL_0);
dma_cmd_tgl0[CHNI_IMG_Y + 2] =
mDmaSysWidth6b(2 * SIZE_U / 8) |
mDmaSysOff14b((dec->mb_width * 2 * SIZE_U / 4) + 1 - (2 * SIZE_U / 4)) |
mDmaLocWidth4b(PIXEL_U / 4) |
mDmaLocOff8b((2 * PIXEL_U / 4) + 1 - (PIXEL_U / 4));
dma_cmd_tgl0[CHNI_IMG_Y + 3] =
mDmaLoc3dOff8b(1) | // jump to next row
mDmaIntChainMask1b(TRUE) |
mDmaEn1b(TRUE) |
mDmaChainEn1b(TRUE) |
mDmaDir1b(DMA_DIR_2SYS) |
mDmaSType2b(DMA_DATA_2D) |
mDmaLType2b(DMA_DATA_4D) |
mDmaLen12b(4 * SIZE_U / 4) |
mDmaID4b(ID_CHN_IMG);
dma_cmd_tgl0[CHNI_IMG_U + 1] = mDmaLocMemAddr14b(INTER_U_OFF_0);
// dont care block width
dma_cmd_tgl0[CHNI_IMG_U + 3] =
mDmaLoc3dOff8b(DONT_CARE) |
mDmaIntChainMask1b(TRUE) |
mDmaEn1b(TRUE) |
mDmaChainEn1b(TRUE) |
mDmaDir1b(DMA_DIR_2SYS) |
mDmaSType2b(DMA_DATA_SEQUENTAIL) |
mDmaLType2b(DMA_DATA_SEQUENTAIL) |
mDmaLen12b(SIZE_U / 4) |
mDmaID4b(ID_CHN_IMG);
dma_cmd_tgl0[CHNI_IMG_V + 1] = mDmaLocMemAddr14b(INTER_V_OFF_0);
// dont care block width
dma_cmd_tgl0[CHNI_IMG_V + 3] =
mDmaLoc3dOff8b(DONT_CARE) |
mDmaIntChainMask1b(TRUE) |
mDmaEn1b(TRUE) |
mDmaChainEn1b(TRUE) |
mDmaDir1b(DMA_DIR_2SYS) |
mDmaSType2b(DMA_DATA_SEQUENTAIL) |
mDmaLType2b(DMA_DATA_SEQUENTAIL) |
mDmaLen12b(SIZE_V / 4) |
mDmaID4b(ID_CHN_IMG);
///////////////////////////////////////////////////
#if (OUTPUT_FMT == OUTPUT_FMT_YUV)
dma_cmd_tgl0[CHNI_YUV_Y + 1] =
mDmaLoc2dWidth4b(16) | // 16 lines/MB
mDmaLoc2dOff8b(DONT_CARE) |
mDmaLoc3dWidth4b(DONT_CARE) | // 2 block/row
mDmaLocMemAddr14b(INTER_Y_OFF_0);
mDmaLocInc2b(DMA_INCL_0);
dma_cmd_tgl0[CHNI_YUV_Y + 2] =
mDmaSysWidth6b(PIXEL_Y / 8) |
mDmaSysOff14b((dec->output_stride / 4) + 1 - (PIXEL_Y / 4)) |
mDmaLocWidth4b(DONT_CARE) |
mDmaLocOff8b(DONT_CARE);
dma_cmd_tgl0[CHNI_YUV_Y + 3] =
mDmaLoc3dOff8b(DONT_CARE) |
mDmaIntChainMask1b(TRUE) |
mDmaEn1b(TRUE) |
mDmaChainEn1b(TRUE) |
mDmaDir1b(DMA_DIR_2SYS) |
mDmaSType2b(DMA_DATA_2D) |
mDmaLType2b(DMA_DATA_SEQUENTAIL) |
mDmaLen12b(SIZE_Y / 4) |
mDmaID4b(ID_CHN_YUV);
dma_cmd_tgl0[CHNI_YUV_U + 1] = mDmaLocMemAddr14b(INTER_U_OFF_0);
dma_cmd_tgl0[CHNI_YUV_U + 2] =
mDmaSysWidth6b(PIXEL_U / 8) |
mDmaSysOff14b(((dec->output_stride / 2) / 4) + 1 - (PIXEL_U / 4)) |
mDmaLocWidth4b(DONT_CARE) |
mDmaLocOff8b(DONT_CARE);
dma_cmd_tgl0[CHNI_YUV_U + 3] =
mDmaLoc3dOff8b(DONT_CARE) |
mDmaIntChainMask1b(TRUE) |
mDmaEn1b(TRUE) |
mDmaChainEn1b(TRUE) |
mDmaDir1b(DMA_DIR_2SYS) |
mDmaSType2b(DMA_DATA_2D) |
mDmaLType2b(DMA_DATA_SEQUENTAIL) |
mDmaLen12b(SIZE_U / 4) |
mDmaID4b(ID_CHN_YUV);
dma_cmd_tgl0[CHNI_YUV_V + 1] = mDmaLocMemAddr14b(INTER_V_OFF_0);
dma_cmd_tgl0[CHNI_YUV_V + 2] =
mDmaSysWidth6b(PIXEL_V / 8) |
mDmaSysOff14b(((dec->output_stride / 2) / 4) + 1 - (PIXEL_V / 4)) |
mDmaLocWidth4b(DONT_CARE) |
mDmaLocOff8b(DONT_CARE);
dma_cmd_tgl0[CHNI_YUV_V + 3] =
mDmaLoc3dOff8b(DONT_CARE) |
mDmaIntChainMask1b(TRUE) |
mDmaEn1b(TRUE) |
mDmaChainEn1b(TRUE) |
mDmaDir1b(DMA_DIR_2SYS) |
mDmaSType2b(DMA_DATA_2D) |
mDmaLType2b(DMA_DATA_SEQUENTAIL) |
mDmaLen12b(SIZE_V / 4) |
mDmaID4b(ID_CHN_YUV);
#else
dma_cmd_tgl0[CHNI_RGB + 1] = mDmaLocMemAddr14b(BUFFER_RGB_OFF_1); // watch-out
dma_cmd_tgl0[CHNI_RGB + 2] =
mDmaSysWidth6b(RGB_PIXEL_SIZE * PIXEL_Y / 8) |
mDmaSysOff14b((RGB_PIXEL_SIZE * dec->output_stride / 4) + 1 - (RGB_PIXEL_SIZE * PIXEL_Y / 4)) |
mDmaLocWidth4b(DONT_CARE) |
mDmaLocOff8b(DONT_CARE);
dma_cmd_tgl0[CHNI_RGB + 3] =
mDmaIntChainMask1b(TRUE) |
mDmaEn1b(TRUE) |
mDmaChainEn1b(TRUE) |
mDmaDir1b(DMA_DIR_2SYS) |
mDmaSType2b(DMA_DATA_2D) |
mDmaLType2b(DMA_DATA_SEQUENTAIL) |
mDmaLen12b(RGB_PIXEL_SIZE * SIZE_Y / 4) |
mDmaID4b(ID_CHN_RGB);
#endif
///////////////////////////////////////////////////
dma_cmd_tgl0[CHNI_LOAD_PREDITOR + 1] = mDmaLocMemAddr14b(PREDICTOR4_OFF); // watch-out
dma_cmd_tgl0[CHNI_LOAD_PREDITOR + 2] =
mDmaSysWidth6b(DONT_CARE) |
mDmaSysOff14b(DONT_CARE) |
mDmaLocWidth4b(4) |
mDmaLocOff8b(8 + 1 - 4);
dma_cmd_tgl0[CHNI_LOAD_PREDITOR + 3] =
mDmaIntChainMask1b(TRUE) |
mDmaEn1b(TRUE) |
mDmaChainEn1b(TRUE) | // chain to store_preditor
mDmaDir1b(DMA_DIR_2LOCAL) |
mDmaSType2b(DMA_DATA_SEQUENTAIL) |
mDmaLType2b(DMA_DATA_2D) |
mDmaLen12b(0x10) |
mDmaID4b(ID_CHN_ACDC);
////////////////////////////////////////////////////////////////
dma_cmd_tgl0[CHNI_STORE_PREDITOR + 1] = mDmaLocMemAddr14b(PREDICTOR8_OFF);
dma_cmd_tgl0[CHNI_STORE_PREDITOR + 2] =
mDmaSysWidth6b(DONT_CARE) |
mDmaSysOff14b(DONT_CARE) |
mDmaLocWidth4b(4) |
mDmaLocOff8b(8 + 1 - 4);
dma_cmd_tgl0[CHNI_STORE_PREDITOR + 3] =
mDmaLoc3dOff8b(DONT_CARE) |
mDmaIntChainMask1b(FALSE) |
mDmaEn1b(TRUE) |
mDmaChainEn1b(FALSE) |
mDmaDir1b(DMA_DIR_2SYS) |
mDmaSType2b(DMA_DATA_SEQUENTAIL) |
mDmaLType2b(DMA_DATA_2D) |
mDmaLen12b(0x10) |
mDmaID4b(ID_CHN_ACDC);
///////////////////////////////////////////////////
// i-frame
// vld->toggle vld(load) dmc img(yuv) rgb
// 0 1 0 1
// 1 0 1 0
// ...
///////////////////////////////////////////////////
// Toggle 1
///////////////////////////////////////////////////
dma_cmd_tgl1[CHNI_IMG_Y + 1] =
mDmaLoc2dWidth4b(8) | // 8 lines/block
mDmaLoc2dOff8b(1 - (PIXEL_U - 1) * (2 * PIXEL_U) / 4) | // jump to next block
mDmaLoc3dWidth4b(2) | // 2 block/row
mDmaLocMemAddr14b(INTER_Y_OFF_1) |
mDmaLocInc2b(DMA_INCL_0);
dma_cmd_tgl1[CHNI_IMG_Y + 2] =
mDmaSysWidth6b(2 * SIZE_U / 8) |
mDmaSysOff14b((dec->mb_width * 2 * SIZE_U / 4) + 1 - (2 * SIZE_U / 4)) |
mDmaLocWidth4b(PIXEL_U / 4) |
mDmaLocOff8b((2 * PIXEL_U / 4) + 1 - (PIXEL_U / 4));
dma_cmd_tgl1[CHNI_IMG_Y + 3] =
mDmaLoc3dOff8b(1) | // jump to next row
mDmaIntChainMask1b(TRUE) |
mDmaEn1b(TRUE) |
mDmaChainEn1b(TRUE) |
mDmaDir1b(DMA_DIR_2SYS) |
mDmaSType2b(DMA_DATA_2D) |
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -