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

📄 dma_opti.s

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