.def _fir_asm_intr .def _fir_asm_init .sect ".iprog" .global _h .global _R_in _fir_asm_init MVKL 0x018C0000,B6 MVKH 0x018C0000,B6 MVKL 0xFFFF0000,A10 ; Use A10 as a mask MVKH 0xFFFF0000,A10 MVKL 0x0000FFFF,A11 ; Use A11 as a mask MVKH 0x0000FFFF,A11 MVKL 0x0440,B2 ;B5 and A7 used for circular addressing MVKLH 0x7,B2 ; N=7 -> 2^N+1 = 128 *2 MVC B2,AMR MVKL _R_in,A7 MVKH _R_in,A7 MVKL _h,B5 MVKH _h,B5 MVKL 127,B9 MVKH 127,B9 MV B9,A9 LDH *++B5[b9],A4 ; Dummy read to poit to h0. LDH *++A7[a9],A4 ; Dummy read to point to R_in[128] NOP 4 B B3 NOP 5 _fir_asm_intr ZERO A5 LDH *B6,A4 NOP 4 MV A4,A3 ; Preserve the input into A3 AND A3,A11,A3 STH A4,*++A7 ; Pre-increment to offset x[n] MVKL 120,B0 ; Set the loop counter to 128 -8 = 120 MVKH 120,B0 ;*----------------------------------------------------------------------* ; PIPED LOOP PROLOG LDH .D2T2 *B5++,B4 || LDH .D1T1 *A7++,A0 LDH .D2T2 *B5++,B4 || LDH .D1T1 *A7++,A0 [ B0] SUB .L2 B0,0x1,B0 || LDH .D2T2 *B5++,B4 || LDH .D1T1 *A7++,A0 [ B0] B .S2 loop || [ B0] SUB .L2 B0,0x1,B0 || LDH .D2T2 *B5++,B4 || LDH .D1T1 *A7++,A0 [ B0] B .S2 loop || [ B0] SUB .L2 B0,0x1,B0 || LDH .D2T2 *B5++,B4 || LDH .D1T1 *A7++,A0 [ B0] B .S2 loop || [ B0] SUB .L2 B0,0x1,B0 || LDH .D2T2 *B5++,B4 || LDH .D1T1 *A7++,A0 MPY .M1X B4,A0,A4 || [ B0] B .S2 loop || [ B0] SUB .L2 B0,0x1,B0 || LDH .D2T2 *B5++,B4 || LDH .D1T1 *A7++,A0 MPY .M1X B4,A0,A4 || [ B0] B .S2 loop || [ B0] SUB .L2 B0,0x1,B0 || LDH .D2T2 *B5++,B4 || LDH .D1T1 *A7++,A0 || SHL .S1 A4,1,A4 ;** --------------------------------------------------------------------------* loop: ; PIPED LOOP KERNEL ADD .L1 A4,A5,A5 || MPY .M1X B4,A0,A4 || [ B0] B .S2 loop || [ B0] SUB .L2 B0,0x1,B0 || LDH .D2T2 *B5++,B4 || LDH .D1T1 *A7++,A0 || SHL .S1 A4,1,A4 ;** --------------------------------------------------------------------------* L7: ; PIPED LOOP EPILOG ADD .L1 A4,A5,A5 || MPY .M1X B4,A0,A4 || SHL .S1 A4,1,A4 ADD .L1 A4,A5,A5 || MPY .M1X B4,A0,A4 || SHL .S1 A4,1,A4 ADD .L1 A4,A5,A5 || MPY .M1X B4,A0,A4 || SHL .S1 A4,1,A4 ADD .L1 A4,A5,A5 || MPY .M1X B4,A0,A4 || SHL .S1 A4,1,A4 ADD .L1 A4,A5,A5 || MPY .M1X B4,A0,A4 || SHL .S1 A4,1,A4 ADD .L1 A4,A5,A5 || SHL .S1 A4,1,A4 ADD .L1 A4,A5,A5 || SHL .S1 A4,1,A4 ADD .L1 A4,A5,A5 AND A5,A10,A5 OR A5,A3,A5 STW A5,*B6[1] ;Output the input and the filtered signals NOP 1 B .S2 IRP NOP 5