1 / 12

ECE 353 Introduction to Microprocessor Systems

ECE 353 Introduction to Microprocessor Systems. Discussion 13. Topics. Serial I/O Q&A. Problem.

trisha
Télécharger la présentation

ECE 353 Introduction to Microprocessor Systems

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. ECE 353Introduction to Microprocessor Systems Discussion 13

  2. Topics • Serial I/O • Q&A

  3. Problem • Write a serial receive procedure, receive, that receives a 10-bit frame with even parity. The procedure returns the ASCII character in R0, and parity error status in R1 (0 = no error, 1 = parity error). Assume that two delay procedures are available, half_bit_time and one_bit_time. Also, assume that there is a 1 bit data port defined as INPUT, where you read the incoming data on D0.

  4. Answer • We will assume Asynchronous Serial Protocol • A 10-bit frame will include: • A one-bit start bit: 0 • A 7-bit pattern – sent LSB first • A parity bit – optional, used in this problem (The problem itself states the parity will be fixed, thus we will need the parity bit!) • A one-bit stop bit : 1. • Things to keep in mind: • Is there a way to distinguish noise from an actual start bit? • When is the best time to read the input to avoid errors due to noise or signal fluctuations or timing variations between receiver and transmitter?

  5. Solution code “skeleton” receive PUSH {R2-R5, LR} ;context save LDR R2, =INPUT MOV R0, #0 MOV R1, #0 MOV R4, #0 ;keep track of parity MOV R5, #8 ;loop count - read bits poll_for_start get_bits parity_error frame_error done POP {R2-R5, PC} ;context restore/return END

  6. Answer • First, we will check for an actual start bit poll_for_start LDR R3, [R2] ;read data port ANDS R3, R3, #1 ;test D0 BNE poll_for_start ;still a 1 - check again BL half_bit_time ;delay 1/2 bit time and ;check again LDR R3, [R2] ;read data port ANDS R3, R3, #1 ;test D0 BNE poll_for_start ;not still 0, keep polling

  7. Answer • Then, we de-serialize the pattern set get_bits BL one_bit_time ;delay 1 bit time and get ;bit LSR R0, #1 ;prep for next bit LDR R3, [R2] ;read data port ANDS R3, R3, #1 ;test D0 ORRNE R0, R0, #0x80 ;put bit in result ADDNE R4, R4, #1 ;count 1 bits for parity calc. SUBS R5, R5, #1 ;decrement loop count BNE get_bits ;loop til count = 0

  8. Answer • Check for frame error, check parity, return result, handle error in frame ;check for frame error BL one_bit_time ;delay 1 bit time and get bit LDR R3, [R2] ;read data port ANDS R3, R3, #1 ;test D0 BEQ frame_error ;framing error parity_error ANDS R4, R4, #1 ;if D0 in R4=1, error, odd # bits MOVNE R1, #1 ;set parity error for return BIC R0, R0, #0x80 ;clear bit7 – just want data bits B done frame_error BL frame_err_proc ;frame error - go to error handler done

  9. RS-485 • Differential transmission • Transceivers usually have separate enables for transmit and receive – allows creation of a multi-drop bus • Longer distances possible than with RS-232 (roughly 4000 feet at 64K)

  10. RS-485

  11. RS-485 • Need a protocol to prevent bus contention – only one transmitter on at a time • Master/Slave • Token passing • Bus turnaround speed is an issue – after completing a transmission, must disable the transmitter before another device enables its transmitter to send a reply or initiate a different transaction • Overhead associated with a bus – must deal with traffic not meant for you – takes cpu time

  12. Questions?

More Related