CS452 - Real-Time Programming - Spring 2011

Lecture 3 - Hardware, Flow Control

Pubilc Service Annoucements

  1. Due date for assignment 0/1
  2. `I can remember amusing myself once as an undergraduate, deleting and creating files till I got the right inode numbers to allow a judicious choice of binary file names to result in a directory that was a valid executable a.out image,' says Digby Tarvin. Anybody interested in trying this for elf?
  3. Copying code.
  4. Screens in the laptop area
  5. Thin clients in the trains lab.
  6. Stack: where is it?
  7. Apple rumour

The Hardware

TS-7200

`COM' ports

Connected to UARTs

Only really two

Ethernet port

IP number of the box is static, part of the configuration maintained in Flash memory.

Reset switch

Documentation says the switch is black, but on some boxes it's red.

EP-9302

System on chip

Memory

Byte addressable, word size 32 bits

Separate instruction and data caches


The Software

Compiler

GNU tool chain

RedBoot

Partial implementation

Returns when program terminates

Busy-wait IO

COM2 uses monitor; COM1 goes to train

  1. initialization/configuration
  2. output
  3. input

For assignment 0 you need to increase the functionality.

Bug in one function


How Timers Work

Set them up

Start them counting

Whenever they count through zero they trigger an interrupt.

A better solution for this assignment

Read the documentation carefully.


Data Communication using RS-232

Communication protocol existing since forever.

Configuring RS-232

If you looked at the voltage on a transmit or receive wire doing RS-232 you would see, in order,

  1. start bits for synchronization (1 or 2)
  2. data bits (6, 7 or 8)
  3. possibly a parity bit
  4. stop bits

all coming at a specific rate, measured in bits per second. So you need to configure

  1. transmit/receive speed
  2. how many start bits
  3. how many data bits
  4. whether or not there's a parity bit, and whether the parity is even or odd
  5. how many stop bits

and the configuration must match the other end or communication is impossible.

Errors

Most UARTs have an error register that you can read, which has bits for different types of errors

  1. OVERRUN: you have missed a byte
  2. FRAMING: the UART did not get valid start and stop bits
  3. PARITY: obvious
  4. BREAK: implementation-dependent

Very simple RS-232

Three wires

Wired like this

GND ---------- GND

XMIT --\ /---- XMIT
        X
RCV----/ \---- RCV

Flow Control in RS-232

Three wire works fine as long as both ends of the wire are much faster than the wire itself. But the train controller is very slow. Why?

The train controller needs to be able to say STOP, I can't take any more

Software Flow Control

XOFF, XON

Hardware Flow Control

CTS, RTS or DTR, DSR

What Happens if You Omit Flow Control


What Students are Doing Wrong

Most students who have talked to me have a polling loop that loops something like this

while ( 1 )
    read timer
    if ( timer has counted enough )
       rewrite the time using bw... to terminal;
    if ( terminal READY bit set )
       read byte
       if ( byte == EOL )
           parse command in buffer
           execute command // including bw... to train and bw... to terminal
       else
           accumulate byte in buffer;
    if ( train READY bit set )
        read byte
        accumulate byte in buffer
        if ( buffer has complete command )
           parse command in buffer
           execute command // including bw... to train and bw... to terminal

This code operates correctly some of the time, but not all the time. To see why,

  1. construct a worst case, asking yourself how often each of the events might occur;
  2. calculate the worst case time for all actions to execute, including the waiting

Obviously, the polling loop needs to be quite a bit more complex.


Return to: