fir4 using tms32031 code
DESCRIPTION
FIR4 USING TMS32031 CODE. FIR4.ASM. DATA. 1 2 3 4 10 0 0 0 HN IN XN LENGTH. AR5---->. HN IN HN_ADDR IN_ADDR XN_ADDR XB_ADDR OUT_ADDR. 809900 809901 809902 809903 809904 809905 809906 809907 809908 809909 80990a 80990b 80990c 80990d. - PowerPoint PPT PresentationTRANSCRIPT
FIR4 USING TMS32031 CODE
FIR4.ASM;FIR4.ASM - BACKGROUND FOR FILTER PROGRAM .start ".data",0x809900 ;starting address of data .start ".text",0x809C00 ;starting address of text .data ;data sectionHN .float 1,2,3,4 ;HN valuesIN .float 10,0,0,0 ;4 input valuesHN_ADDR .word HN ;starting address of HN arrayIN_ADDR .word IN ;starting address of IN arrayXN_ADDR .word XN ;starting address of XN bufferXB_ADDR .word XN+LENGTH-1 ;last (bottom) address of XNOUT_ADDR .word 0x809802 ;address of output resultLENGTH .set 4 ;size of circular buffer
DATA
809900 809901 809902 809903 809904 809905 809906 809907 809908 809909 80990a 80990b 80990c 80990d
00000000 010000000140000002000000 03200000 80000000 80000000 80000000 00809900 00809904 00809910 0080990B 00809802 00000004
12
3 4
10000
HN IN
XN
LENGTH
HN
IN
HN_ADDRIN_ADDRXN_ADDRXB_ADDROUT_ADDR
AR5---->
809910 809911 809912 809913
Circular Buffer
80000000800000008000000080000000
XN
XN + LENGTH - 1
809802 809803 809804 809805
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
OUT_ADDR
Output
AR2---->
AR1---->
.text ;text section
.entry BEGIN ;start of codeBEGIN LDP HN_ADDR ;init to data page 128 LDI @IN_ADDR,AR5 ;AR5=starting address of input LDI @XB_ADDR,AR1 ;AR1=bottom address XN buffer LDI @OUT_ADDR,AR2 ;AR2=address of result (output) LDI LENGTH,BK ;BK=4, size of circular buffer LDI LENGTH,R4 ;R4=4, used as loop counterLOOP LDF *AR5++,R3 ;R3=1st input value STF R3,*AR1++% ;store value at bottom of XN buffer LDI @HN_ADDR,AR0 ;AR0=starting address of HN array CALL FILTER ;go to subroutine FILTER FIX R2,R0 ;convert from float to integer STI R0,*AR2++ ;store result to "output" address SUBI 1,R4 ;decrement loop counter R4 BNZ LOOP ;branch back until R4=0WAIT BR WAIT ;wait indefinitely
809c00 809c01 809c02 809c03 809c04 809c05
INSTRUCTIONS
LDP HN_ADDR LDI @IN_ADDR,AR5LDI @XB_ADDR,AR1LDI @OUT_ADDR,AR2LDI LENGTH,BKLDI LENGTH,R4
Data Page (DP) register
80
AR5
00809904AR1
00809913
AR2
00809802
Block (BK) register
00000004
R4
00000004
809c06 809c07 809c08 809c09
INSTRUCTIONS
LDF *AR5++,R3 STF R3,*AR1++%LDI @HN_ADDR,AR0CALL FILTER
809904 809905 809906 809907
03200000800000008000000080000000
IN 10 0 0 0
AR5---->
809910 809911 809912 809913
80000000800000008000000003200000
XN
XN + LENGTH - 1AR1---->
03200000
R3AR1---->
809900 809901 809902 809903
00000000010000000140000002000000
HN 1 2 3 4
AR0---->
809c0F 809c10 809c11 809c12809C13809C14
INSTRUCTIONS
LDF 0,R0 LDF 0,R2RPTS LENGTH - 1MPYF3 *AR0++,*AR1++%,R0ADDF3 R0,R2RETS
FILTER
00000000
R0
00000000
R2
0 1 = 0 0
R0
0
R2
R0 R2
0 2 = 0 0 0
0 3 = 0 0
R0
0
R2
10 4 = 40 40
R0
0
R2
40
R0
40
R2
ADDF3 R0,R2
809c06 809c07 809c08 809c09
INSTRUCTIONS
LDF *AR5++,R3 STF R3,*AR1++%LDI @HN_ADDR,AR0CALL FILTER
809904 809905 809906 809907
03200000800000008000000080000000
IN 10 0 0 0
AR5---->
809910 809911 809912 809913
80000000800000008000000003200000
XN
XN - 1
AR1----> 08000000
R3AR1---->
809900 809901 809902 809903
00000000010000000140000002000000
HN 1 2 3 4
AR0---->
809c06 809c07 809c08 809c09
INSTRUCTIONS
LDF *AR5++,R3 STF R3,*AR1++%LDI @HN_ADDR,AR0CALL FILTER
809904 809905 809906 809907
03200000800000008000000080000000
IN 10 0 0 0
AR5---->
809910 809911 809912 809913
80000000800000008000000003200000
XN - 1XN
XN - 2AR1---->
08000000
R3
AR1---->
809900 809901 809902 809903
00000000010000000140000002000000
HN 1 2 3 4
AR0---->
809c06 809c07 809c08 809c09
INSTRUCTIONS
LDF *AR5++,R3 STF R3,*AR1++%LDI @HN_ADDR,AR0CALL FILTER
809904 809905 809906 809907
03200000800000008000000080000000
IN 10 0 0 0
AR5---->
809910 809911 809912 809913
80000000800000008000000003200000
XN - 2XN - 1XNXN - 3AR1---->
08000000
R3
AR1---->
809900 809901 809902 809903
00000000010000000140000002000000
HN 1 2 3 4
AR0---->