á
XR17C152
REV. 1.2.0
5V PCI BUS DUAL UART
49
5.0
PROGRAMMING EXAMPLES
5.1
UNLOADING RECEIVE DATA USING THE SPECIAL RECEIVE FIFO DATA WITH STATUS
It is suggested that before starting to read the Special Receive FIFO Data with Status to unload data from any
UART channel (address 0x180 for channel 0), do a dummy read to the Device ID (DVID) register in the Config-
uration Register of the device. The Special Receive FIFO Data with Status register can then be read multiple
times subsequently without any byte-swapping problem as long as no other register (except the Device ID reg-
ister) is accessed in between data unload. If you must read or write to another register, make that dummy read
to the DVID register again and continue with data unloading.
A step by step procedure describing the sequence for a target channel is shown below. From the receive data
service routine:
Do a dummy read to Device ID (DVID) register. Address 0x8D in BYTE alignment or address 0x8C in
DWORD alignment.
Read the data byte and its associated error status from ‘Special Receive FIFO Data with Status’ register of
the target channel until done or empty when one of the LSR status byte bit-0=0.
NOTE: If you must do other Read/Write operations to other register(s) during data unloading, repeat steps 1 &
2 to continue unloading data plus status from the ‘Special Receive FIFO Data with Status’ register of the target
channel.
Some Examples of using the Special Receive FIFO Data with Status:
EXAMPLE I: POLLING
.....................
Read LSR
Read DVID
Read Special Receive FIFO Data with Status (address 0x180 for channel 0, etc)
Read Special Receive FIFO Data with Status (address 0x180 for channel 0, etc)*
Read Special Receive FIFO Data with Status (address 0x180 for channel 0, etc)
....................
EXAMPLE 2: INTERRUPT SERVICE USING INTERRUPT INFORMATION IN DEVICE CONFIGURATION REGISTER SET
.....................
Read Global Interrupt Register INT0 (address 0x080)
Read INT1 through INT3 registers to identify interrupting channel (address 0x081 through 0x083)
Read DVID
Read Special Receive FIFO Data with Status (address 0x180 for channel 0, etc)
Read Special Receive FIFO Data with Status (address 0x180 for channel 0, etc)*
Read Special Receive FIFO Data with Status (address 0x180 for channel 0, etc)
................
EXAMPLE 3: INTERRUPT SERVICE USING INTERRUPT INFORMATION IN INDIVIDUAL CHANNEL’S REGISTERS
................
Read Global Interrupt Register INT0 (address 0x080)
Read ISR register of interrupting channel
Read DVID
Read Special Receive FIFO Data with Status (address 0x180 for channel 0, etc)
Read Special Receive FIFO Data with Status (address 0x180 for channel 0, etc)*
Read Special Receive FIFO Data with Status (address 0x180 for channel 0, etc)
................
* In case some other registers need to be accessed in between ‘Special Receive FIFO Data with Status’
reads, a ‘Read DVID’ instruction has to be inserted before resuming ‘Special Receive FIFO Data with Status’
read operation.