<< Chapter < Page | Chapter >> Page > |
shows the memory regions and sections defined by the linker control file. Note that the sectionsdefined in the linker control file but not listed above are reserved by the core file and should not be used.
To simplify discussion, we have split up the thru6.asm file into two separate files for discussion. One, thru6a.asm contains only the code for using the A/D and D/A converters on the six-channel surroundboard; the other, ser_echo.asm contains only the code to send and receive data from the serial port.
Here we will discuss thru6a.asm , which is shown below. ser_echo.asm is discussed in Core File: Serial Port Communication Between MATLAB and TITMS320C54x .
1 .copy "core.asm"
2
3 .sect ".text"
4 main
5 ; Your initialization goes here.
6
7 loop
8 ; Wait for a new block of 64 samples to come in
9 WAITDATA
10
11 ; BlockLen = the number of samples that come from WAITDATA (64)
12 stm #BlockLen-1, BRC ; Repeat BlockLen=64 times
13 rptb block-1 ; ...from here to the "block" label
14
15 ld *AR6,16, A ; Receive ch1
16 mar *+AR6(2) ; Rcv data is in every other word
17 ld *AR6,16, B ; Receive ch2
18 mar *+AR6(2) ; Rcv data is in every other word
19
20 ; Code to process samples goes here.
21
22 sth A, *AR7+ ; Store into output buffer, ch1
23 sth A, *AR7+ ; ch2
24 sth A, *AR7+ ; ch3
25
26 sth B, *AR7+ ; Store into output buffer, ch4
27 sth B, *AR7+ ; ch5
28 sth B, *AR7+ ; ch6
29
30 block
31 b loop
Line 1 copies in the core code, which initializes the six-channel board and the serial interface,provides the interface macros, and then jumps to "main" in your code. Line 3 declares that what follows should be placed in the program-code area in internalmemory.
On Line 4 , we find the label "main". This is the entry point for your code; once the DSP has finishedinitializing the six-channel board and the serial port, the core file jumps to this label.
On
Line 9 , there is a call to
WAITDATA
.
WAITDATA
waits for the
next block of 64 samples to arrive from the A/D. When itreturns, a pointer to the samples captured by the A/D is
returned in
AR6
(which can also be referred to
as
pINBUF
); a pointer to the start of the
output buffer is returned in
AR7
(also
pOUTBUF
). Note that
WAITDATA
simply calls the
wait_fill
subroutine in the
core file, which uses the
B
register
internally, along with the
DP
register and the
TC
flag; therefore, do not expect the value of
B
to be preserved across the
WAITDATA
call.
Lines 12 and
13 set up a block
repeat.
BlockLen
is set by the core code as the
length of a block; the repeat instruction therefore repeatsfor every sample time.
Lines 15-18 retrieve
one sample from each of the two channels; note that thereceived data is placed in every other memory
location.
Lines 22-24 place the first input
channel into the first three output channels, and
lines 26-28 place the second input channel into
the last three output channels.
shows the relationship between the channel
numbers shown in the code and the inputs and outputs on thesix-channel board.
Notification Switch
Would you like to follow the 'Dsp laboratory with ti tms320c54x' conversation and receive update notifications?