;-------------------------------------------------------------------------------------------------------- ; filtre.asm ; Implémentation d'un filtre passe-bas du 2e ordre sur DSP 56303 ; Forme directe ; ; TP/projets DSP EFREI 2002-2003, Benoît Decoux ;-------------------------------------------------------------------------------------------------------- a_0 equ 0.00379/2 a_1 equ 0.00758/2 a_2 equ 0.00379/2 b_1 equ -1.81845/2 b_2 equ 0.83362/2 org X:$10 ;réservation de 5 emplacements mémoire coef dsm 5 ; pour les coefficients du filtre org X:coef ;copie des valeurs des coefficients dans ces mêmes emplacements dc a_0,a_1,a_2,b_1,b_2 org Y:0 en dsm 2 sn dsm 2 org p: init_filtre move #coef,R0 ;R0 pointe sur la zone mémoire "coef" move #4,M0 ;zone de mémoire "coef" modulo 5 move #en,R4 ;R4 pointe sur la zone mémoire "en" move #1,M4 ;zone de mémoire "en" modulo 2 move #sn,R5 ;R5 pointe sur la zone mémoire "sn" move #1,M5 ;zone de mémoire "sn" modulo 2 clr A ;A=0 do #2,fin_raz ;mise à zéro des zones "en" et "sn" move A,Y:(R4)+ ;A=0 dans "en" move A,Y:(R5)+ ;X0=a_0 fin_raz move X:(R0)+,X0 rts filtrage move A,Y1 ;Y(1)=e(n) mpy X0,Y1,A X:(R0)+,X0 Y:(R4)+,Y0 ;A=a_0.e(n), X0=a_1, Y0=e(n-1) mac X0,Y0,A X:(R0)+,X0 Y:(R4),Y0 ;A=A+a_1.e(n-1), X0=a_2, Y0=e(n-2) mac X0,Y0,A X:(R0)+,X0 Y:(R5)+,Y0 ;A=A+a_2.e(n-2), X0=b_1, Y0=s(n-1) mac -X0,Y0,A X:(R0)+,X0 Y:(R5),Y0 ;A=A-b_1.s(n-1), X0=b_2, Y0=s(n-2) macr -X0,Y0,A Y1,Y:(R4) ;A=A-b_2.s(n-2)=s(n)/2, e(n)->e(n-2) asl A X:(R0)+,X0 ;A=2.A=s(n), X0=a_0 move A,Y:(R5) ;s(n) dans s(n-2) rts