📄 dma_opti.s
字号:
movl r8, 0x99 !9*17
br DMA_YUVE2I_A_CONFIG
DMA_YUVE2I_A_INDEX_2:
!src = (((unsigned long)(refimg->uv_page))<<16) + 0x2c00 + src_offset_pos;
movh r11, _src_offset_pos
movh r5, _Xvidec
movl r11, _src_offset_pos
movl r5, _Xvidec
lddu r14, r11, 2 !src_offset_pos
add r5, 5
xor r0, r0
ld r1, r5 !refimg
movl r8, 9*9
ld r1, r1, 2
movlh r4, 0x00002c00
add.e r0, r4
add.e r0, r14 !src
movh r14, _match_uv_block
movh r5, _Dma_E2IBlock_UV
movl r14, _match_uv_block
xor r15, r15 !dst
movl r5, _Dma_E2IBlock_UV
mov r4, 1
st r4, r5, 0
movh r8, 0x00
DMA_YUVE2I_A_CONFIG:
!DmaChl->pDmaFnct = DMA_FNCT_NULL;
!DmaChl->pDmaFnctArg = DMA_FNCT_NULL;
mov r10, -1
mov r11, -1
stdu r10, r13, 2
movlh r10, 0x04000000
!DmaChl->DmaSar = ((unsigned long)(src)<<1)+(unsigned long)0x4000000;
!DmaChl->DmaDar = ((unsigned long)(dst)<<1)+(unsigned long)0x40000;
!
!DmaChl->DmaCtl.Lsb = 0x00020025;
!DmaChl->DmaCtl.Msb = (unsigned long)(9*(unsigned long)vert_in);
!
!DmaChl->DmaCfg.Lsb = 0x00000020;
!DmaChl->DmaCfg.Msb = 0x00001004;
!DmaChl->DmaSgr = 0x00900097;
shll.e r0, 1
add.e r0, r10
add r13, 2
shrl r11, 8
stdu r0, r13, 2 !DmaChl->DmaSar
shll.e r14, 1
add.e r14, r10
stdu r14, r13, 2 !DmaChl->DmaDar
movlh r10, 0x00020025
stdu r10, r13, 2 !DmaChl->DmaCtl.Lsb
xor r9, r9
stdu r8, r13, 2 !DmaChl->DmaCtl.Msb
mov r15, 1
movlh r8, 0x00000020
stdu r8, r13, 2 !DmaChl->DmaCfg.Lsb
movlh r10, 0x00001004
stdu r10, r13, 2 !DmaChl->DmaCfg.Msb
mov r4, 0
movlh r0, 0x00900097
stdu r0, r13, 2
!DmaChl->Priority = 1;
!
!DmaChl->pResFlag = resflag;
!
!CALL_DmaChannelSetup(0);
st r15, r6, 3 !DmaChl->Priority = 1;
movh r13, _CALL_DmaChannelSetup
st r5, r6, 2 !DmaChl->pResFlag = resflag
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:
! DMA_YUV_E2I_B
!
!__attribute__((section(".avi_v_text, \"ax\"")))
!void DMA_YUV_E2I_B(short index, short dst_offset_pos) //16BIT--16BIT
!{
! short vert_in, hor_in, hor_out;
! unsigned long src;
! unsigned short dst;
! PIXEL_COMP_STRUCT *pcs = &PCS, *pcs_uv = &PCS_UV;
! IMAGE *refimg = Xvidec.ref;
! unsigned int resflag;
! DMA_CHANNEL_REG *DmaChl;
!
! while(DMA_CHANNEL_FULL == ( DmaChl = GetDmaChannelState(0)));
!
! if(index == 0){
! src = (((unsigned long)(refimg->y_page))<<16) + src_offset_pos;
! dst = &match_y_block[0] + dst_offset_pos;
! resflag = &Dma_E2IBlock_Y;
! Dma_E2IBlock_Y = 1;
! vert_in = pcs->vert_in;
! hor_in = pcs->hor_in;
! hor_out = pcs->hor_out;
! }else if(index == 2){
! src = (((unsigned long)(refimg->uv_page))<<16) + 0x2c00 + src_offset_pos;
! dst = &match_uv_block[0] + dst_offset_pos;
! resflag = &Dma_E2IBlock_UV;
! Dma_E2IBlock_UV = 1;
! vert_in = pcs_uv->vert_in;
! hor_in = pcs_uv->hor_in;
! hor_out = pcs_uv->hor_out;
! }
!//---------------------------------------------------------------------
! 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 = 0x00060013;
! DmaChl->DmaCtl.Msb = (unsigned long)(hor_in*vert_in);
!
! DmaChl->DmaCfg.Lsb = 0x00000020;
! DmaChl->DmaCfg.Msb = 0x00001004;
!
! DmaChl->DmaSgr = (unsigned long)(320-hor_in)|((unsigned long)(hor_in)<<20);
!
! DmaChl->DmaDsr = ((unsigned long)(hor_in)<<20)|((unsigned long)(hor_out));
!
! DmaChl->Priority = 1;
!
! DmaChl->pResFlag = resflag;
!
! CALL_DmaChannelSetup(0);
!}
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
MP4_ASSEMBLE_SECTION
.global _DMA_YUV_E2I_B
.walign 2
_DMA_YUV_E2I_B:
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
mov r8, r4
mov r9, r5
DMA_YUV_E2I_B_DMA_STATE:
mov r4, 0
lda r13, _GetDmaChannelState
call r13
cmp r4, -1 !DMA_CHANNEL_FULL
bz DMA_YUV_E2I_B_DMA_STATE
mov r13, r4
mov r6, r4
cmp r8, 0 !index
bnz DMA_YUV_E2I_B_INDEX_1
DMA_YUV_E2I_B_INDEX_0:
lda r10, _Xvidec
mov r11, 5
ldx r4, r10 !refimg
ld r5, r4 !refimg->y_page
xor r4, r4 !(refimg->uv_page)<<16
lda r8, _src_offset_pos
lddu r10, r8, 2 !src_offset_pos
add.e r4, r10 !src
lda r14, _match_y_block
add r14, r9
xor r15, r15 !dst
lda r8, _Dma_E2IBlock_Y !resflag
mov r9, 1
st r9, r8 !Dma_E2IBlock_Y = 1
lda r7, _PCS
lddu r10, r7, 2 !hor_in,vert_in
ld r7, r7, 0 !hor_out
add r13, 2
br DMA_YUV_E2I_B_CONFIG
DMA_YUV_E2I_B_INDEX_1:
lda r10, _Xvidec
mov r11, 5
ldx r4, r10 !refimg
ld r5, r4, 2 !refimg->uv_page
xor r4, r4 !(refimg->uv_page)<<16
lda r8, _src_offset_pos
movlh r14, 0x00002c00
lddu r10, r8, 2 !src_offset_pos
add.e r4, r10
add.e r4, r14 !src
lda r14, _match_uv_block
add r14, r9
xor r15, r15 !dst
lda r8, _Dma_E2IBlock_UV
mov r9, 1
st r9, r8
lda r7, _PCS_UV
lddu r10, r7, 2 !hor_in,vert_in
ld r7, r7, 0 !hor_out
add r13, 2
DMA_YUV_E2I_B_CONFIG:
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
!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 !DmaChl->DmaDar
movlh r0, 0x00060013
stdu r0, r13, 2 !DmaChl->DmaCtl.Lsb
mul.a r10, r11 !hor_in*vert_in
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
mov r4, 320
sub r4, r10 !320-hor_in
xor r5, r5
mov r11, r10
xor r10, r10
shll r11, 4
or.e r4, r10
stdu r4, r13, 2 !DmaChl->DmaSgr
mov r4, r7
mov r5, 0
or.e r4, r10
stdu r4, r13, 2 !DmaChl->DmaDsr
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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -