?? conv.asm
字號:
/**************************************************************************
conv.asm ADSP-2106x
程序功能:計算X[]與Y[]的卷積
***************************************************************************/
#include "def21060.h" /* Memory Mapped IOP register definitions */
#define LENGTH_X 64 /* Constant for number of points in input */
#define LENGTH_Y 64
.SECTION/DM dm_data; /* 定義數據存儲區中的變量 */
.VAR inputx[LENGTH_X]= "square1.dat";
.VAR inputy[LENGTH_Y]= "square2.dat";
.VAR output[LENGTH_X+LENGTH_Y-1]= "zeros.dat";
.SECTION/PM pm_rsti; /* The reset vector resides in this space */
NOP;
USTAT2= 0x108421; /* 1st instr. to be executed after reset */
DM(WAIT)=USTAT2; /* Set external memory waitstates to 0 */
JUMP start;
.SECTION/PM pm_code;
start: M1=1;
I0=inputx;
L0=0;
I3=output+LENGTH_Y-1;
L3=0;
/* 把inputx中的數據復制到output的后半段[LENGTH_Y-1,LENGTH_X+LENGTH_Y-2] */
LCNTR=LENGTH_X, do copydata until lce;
F0=DM(I0,M1);
copydata:DM(I3,M1)=F0;
CALL conv; /* 調用子程序,進行卷積計算 */
end: IDLE;
/********************* 計算時域相關性的子程序 ****************************/
conv: I2=output;
M1=1;
M2=-1;
M9=1;
F15=0; /* 用于給累加器清零 */
/* 計算前面 LENGTH_X 個相關數據 */
LCNTR=LENGTH_X, DO left UNTIL LCE;
I9=I2;
I1=inputy+LENGTH_Y-1; /* 指向inputy的結尾 */
F9=PASS F15, F0=DM(I1,M2), F5=PM(I9,M9);
LCNTR=LENGTH_Y, DO inner1 UNTIL LCE;
F13=F0*F5;
inner1: F9=F9+F13, F0=DM(I1,M2), F5=PM(I9,M9); /* F0=x , F5=y */
left: DM(I2,M1)=F9; /* 存儲計算結果,I2遞增 */
/* 計算后面 LENGTH_Y-1 個相關數據 */
R1=LENGTH_Y; /* 內循次數計數器 */
LCNTR=LENGTH_Y-1, DO right UNTIL LCE;
I9=I2;
I1=inputy+LENGTH_Y-1; /* 指向inputy的結尾 */
R1=R1-1; /* 循環次數遞減 */
F9=PASS F15, F0=DM(I1,M2), F5=PM(I9,M9);
LCNTR=R1, DO inner2 UNTIL LCE;
F13=F0*F5;
inner2: F9=F9+F13, F0=DM(I1,M2),F5=PM(I9,M9); /*F0= y, F5= x */
right: DM(I2,M1)=F9; /* 存儲計算結果,I2遞增 */
RTS;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -