📄 blackman.asm
字号:
.include "ccall.asm"
M .set 8 ; Sine table size log2
.def _ti_blackman
_ti_blackman:
; Begin C Preprocessing
pre_ccall 3,AR_X,AR_Y,AR_N
;STACK CONTENTS:
; 1 = sin_Index / sin_Ynext / sin_Ydiff
; 2 = sin_Frac
; 3 =
; 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.
; Subtract one from N and check for N=0
mar *,AR_N
banz LOOP,AR_X
b DONE
; 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 #_BlackmanTable
; 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);
_BlackmanTable:
.if (M==8) ; error = +- 2 LS bits
.word -1
.word 1
.word 7
.word 16
.word 28
.word 44
.word 64
.word 87
.word 115
.word 146
.word 181
.word 220
.word 263
.word 311
.word 362
.word 418
.word 479
.word 544
.word 614
.word 689
.word 769
.word 854
.word 945
.word 1041
.word 1142
.word 1250
.word 1363
.word 1483
.word 1608
.word 1741
.word 1879
.word 2025
.word 2177
.word 2336
.word 2502
.word 2676
.word 2857
.word 3045
.word 3241
.word 3445
.word 3656
.word 3876
.word 4103
.word 4339
.word 4582
.word 4834
.word 5094
.word 5362
.word 5639
.word 5923
.word 6216
.word 6517
.word 6826
.word 7144
.word 7469
.word 7803
.word 8144
.word 8493
.word 8849
.word 9214
.word 9585
.word 9964
.word 10349
.word 10742
.word 11141
.word 11546
.word 11957
.word 12374
.word 12797
.word 13225
.word 13658
.word 14095
.word 14537
.word 14982
.word 15431
.word 15883
.word 16338
.word 16796
.word 17255
.word 17716
.word 18178
.word 18641
.word 19104
.word 19567
.word 20029
.word 20490
.word 20949
.word 21407
.word 21861
.word 22313
.word 22761
.word 23205
.word 23645
.word 24079
.word 24508
.word 24931
.word 25347
.word 25757
.word 26159
.word 26553
.word 26938
.word 27315
.word 27683
.word 28041
.word 28388
.word 28725
.word 29051
.word 29365
.word 29668
.word 29958
.word 30236
.word 30501
.word 30753
.word 30991
.word 31215
.word 31425
.word 31620
.word 31801
.word 31967
.word 32118
.word 32253
.word 32373
.word 32477
.word 32566
.word 32638
.word 32695
.word 32735
.word 32759
.word 32767
.word 32759
.word 32735
.word 32695
.word 32638
.word 32566
.word 32477
.word 32373
.word 32253
.word 32118
.word 31967
.word 31801
.word 31620
.word 31425
.word 31215
.word 30991
.word 30753
.word 30501
.word 30236
.word 29958
.word 29668
.word 29365
.word 29051
.word 28725
.word 28388
.word 28041
.word 27683
.word 27315
.word 26938
.word 26553
.word 26159
.word 25757
.word 25347
.word 24931
.word 24508
.word 24079
.word 23645
.word 23205
.word 22761
.word 22313
.word 21861
.word 21407
.word 20949
.word 20490
.word 20029
.word 19567
.word 19104
.word 18641
.word 18178
.word 17716
.word 17255
.word 16796
.word 16338
.word 15883
.word 15431
.word 14982
.word 14537
.word 14095
.word 13658
.word 13225
.word 12797
.word 12374
.word 11957
.word 11546
.word 11141
.word 10742
.word 10349
.word 9964
.word 9585
.word 9214
.word 8849
.word 8493
.word 8144
.word 7803
.word 7469
.word 7144
.word 6826
.word 6517
.word 6216
.word 5923
.word 5639
.word 5362
.word 5094
.word 4834
.word 4582
.word 4339
.word 4103
.word 3876
.word 3656
.word 3445
.word 3241
.word 3045
.word 2857
.word 2676
.word 2502
.word 2336
.word 2177
.word 2025
.word 1879
.word 1741
.word 1608
.word 1483
.word 1363
.word 1250
.word 1142
.word 1041
.word 945
.word 854
.word 769
.word 689
.word 614
.word 544
.word 479
.word 418
.word 362
.word 311
.word 263
.word 220
.word 181
.word 146
.word 115
.word 87
.word 64
.word 44
.word 28
.word 16
.word 7
.word 1
.word -1
.endif
.if (M==9) ; error = +- 2 LS bits
.endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -