This preview shows page 1. Sign up to view the full content.
Unformatted text preview: Serial Driver Design
Serial port (SCI0) interrrupt
· Number of conditions that generate serial port interrupt: two
- Receive (Rx) interrupt—character received by SCI0
- Transmit (Tx) interrupt—SCI0 ready to transmit character · ISR pseudo-code
Read interrupt status
if (RxInterrupt) then
Read character from SCI0 RDR
Enqueue character in RxQueue
; Character lost if RxQueue full
if (TxInterrupt) then
Dequeue character from TxQueue
if (dequeue successful) then
Write character to SCI0 TDR
endif Page 1 of 3 Serial Driver Design Page 2 of 3 Receive (Rx) and Transmit (Tx) triggers
· Rx interrupt—receive data register full (RDRF)
SCI0 received character and is ready for character to be read. · Tx interrupt—transmit data register empty (TDRE)
SCI0 is ready to accept a character to be transmitted. Software (assembly language program) interface
· Needs to be able to send and receive characters over serial link · Must interface with serial driver
- Program does not access SCI0 directly.
- Instead, program accesses queues for receiving and transmitting.
- Characters are sent/received from/to queues by ISR.
· RxQueue—queue for receiving characters from serial port. · TxQueue—queue for transmitting characters over serial port. Receive software interface
· From software perspective, receiving characters from serial port is dequeuing
characters from RxQueue. · Psuedo-code to receive a character in program
Dequeue character from RxQueue
until (dequeue successful) Serial Driver Design Page 3 of 3 Transmit software interface
· From software perspective, transmitting characters from serial port is enqueuing
characters to TxQueue. · Psuedo-code to transmit a character in program
until (enqueue successful)
Enable TxInterrupt Queues and waiting
· If queues are large enough, driver and program do not wait. · Conditions for waiting in assembly language program using serial driver
- TxQueue full when PutChar subroutine called
- RxQueue empty when GetChar subroutine called ...
View Full Document
This note was uploaded on 05/06/2010 for the course EECC 0306-250 taught by Professor Roymelton during the Fall '10 term at RIT.
- Fall '10