;**************************************************************************** ;EXFILTER : LOW PASS FILTERING DEMO FOR THE DSP56303EVM ;WILL PASS AUDIO STRAIGHT THROUGH FOR APPROXIMATELY 10 SECONDS, THEN WILL ;PASS IT THROUGH A FILTER FOR APPROXIMATELY 10 SECONDS, THEN STRAIGHT ;THROUGH ETC..ETC..ETC ;*************************************************************************** nolist include 'ioequ.asm' include 'intequ.asm' include 'ada_equ.asm' include 'vectors.asm' list LINEAR EQU $FFFF ;****************************************************************************** ;---Buffer for talking to the CS4218 org x:0 RX_BUFF_BASE equ * RX_data_1_2 ds 1 ;data time slot 1/2 for RX ISR RX_data_3_4 ds 1 ;data time slot 3/4 for RX ISR RX_data_5_6 ds 1 ;data time slot 5/6 for RX ISR RX_data_7_8 ds 1 ;data time slot 7/8 for RX ISR TX_BUFF_BASE equ * TX_data_1_2 ds 1 ;data time slot 1/2 for TX ISR TX_data_3_4 ds 1 ;data time slot 3/4 for TX ISR TX_data_5_6 ds 1 ;data time slot 5/6 for TX ISR TX_data_7_8 ds 1 ;data time slot 7/8 for TX ISR RX_PTR ds 1 ; Pointer for rx buffer TX_PTR ds 1 ; Pointer for tx buffer org x:$10 coefs dc 0.00370753 ;b10 dc 0.5 ;scaling factor dc 0.00741518 ;b11 dc 0.83384359 ;a11 dc 0.00370753 ;b12 dc -0.34867418 ;a22 dc 0.00485158 ;b20 dc 0.5 ;scaling factor dc 0.00970316 ;b21 dc 0.86615109 ;a21 dc 0.00485158 ;b22 dc -0.38555753 ;a22 org y:$10 rtdelay bsc 4,$0 ;used to store information for filter ltdelay bsc 4,$0 tempstore ds 1 ;TONE_OUTPUT EQU HEADPHONE_EN+LINEOUT_EN+(4*LEFT_ATTN)+(4*RIGHT_ATTN) ;TONE_INPUT EQU MIC_IN_SELECT+(15*MONITOR_ATTN) ;CTRL_WD_12 equ NO_PREAMP+HI_PASS_FILT+SAMP_RATE_48+STEREO+DATA_16 ;CLB=0 ;CTRL_WD_34 equ IMMED_3STATE+XTAL1_SELECT+BITS_64+CODEC_MASTER ;CTRL_WD_56 equ $000000 ;CTRL_WD_78 equ $000000 CTRL_WD_12 equ MIN_LEFT_ATTN+MIN_RIGHT_ATTN+LIN2+RIN2 CTRL_WD_34 equ MIN_LEFT_GAIN+MIN_RIGHT_GAIN org p:$100 START main movep #$040003,x:M_PCTL ; set PLL for MF of 4 movep #012421,x:M_BCR ; ori #3,mr ;mask interrupts movec #0,sp ;clear hardware stack pointer move #0,omr ;operating mode 0 move #$40,r6 ; initialise stack pointer move #-1,m6 ; linear addressing jsr ada_init ; intialize codec loop_1 do #$60,wait2 ;do for approximately 10 seconds do #$fff,wait2inner jset #2,x:M_SSISR0,* ;wait for frame sync to pass jclr #2,x:M_SSISR0,* ;wait for frame sync move x:RX_BUFF_BASE,a ;receive left move x:RX_BUFF_BASE+1,b ;receive right move a,x:TX_BUFF_BASE ;transmit left move b,x:TX_BUFF_BASE+1 ;transmit right move #CTRL_WD_12,y0 ;set up control words move y0,x:TX_BUFF_BASE+2 move #CTRL_WD_34,y0 move y0,x:TX_BUFF_BASE+3 wait2inner nop wait2 do #$60,wait ;do for approximately 10s do #$fff,waitinner jset #2,x:M_SSISR0,* ;wait for frame sync. to pass jclr #2,x:M_SSISR0,* ;wait for frame sync move x:RX_BUFF_BASE,a ;receive left move x:RX_BUFF_BASE+1,b ;receive right jsr process_stereo move a,x:TX_BUFF_BASE ;transmit left move b,x:TX_BUFF_BASE+1 ;transmit right move #CTRL_WD_12,y0 move y0,x:TX_BUFF_BASE+2 move #CTRL_WD_34,y0 move y0,x:TX_BUFF_BASE+3 waitinner nop wait jmp loop_1 ;go back to the beginning process_stereo move #ltdelay,r0 ;set up pointer jsr filter ;filter the left sample move a,y:tempstore ;save filtered left sample move b,a ;move right sample move #rtdelay,r0 ;set up pointer jsr filter ;filter the right sample move a,b ;filtered right into b move y:tempstore,a ;filtered left into a rts filter move #LINEAR,m0 ;linear addressing move m0,m4 ori #$08,mr ;set scaling mode do #2,endloop ;do for both stages asr a #coefs,r4 ;r4=pointer to coefficients move a,x0 y:(r0)+,a asr a x:(r4)+,x1 macr x1,x0,a x:(r4)+,x1 y:(r0)-,y0 mpy y0,x1,a a,y1 x:(r4)+,x1 mac x0,x1,a x:(r4)+,x1 macr y1,x1,a x:(r4)+,x1 mpy x1,x0,a x:(r4)+,x1 a,y:(r0)+ macr y1,x1,a tfr y1,a x:(r4)+,x0 a,y:(r0)+ endloop andi #$f3,mr rts include 'ada_init.asm' echo end