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

📄 main.asm

📁 声音均衡器的源代码程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
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 + -