📄 main.asm
字号:
D18 .WORD 1314
D19 .WORD -1722
D20 .WORD -2278
D21 .WORD 1707
D22 .WORD 3266
D23 .WORD -1262
D24 .WORD -4011
D25 .WORD 466
D26 .WORD 4289
D27 .WORD 466
D28 .WORD -4011
D29 .WORD -1262
D30 .WORD 3266
D31 .WORD 1707
D32 .WORD -2278
D33 .WORD -1722
D34 .WORD 1314
D35 .WORD 1384
D36 .WORD -580
D37 .WORD -873
D38 .WORD 158
D39 .WORD 383
D40 .WORD -6
D41 .WORD -44
D42 .WORD 11
D43 .WORD -112
D44 .WORD -58
D45 .WORD 132
D46 .WORD 84
D47 .WORD -92
D48 .WORD -78
D49 .WORD 50
D50 .WORD 63
D51 .WORD -24
************************** Peak filter section 5 *************************
; (2760Hz cut off) Highest
E1 .WORD -46
E2 .WORD 32
E3 .WORD 42
E4 .WORD -71
E5 .WORD -24
E6 .WORD 131
E7 .WORD -39
E8 .WORD -191
E9 .WORD 175
E10 .WORD 198
E11 .WORD -383
E12 .WORD -79
E13 .WORD 612
E14 .WORD -229
E15 .WORD -758
E16 .WORD 754
E17 .WORD 667
E18 .WORD -1461
E19 .WORD -146
E20 .WORD 2251
E21 .WORD -1091
E22 .WORD -2980
E23 .WORD 3832
E24 .WORD 3495
E25 .WORD -15137
E26 .WORD 20861
E27 .WORD -15137
E28 .WORD 3495
E29 .WORD 3832
E30 .WORD -2980
E31 .WORD -1091
E32 .WORD 2251
E33 .WORD -146
E34 .WORD -1461
E35 .WORD 667
E36 .WORD 754
E37 .WORD -758
E38 .WORD -229
E39 .WORD 612
E40 .WORD -79
E41 .WORD -383
E42 .WORD 198
E43 .WORD 175
E44 .WORD -191
E45 .WORD -39
E46 .WORD 131
E47 .WORD -24
E48 .WORD -71
E49 .WORD 42
E50 .WORD 32
E51 .WORD -46
.data
seed .word 07e6dh ; seed for random variable
temp .word 0
XN .word 0,0,0,0,0,0,0,0,0,0 ; 51 data locations for 51
XN1 .word 0,0,0,0,0,0,0,0,0,0 ; stage delay line.
XN2 .word 0,0,0,0,0,0,0,0,0,0 ;
XN3 .word 0,0,0,0,0,0,0,0,0,0 ;
XN4 .word 0,0,0,0,0,0,0,0,0,0 ;
XNLAST .word 0 ;
OUTPUT .word 0 ; Extra word for the bit bucket
h0 .word 0,0,0,0,0,0,0,0,0,0
.word 0,0,0,0,0,0,0,0,0,0
.word 0,0,0,0,0,0,0,0,0,0
.word 0,0,0,0,0,0,0,0,0,0
.word 0,0,0,0,0,0,0,0,0,0
.word 0 ; 51 Words !
aic_in_rst .word 0
aic_out_of_rst .word 0
.text
.copy "init_aic.asm"
.copy "init_ser.asm"
.copy "init_54x.asm"
.copy "aic_cfg.asm"
main_start:
call init_54 ; Initialize ST0,ST1 PMST
; and other regsiters.
call serial_init ; Initialize serial port
dcall aic_init ; Initialize AIC.
DP = #0
nop
INTM = 1
DP = #G1
A = #START_GAIN_VAL
@G1 = A ; Initialize gain value for
@G2 = A ; each of the five bands.
@G3 = A
@G4 = A
@G5 = A
DP = #0
nop
HPIC = #K_SMODE ; set HINT
PCFLAG nop
nop
A = HPIC
A = #08h & A ; wait for PC to clear HINT
if (ANEQ) goto PCFLAG
HPIC = #K_SMODE ; set HINT
up_top: ; up_top is the label to which
; execution goes when a new
; gain value is sent from
; the host.
INTM = 1
DP = #G1
AR1 = #G1 ; ar1 points to gain1
BRC = #4 ; Block repeat counter
AR2 = #A1 ; ar2 points to coeff1
AR3 = #NEW ; ar3 points to a new location
blockrepeat(PHILEND-1) ; Repeat block 5 times
AR4 = #50 ; Put 50 into the aux register for loop count
; Repeat 51 times
A = *AR1 << 16 ; Put gain1, ar1 into acc
nop
Philter:
nop
nop
B = *AR2+ * hi(A) , T = *AR2+ ; Multy ar1 by coeff1, ar2
*AR3+ = hi(B) ; Put the product in ar3
if (*AR4- != 0) goto Philter ; End repeat
nop
mar(*AR1+) ; ar1 must point to next gain
PHILEND
nop ; End of repeat block
nop
AR1 = #NEW ; Reset pointers
AR2 = #(NEW+51) ; Set each aux reg to the
AR3 = #(NEW+102) ; next set of 51 coeffs
AR4 = #(NEW+153)
AR5 = #(NEW+204)
AR0 = #h0
AR6 = #50 ; Loop counter
Sphinx:
A = *AR1+ ; Load first coeff into accumulator
A = A + *AR2+ ; Add ar2 first coeffs second peak filter
A = A + *AR3+ ; Add ar3 first coeff third peak filter
A = A + *AR4+ ; Add ar4 first coeff fourth pek filter
A = A + *AR5+ ; ADD AR5 first coeff fifth peak filter
*AR0+ = A << 0
if (*AR6- != 0) goto Sphinx
INTM = 0
nop
WAIT:
***************************** DSP\HOST Interface *******************************
DP = #OUTPUT
A = #my_stack
AR0 = A ; save current ar0
; A = @OUTPUT << 0
; *AR0 = A
; port(12h) = *AR0 ; write filtered data value
; ; to EVM communications channel B
wait A= HPIC ; check to see if PC has new gain values.
A = A & #8h
if (ANEQ) goto wait ; no, wait and process another
HPIC = #K_SMODE ; yes new gain values, set HINT
INTM = 1
poll nop
nop ; wait for PC to load new gain values
A = HPIC ; PC clears HINT after loading gain values
A = #08h & A
if (ANEQ) goto poll
INTM=0
HPIC = #K_SMODE
A = TRCV
goto up_top ; process another with new gain values.
receive:
push(AH) ; Save AH and AL
push(AL)
push(AR0)
push(ST0)
DP = #t_data
A = TRCV ; Load accu with word
; RECEIVED FROM AIC!
@t_data = A << 0
DP = #seed ; This sets Data Memory Page Pointer
; to page XN, which is defined
; earlier in the program.
@XN = A << 0 ; STORE THE VALUE OF RECEIVED
; WORD TO VARIABLE XN!
AR0 = #XNLAST ; LOAD AR0 WITH ADDRESS OF LAST
; Delay element!
A = #0 ; Zero accu A!
repeat(#50) ; Repeat next instructions 50 times.
macd(*AR0-,h0,A) ; Compute FIR output.
@OUTPUT = hi(A) << 0 ; Store the filtered input into
; variable OUTPUT.
A = @OUTPUT << 0 ; OUTPUT ==>Accumulator A
A = #0FFFCh & A ; TWO LSB's MUST BE ZERO FOR AIC!
TDXR = A ; Send to transmit reg!
ST0 = pop()
AR0 = pop()
AL = pop()
AH = pop()
return_enable ; Enable interrupts and return
; from interrupt.
transmit:
return_enable ; Enable interrupts and return
; from interrupt.
end_program:
INTM = 1
self:
goto self
.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -