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

📄 16x16.dsp

📁 载dsp上实现16dct和8dct的程序
💻 DSP
字号:
{  TWO DIMENSIONAL, FAST, DISCRETE COSINE TRANSFORM, 16 x 16 POINTS
   
   Implementation:
        as described by Hsieh S. Hou in IEEE Transactions on Acoustics,
        Speech, and Signal Processing, Vol. ASSP-35, No.10, October 1987

   Target Processor:
        ADSP-2100 family of DSP processors from Analog Devices, Inc.

   Execution Benchmark:
        10046 instruction cycles -- ADSP-2101 -- 0.5023 ms at CLKOUT=20.00 MHz

   Memory Storage Requirement:
        304 PM = 291 program memory code, 15 program memory data (coefficients)
        274 DM = 18 data memory scratch pad, 256 data memory (16x16 image)
        Note: resulting transform coefficients written over original input data
        assumes: unsigned 8-bit input data, signed 16-bit output coefficients

   Author of Code:
        Christoph D. Cavigioli -- DSP Applications Engineer -- (617) 461-3672

   Release History:
        27-March-1989, extensively revised: 17-July-1989
        Revised: 23-July-1989
        Revised for ADSP-2101 by Ron Coughlin 28-July-1993

   Analog Devices, Inc., DSP Division, P.O.Box 9106, Norwood, MA 02062, USA
}
.module/ram/abs=0        fast_16x16_dct;
.var/pm/ram              cosvals[15];        { cosine coefficients }
.var/circ/abs=0x3800     tmp[16];            { temporary scratch memory }
.var                     xadr, xadr2;
.var                     x[256];             { 16x16 block to transform }
.global    tmp;
.external  DIF16, DIF8, DIF4, DIF2, RLR4, RLR8, RLR16, DC_AND_BREV;
.init      x: <xx.dat>;
.init  cosvals[00]: h#7F6200, h#70E200, h#513300, h#252800,
                    h#F37500, h#C3AA00, h#9D0E00, h#858300;
.init  cosvals[08]: h#7D8A00, h#471C00, h#E70800, h#959300;
.init  cosvals[12]: h#764100, h#CF0500;
.init  cosvals[14]: h#5A8200;

        jump setup; rti; rti; rti;       { jump here at reset }
        rti; rti; rti; rti;              { irq2 interrupt vector }
        rti; rti; rti; rti;              { sport0 tx interrupt vector }
        rti; rti; rti; rti;              { sport0 rx interrupt vector }
        rti; rti; rti; rti;              { sport1 tx interrupt vector }
        rti; rti; rti; rti;              { sport1 rx interrupt vector }
        rti; rti; rti; rti;              { timer interrupt vector }


setup:  l0=0; l1=0; l2=0; l3=0; l5=0; l6=0; m6=1; m7=-3; se=1;

{	calculate the DCT values for the row addresses  }

rows:   si=^x;                   { cols: ^x }
        dm(xadr)=si;
        i2=si;
        si=^x+15;                { cols: ^x+240 }
        dm(xadr2)=si;
        i3=si;
        m5=1;                    { cols: 16 }
        cntr=16;
        do rowdcts until ce;
                i6=^cosvals;
                m2=2;            { cols: 32 }
                m3=-2;           { cols: -32 }
                call DIF16;
                call DIF8;
                call DIF4;
                call DIF2;
                call RLR4;
                call RLR8;
                call RLR16;
                si=dm(xadr);
                i5=si;
                call DC_AND_BREV;
nextrow:        ay0=16;          { cols: 1 }
                ax0=dm(xadr);
                ar=ax0+ay0;
                dm(xadr)=ar;
                i2=ar;
                ax0=dm(xadr2);
                ar=ax0+ay0;
                dm(xadr2)=ar;
rowdcts:        i3=ar;

{ calculate  DCT values for column addresses  }

cols:   si=^x;                   { cols: ^x }
        dm(xadr)=si;
        i2=si;
        si=^x+240;               { cols: ^x+240 }
        dm(xadr2)=si;
        i3=si;
        m5=16;                   { cols: 16 }
        cntr=16;
        do coldcts until ce;
                i6=^cosvals;
                m2=32;           { cols: 32 }
                m3=-32;          { cols: -32 }
                call DIF16;
                call DIF8;
                call DIF4;
                call DIF2;
                call RLR4;
                call RLR8;
                call RLR16;
                si=dm(xadr);
                i5=si;
                call DC_AND_BREV;
nextcol:        ay0=1;           { cols: 1 }
                ax0=dm(xadr);
                ar=ax0+ay0;
                dm(xadr)=ar;
                i2=ar;
                ax0=dm(xadr2);
                ar=ax0+ay0;
                dm(xadr2)=ar;
coldcts:        i3=ar;
wait1:  idle;
        jump wait1;
.endmod;

⌨️ 快捷键说明

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