📄 dma_opti.s
字号:
mov r12, r5
ret
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Func:
! DMA_YUV_E2I_C
!
!__attribute__((section(".avi_v_text, \"ax\"")))
!void DMA_YUV_E2I_C(short index, short dst_offset_pos) //32BIT--32BIT
!{
! short vert_in, hor_in, hor_out;
! unsigned long src;
! unsigned short dst;
! IMAGE *refimg = Xvidec.ref;
! DMA_CHANNEL_REG *DmaChl;
!
! while(DMA_CHANNEL_FULL == ( DmaChl = GetDmaChannelState(0)));
!
! Global_Offset = (unsigned short)(src_offset_pos & 0x1);
! src = (((unsigned long)(refimg->y_page))<<16) + (src_offset_pos - (unsigned long)Global_Offset);
! dst = &match_y_block[0];
! hor_in = 10;
! vert_in = 9;
!//---------------------------------------------------------------------
! 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 = 0x00020025; //32-bit transfer
! DmaChl->DmaCtl.Msb = (unsigned long)(45);
!
! DmaChl->DmaCfg.Lsb = 0x00000020;
! DmaChl->DmaCfg.Msb = 0x00001004;
!
! DmaChl->DmaSgr = (unsigned long)(160-5)|((unsigned long)(5)<<20);
!
! Dma_E2IBlock_Y = 1;
!
! DmaChl->Priority = 1;
!
! DmaChl->pResFlag = &Dma_E2IBlock_Y;
!
! CALL_DmaChannelSetup(0);
!}
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
MP4_ASSEMBLE_SECTION
.global _DMA_YUV_E2I_C
.walign 2
_DMA_YUV_E2I_C:
stdu r0, r12, -2
stdu r2, r12, -2
stdu r8, r12, -2
stdu r10, r12, -2
stdu r14, r12, -2
mov r6, %rpc
stdu r6, r12, -2 !save r7
DMA_YUV_E2I_C_DMA_CASE:
mov r4, 0
lda r13, _GetDmaChannelState
call r13
cmp r4, -1 !DMA_CHANNEL_FULL
bz DMA_YUV_E2I_C_DMA_CASE
mov r13, r4
mov r6, r4
lda r8, _src_offset_pos
lddu r10, r8, 2 !src_offset_pos
mov r14, 1
and r14, r10 !Global_Offset
lda r7, _Global_Offset
st r14, r7
xor r15, r15
lda r8, _Xvidec
mov r9, 5
ldx r4, r8 !refimg
ld r5, r4 !refimg->y_page
xor r4, r4 !(refimg->y_page)<<16
add.e r4, r10
sub.e r4, r14 !src
lda r14, _match_y_block
xor r15, r15 !dst
lda r8, _Dma_E2IBlock_Y !resflag
mov r9, 1
st r9, r8 !Dma_E2IBlock_Y = 1
mov r0, -1
mov r1, -1
!DmaChl->pDmaFnct = DMA_FNCT_NULL;
!DmaChl->pDmaFnctArg = DMA_FNCT_NULL;
stdu r0, r13, 2
movlh r2, 0x04000000
shll.e r4, 1
add.e r4, r2
add r13, 2
!DmaChl->DmaSar = ((unsigned long)(src)<<1)+(unsigned long)(0x4000000);
stdu r4, r13, 2
shrl r3, 8
shll.e r14, 1
!DmaChl->DmaDar = ((unsigned long)(dst)<<1)+(unsigned long)0x40000;
add.e r14, r2
stdu r14, r13, 2
movlh r0, 0x00020025
stdu r0, r13, 2 !DmaChl->DmaCtl.Lsb
movlh r0, 0x0000002D !45
stdu r0, r13, 2 !DmaChl->DmaCtl.Msb
movlh r2, 0x00000020
stdu r2, r13, 2 !DmaChl->DmaCfg.Lsb
movlh r0, 0x00001004
stdu r0, r13, 2 !DmaChl->DmaCfg.Msb
movlh r4, 0x0050009B !(unsigned long)(160-5)|((unsigned long)(5)<<20)
stdu r4, r13, 2 !DmaChl->DmaSgr
mov r0, 1
st r0, r6, 3 !DmaChl->Priority
st r8, r6, 2 !DmaChl->pResFlag
mov r4, 0
lda r13, _CALL_DmaChannelSetup
call r13
mov r5, r12
add r5, 1
lddu r6, r5, 2
mov %rpc, r6
lddu r14, r5, 2
lddu r10, r5, 2
lddu r8, r5, 2
lddu r2, r5, 2
lddu r0, r5, 2
add r5, -1
mov r12, r5
ret
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Func:
! copy_y_from_external_to_internal
! Dsecripton:
! External SDRAM to Internal SRAM
! NB:
! 32bit-32bit
! Author:
! Fang ZF
! Jian Huan (Modify)
! Date:
! 2006-1-3 21:35
! 2006-1-10 9:00
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!__attribute__((section(".avi_v_text, \"ax\"")))
!void copy_y_from_external_to_internal(DECODER *xvid_dec, short x, short y)
!{
! unsigned long xy_cord;
! unsigned long src, dst;
! DMA_CHANNEL_REG *DmaChl;
!
! while(DMA_CHANNEL_FULL == ( DmaChl = GetDmaChannelState(0)));
!
! xy_cord = (unsigned long)(xvid_dec->width) * ((unsigned long)(y)<<4) + ((unsigned long)(x)<<4);
!
! src = (unsigned long)(((unsigned long)(xvid_dec->ref->y_page)<<16)) + (unsigned long)xy_cord; //128K/2 = 131072/2
! dst = (unsigned long)IntMem.mb_y_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*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);
!
!}
MP4_ASSEMBLE_SECTION
.global _copy_y_from_external_to_internal
.walign 2
_copy_y_from_external_to_internal:
stdu r0, r12, -2
stdu r2, r12, -2
stdu r8, r12, -2
stdu r10, r12, -2
stdu r14, r12, -2
mov r0, %rpc
mov r8, r4
stu r0, r12, -1
mov r9, 320*16 !320
mul.a r9, r6
shll r5, 4
add r0, r5 !xy_cord
mov r9, r5
DMA_COPY_Y_FROM_EXTERNAL_TO_INTERNAL_STATE:
mov r4, 0
lda r13, _GetDmaChannelState
call r13
cmp r4, -1
bz DMA_COPY_Y_FROM_EXTERNAL_TO_INTERNAL_STATE
mov r13, r4
add r8, 5
mov r6, r4
ld r2, r8 !xvid_dec->ref
ld r3, r2 !xvid_dec->ref->y_page
xor r2, r2
add.e r2, r0 !src
movh r10, _IntMem
mov r14, -1
movl r10, _IntMem
mov r15, -1
ld r10, r10
xor r11, r11
add r10, r9 !dst
stdu r14, r13, 2
add r13, 2
movlh r8, 0x04000000
shll.e r2, 1
add.e r2, r8
stdu r2, r13, 2 !DmaChl->DmaSar
shrl r9, 8
shll.e r10, 1
add.e r10, r8
stdu r10, r13, 2 !DmaChl->DmaDar
movlh r8, 0x00060025
stdu r8, r13, 2 !DmaChl->DmaCtl.Lsb
movlh r10, 16*8
stdu r10, r13, 2 !DmaChl->DmaCfg.Msb
movlh r8, 0x00000020
stdu r8, r13, 2 !DmaChl->DmaCfg.Lsb
movlh r10, 0x00001004
stdu r10, r13, 2 !DmaChl->DmaCfg.Msb
movlh r8, 0x00800098
stdu r8, r13, 2 !DmaChl->DmaSgr
stdu r8, r13, 2 !DmaChl->DmaDsr
mov r5, 1
movh r8, _Dma_16x16Block
mov r9, 2
movl r8, _Dma_16x16Block
st r5, r8, 0
mov r4, 0
st r9, r6, 3 !DmaChl->Priority
movh r13, _CALL_DmaChannelSetup
st r8, r6, 2 !DmaChl->pResFlag
movl r13, _CALL_DmaChannelSetup
call r13
mov r5, r12
add r5, 1
ldu r6, r5, 1
mov %rpc, r6
lddu r14, r5, 2
lddu r10, r5, 2
lddu r8, r5, 2
lddu r2, r5, 2
lddu r0, r5, 2
add r5, -1
mov r12, r5
ret
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Func:
! copy_uv_from_external_to_internal
! Dsecripton:
! External SDRAM to Internal SRAM
! NB:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -