📄 hanning.asm
字号:
.include "ccall.asm"
M .set 8 ; Sine table size log2
.text
.def _ti_hanning
_ti_hanning:
pre_ccall 3,AR_X,AR_Y,AR_N
; Modify any registers needed
spm 1 ; MUST Set Product shift to +1
clrc SXM ; MUST Set Sign Extension Mode Off
; Note: Overflow mode is off in C.
mar *,AR_N
banz LOOP,AR_X
b DONE
;STACK CONTENTS:
; 1 = sin_Index / sin_Ynext / sin_Ydiff
; 2 = sin_Frac
; 3 =
; End C Preprocessing
; ldp #sin_X
; lacc sin_X,8 ; Index = integer(X + Phase)
LOOP:
lacc *+,M-1,AR_STACK
;;; add sin_Phase,8 ;;; UNUSED
; sach sin_Index
; sacl sin_Frac
sach *+,1
and #07fffh ; Zero sign bit
sacl *-
; lacc sin_Index ; Y = SinTable[Index],
lacc *,AR_Y
add #_HanningTable
; tblr sin_Y
tblr *,AR_STACK
add #1
; tblr sin_Ynext ; Ynext = SinTable[Index+1],
tblr *
; lacc sin_Ynext ; Ydiff = Ynext - Y
lacc *,AR_Y
; sub sin_Y
sub *,AR_STACK
; sacl sin_Ydiff
sacl *
; lt sin_Ydiff ; Y = round(Y + Ydiff*Frac)
lt *+
; mpy sin_Frac
mpy *-,AR_Y
; zalr sin_Y
zalr *
apac
; sach sin_Y
sach *+,AR_N
banz LOOP,AR_X
; Begin C Post Processing
DONE:
; Restore any other registers modified
; Note: Overflow mode is off in C.
spm 0
post_ccall 3
; You may substitute your own sine table here to trade off accuracy for storage.
; Just compute one full cycle of
; a sine wave from 0 to 2*pi and add an extra sample at the end, and convert
; to Q.15 format.
; In Matlab:
;
; tv=linspace(0,2*pi,N+1);
; table=sin(tv);
; inttable=floor(32767.999999999*table);
_HanningTable:
.if (M==8)
.word 0
.word 4
.word 19
.word 44
.word 79
.word 123
.word 177
.word 241
.word 315
.word 398
.word 491
.word 593
.word 705
.word 827
.word 958
.word 1098
.word 1247
.word 1406
.word 1573
.word 1750
.word 1935
.word 2129
.word 2331
.word 2542
.word 2761
.word 2989
.word 3224
.word 3468
.word 3719
.word 3978
.word 4245
.word 4518
.word 4799
.word 5087
.word 5382
.word 5683
.word 5990
.word 6304
.word 6624
.word 6950
.word 7282
.word 7619
.word 7961
.word 8309
.word 8661
.word 9018
.word 9379
.word 9745
.word 10115
.word 10488
.word 10865
.word 11245
.word 11628
.word 12015
.word 12403
.word 12795
.word 13188
.word 13583
.word 13980
.word 14379
.word 14778
.word 15179
.word 15580
.word 15982
.word 16384
.word 16786
.word 17188
.word 17590
.word 17990
.word 18390
.word 18788
.word 19185
.word 19581
.word 19974
.word 20365
.word 20754
.word 21140
.word 21523
.word 21904
.word 22281
.word 22654
.word 23024
.word 23389
.word 23750
.word 24107
.word 24460
.word 24807
.word 25149
.word 25486
.word 25818
.word 26144
.word 26464
.word 26778
.word 27085
.word 27387
.word 27681
.word 27969
.word 28250
.word 28523
.word 28790
.word 29049
.word 29300
.word 29543
.word 29779
.word 30006
.word 30226
.word 30437
.word 30639
.word 30833
.word 31018
.word 31195
.word 31362
.word 31520
.word 31670
.word 31810
.word 31941
.word 32062
.word 32174
.word 32277
.word 32369
.word 32453
.word 32526
.word 32590
.word 32644
.word 32689
.word 32723
.word 32748
.word 32763
.word 32767
.word 32763
.word 32748
.word 32723
.word 32689
.word 32644
.word 32590
.word 32526
.word 32453
.word 32369
.word 32277
.word 32174
.word 32062
.word 31941
.word 31810
.word 31670
.word 31520
.word 31362
.word 31195
.word 31018
.word 30833
.word 30639
.word 30437
.word 30226
.word 30006
.word 29779
.word 29543
.word 29300
.word 29049
.word 28790
.word 28523
.word 28250
.word 27969
.word 27681
.word 27387
.word 27085
.word 26778
.word 26464
.word 26144
.word 25818
.word 25486
.word 25149
.word 24807
.word 24460
.word 24107
.word 23750
.word 23389
.word 23024
.word 22654
.word 22281
.word 21904
.word 21523
.word 21140
.word 20754
.word 20365
.word 19974
.word 19581
.word 19185
.word 18788
.word 18390
.word 17990
.word 17590
.word 17188
.word 16786
.word 16384
.word 15982
.word 15580
.word 15179
.word 14778
.word 14379
.word 13980
.word 13583
.word 13188
.word 12795
.word 12403
.word 12015
.word 11628
.word 11245
.word 10865
.word 10488
.word 10115
.word 9745
.word 9379
.word 9018
.word 8661
.word 8309
.word 7961
.word 7619
.word 7282
.word 6950
.word 6624
.word 6304
.word 5990
.word 5683
.word 5382
.word 5087
.word 4799
.word 4518
.word 4245
.word 3978
.word 3719
.word 3468
.word 3224
.word 2989
.word 2761
.word 2542
.word 2331
.word 2129
.word 1935
.word 1750
.word 1573
.word 1406
.word 1247
.word 1098
.word 958
.word 827
.word 705
.word 593
.word 491
.word 398
.word 315
.word 241
.word 177
.word 123
.word 79
.word 44
.word 19
.word 4
.word 0
.endif
.if (M==9) ; error = +- 2 LS bits
.endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -