<< Chapter < Page Chapter >> Page >

Download the code here ser_echo

1 .copy "v:\54x\dsplib\core.asm" 23 .sect ".data" 4 hold .word 05 6 .sect ".text"7 main 8 stm #hold,AR3 ; Read to hold location9 10 READSER 1 ; Read one byte from serial port11 12 cmpm AR1,#1 ; Did we get a character?13 bc main,NTC ; if not, branch back to start14 15 stm #hold,AR3 ; Write from hold location16 WRITSER 1 ; ... one byte 1718 b main

On Line 8, we tell READSER to receive into the location hold by setting AR3 to point at it. On Line 9, we call READSER 1 to read one serial byte into hold; the byte is placed in the low-order bits of the word and the high-order bits are zeroed. If a byte was read, AR1 will be set to 1. AR1 is checked in Line 12; Line 13 branches back to the top if no byte was read. Otherwise, we tell reset AR3 to hold (since READSER moved it), then call WRITSER to send the word we received on Line 16. On Line 18, we branch back to the start to receive another character.

Got questions? Get instant answers now!

Alternative method in assembly

Many students have found that there are issues with the READSER and WRITSER macros. Performance of these macros is often "flaky" if they even work at all. Two ECE 320 studentsI-Ju Liao and Jung-Gyu Lee from the Fall 2002 semester created this alternative method which provides much better assembly support for serial port access. The following is a skeletonfor reading data from the serial port onto the DSP:

Skeleton of a program for receiving data over the serial port. The function of interest is get_data. In this function, we first recieve one 8 bit valueand store it at value_1 . Then, we receive one 16 bit value and store it at value_2 .

.copy "v:\ece320\54x\dsplib\core.asm".sect ".data"value_1 .word 0 value_2 .word 0.sect ".text" main:loop:WAITDATAcall #get_data ; call function to get serial port datastm #BlockLen-1, BRC rptb endblock-1;******your code goes hereendblock:b loopget_data: pshm AR0 ; we save all registers that are used inpshm AR2 ; this function - note that accumulator pshm AR3 ; B IS OVERWRITTEN!pshm BKmvdm #srx_head, AR2 ; srx_head, defined in core.asm, points ; to one element past the last value; recieved in the serial recieve bufferstm #ser_rxlen, BK ; set BK to length of receive buffermar *+AR2(-4)% ; AR2 now points to the most recently ; received block of 24 bits, i.e. one 8; bit value and one 16 bit valuestm #1, AR0 ; set incrementstm #value_1, AR3 ; get first value mvdd *AR2+0%, *AR3 ; save at value_1stm #value_2, AR3 ; get second valueld *AR2+%, 8, B ; place first 8 bits in high part of B or *AR2+%, B ; combine last 8 bits in low part of Bstl B, *AR3 ; save at value_2popm BK popm AR3popm AR2 popm AR0ret
Got questions? Get instant answers now!

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