Uses a device called a UART,
This is used to synchronize with an external event, minimizing response time.
#define FOREVER for( ; ; )
FOREVER {
while( !ready( ) ) ;
do-it( );
}
or in another form
FOREVER {
if ( ready( ) ) do-it( );
}
Sometimes you only want to do the thing once, as you do when putting a character on a serial line.
#define UART1_BASE 0x808c0000
#define UART_DATA_OFFSET 0x00 // low 8 bits
#define UART_FLAG_OFFSET 0x18 // low 8 bits
#define TXFF_MASK 0x20 // Transmit buffer full
flags = (int *)( UART1_BASE + UART_FLAG_OFFSET );
data = (int *)( UART1_BASE + UART_DATA_OFFSET );
while( ( *flags & TXFF_MASK ) ) ;
*data = c;
From the time that the ready bit sets until the first instruction of do-it is executed
while( !ready ) ; do-it;
ready:
ldb r0, STATUS-ADDRESS
and r0, r0, READY-BIT
beq _ready
do-it:
ldb r0, DATA-ADDRESS
Here do-it is acquiring a single byte from interface hardware when the status register indicates that valid data is available in the dara register.
and,
beq, ldb, and and
beqWhat if the CPU has to two things at once?
E.g.,
Unless the rate of bytes coming in and rate of clock ticks are identical
you are guaranteed to lose something sooner or later.
Return to: