<< 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.

Linker Memory Map and Section Names

Using the core file

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.

Using the d/a and a/d converters

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.

Get Jobilize Job Search Mobile App in your pocket Now!

Get it on Google Play Download on the App Store Now




Source:  OpenStax, Digital signal processing laboratory (ece 420). OpenStax CNX. Sep 27, 2006 Download for free at http://cnx.org/content/col10236/1.14
Google Play and the Google Play logo are trademarks of Google Inc.

Notification Switch

Would you like to follow the 'Digital signal processing laboratory (ece 420)' conversation and receive update notifications?

Ask