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

📄 dma_opti.s

📁 瑞芯微RK2608固件源代码
💻 S
📖 第 1 页 / 共 4 页
字号:
!      32bit-32bit
!  Author:
!      Fang ZF
!      Jian Huan   (Modify)
!  Date:
!      2006-2006-1-3 21:36
!      2006-1-10 9:01
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!__attribute__((section(".avi_v_text, \"ax\"")))
!void    copy_uv_from_external_to_internal(DECODER *xvid_dec, short x, short y)
!{
!    unsigned long   xy_cord;
!    unsigned long   src = 0, dst = 0;
!    DMA_CHANNEL_REG *DmaChl;
!    
!    while(DMA_CHANNEL_FULL == ( DmaChl = GetDmaChannelState(0))); 
!    
!    xy_cord = (unsigned long)(xvid_dec->width) * (unsigned long)(y<<3) + (unsigned long)(x<<4);
!
!    src = (unsigned long)((unsigned long)(xvid_dec->ref->uv_page)<<16) + 0x2c00 + (unsigned long)xy_cord;
!    dst = (unsigned long)IntMem.mb_uv_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*4;                       //16*8;
!    
!    DmaChl->DmaCfg.Lsb = 0x00000020;
!    DmaChl->DmaCfg.Msb = 0x00001004;
!    
!    DmaChl->DmaSgr = 0x00800098;                 //0x01000130;
!    
!    DmaChl->DmaDsr = 0x00800098;                 //0x01000130;
!    
!    Dma_16x8Block   = 1;
!    
!    DmaChl->Priority   = 2;
!    
!    DmaChl->pResFlag   = &Dma_16x8Block;
!
!    CALL_DmaChannelSetup(0);
!
!}
MP4_ASSEMBLE_SECTION
.global _copy_uv_from_external_to_internal
.walign 2
_copy_uv_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*8               !320
            
            mul.a       r9,     r6
            shll        r5,     4
            
            add         r0,     r5                  !xy_cord
            mov         r9,     r5
            
DMA_COPY_UV_FROM_EXTERNAL_TO_INTERNAL_STATE:            
            mov         r4,     0
            lda         r13,    _GetDmaChannelState
            call        r13
            
            cmp         r4,     -1
            bz          DMA_COPY_UV_FROM_EXTERNAL_TO_INTERNAL_STATE
            
            mov         r13,    r4
            add         r8,     5
            
            mov         r6,     r4
            ld          r2,     r8                  !xvid_dec->ref
            
            ld          r3,     r2,     2           !xvid_dec->ref->uv_page
            xor         r2,     r2
            
            movlh       r10,    0x00002c00
            
            add.e       r2,     r10
            
            add.e       r2,     r0                  !src
            
            movh        r10,    _IntMem
            mov         r14,    -1
            
            movl        r10,    _IntMem
            mov         r15,    -1
            
            ld          r10,    r10,    1           !IntMem.mb_uv_row
            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*4
            
            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_16x8Block
            
            mov         r9,     2
            movl        r8,     _Dma_16x8Block

            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:
!      DMA_RGB_I2E
!  Description:
!      RGB Internal SRAM to External SDRAM
!  Author:
!      Jian H
!  Date:
!      2006-1-5 9:10
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!__attribute__((section(".avi_v_text, \"ax\"")))
!void DMA_RGB_I2E(unsigned short *RgbBuf, short y, short size)
!{
!    unsigned long dstRGB;
!    unsigned long RGBPage = 4;
!    DMA_CHANNEL_REG *DmaChl;
!
!    while(DMA_CHANNEL_FULL == ( DmaChl = GetDmaChannelState(1))); 
!    
!    RGBPage = 262144 + ((unsigned long)AviRgbSdramIndex)*76800; 
!    dstRGB = (unsigned long )((unsigned long )(RGBPage)) + (unsigned long)(y)*(unsigned long)(size/320);          //指向SDRAM里当前帧Y分量的地址 
!
!//---------------------------------------------------------------------
!    DmaChl->pDmaFnct    = DMA_FNCT_NULL;
!    DmaChl->pDmaFnctArg = DMA_FNCT_NULL;
!//--------------------------------------------------------------------- 
!    
!    DmaChl->DmaSar = (unsigned long)(((unsigned long)(RgbBuf)<<1)+(unsigned long)0x40000);
!    DmaChl->DmaDar = ((unsigned long)(dstRGB)<<1)+(unsigned long)0x4000000;
!    
!    DmaChl->DmaCtl.Lsb = 0x00040025;              
!    DmaChl->DmaCtl.Msb = 0x00000A00;             //320*16/2
!    
!    DmaChl->DmaCfg.Lsb = 0x00000020;
!    DmaChl->DmaCfg.Msb = 0x00001004;
!    
!    DmaChl->DmaDsr = 0x00800070;
!    
!    Dma_RGB_I2E   = 1;
!    
!    DmaChl->Priority   = 2;
!
!    DmaChl->pResFlag   = &Dma_RGB_I2E;
!        
!    CALL_DmaChannelSetup(1);
!} 
MP4_ASSEMBLE_SECTION
.global _DMA_RGB_I2E
.walign 2
_DMA_RGB_I2E:
            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         r0,     r5

DMA_RGB_I2E_STATE:            
            mov         r4,     1
            lda         r13,    _GetDmaChannelState
            call        r13
            
            cmp         r4,     -1              !DMA_CHANNEL_FULL           
            bz          DMA_RGB_I2E_STATE
            
            mov         r13,    r4
            mov         r6,     r4
            
            movl        r11,    _AviRgbSdramIndex
            movl        r14,    150
            
            movh        r11,    _AviRgbSdramIndex
            movh        r14,    0
            
            
            ld          r11,    r11             !AviRgbSdramIndex             
            shll        r0,     4               !y*(size/320)=y*16
            
            shll        r11,    9               !AviRgbSdramIndex*32*16
            mov         r1,     4               !4*64*1024=262144=0x4,0000
            
            mac.a       r11,    r14             !dstRGB

            mov         r14,    -1
            mov         r15,    -1

!DmaChl->pDmaFnct    = DMA_FNCT_NULL;
!DmaChl->pDmaFnctArg = DMA_FNCT_NULL;            
            stdu        r14,    r13,    2       
            
!DmaChl->DmaSar = (unsigned long)(((unsigned long)(RgbBuf)<<1)+(unsigned long)0x40000);
!DmaChl->DmaDar = ((unsigned long)(dstRGB)<<1)+(unsigned long)0x4000000;            
            mov         r9,     0
            add         r13,    2
            
            shll.e      r8,     1
            
            movlh       r10,    0x40000
            
            add.e       r8,     r10
            
            stdu        r8,     r13,    2
            shll        r11,    8
            
            shll.e      r0,     1
            
            add.e       r0,     r10
            
            stdu        r0,     r13,    2
            
!DmaChl->DmaCtl.Lsb = 0x00040025;              
!DmaChl->DmaCtl.Msb = 0x00000A00;  
            movlh       r8,     0x00040025
            stdu        r8,     r13,    2           !DmaChl->DmaCtl.Lsb
            
            movlh       r10,    0x00000A00
            stdu        r10,    r13,    2           !DmaChl->DmaCtl.Msb

!DmaChl->DmaCfg.Lsb = 0x00000020;
!DmaChl->DmaCfg.Msb = 0x00001004;
            
            movlh       r8,     0x00000020
            stdu        r8,     r13,    2           !DmaChl->DmaCfg.Lsb
            
            movlh       r10,    0x00001004
            stdu        r10,    r13,    2           !DmaChl->DmaCfg.Msb

!DmaChl->DmaDsr = 0x00800070;            
            movlh       r8,     0x00800070

            add         r13,    2
            mov         r5,     1

            stdu        r8,     r13,    2           !DmaChl->DmaDsr
            
            movh        r8,     _Dma_RGB_I2E
            mov         r9,     2

            movl        r8,     _Dma_RGB_I2E
            mov         r4,     1

            st          r5,     r8,     0
            movh        r13,    _CALL_DmaChannelSetup
            
            st          r9,     r6,     3           !DmaChl->Priority
            movl        r13,    _CALL_DmaChannelSetup
            
            st          r8,     r6,     2           !DmaChl->pResFlag
            
            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
            
            

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -