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

📄 dma_opti.s

📁 瑞芯微RK2608固件源代码
💻 S
📖 第 1 页 / 共 4 页
字号:
            
            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 + -