UART: Difference between revisions

From WSdev Wiki
Jump to navigationJump to search
(Fixes data register. Adds register addresses and access types. Splits Serial Control into Status and Control.)
 
(One intermediate revision by one other user not shown)
Line 12: Line 12:
The UART features two interrupts:
The UART features two interrupts:


* UART Send Ready - constantly active while the transmit buffer is empty (Serial Status bit 2),
* UART Send Ready - constantly triggering (level interrupt) as long as the transmit buffer is empty (Serial Status bit 2),
* UART Receive Ready - constantly active while the receive buffer contains a byte (Serial Status bit 0).
* UART Receive Ready - constantly triggering (level interrupt) as long as the receive buffer contains a byte (Serial Status bit 0).
 
These interrupts are only triggering if the UART block is enabled.


== I/O ports ==
== I/O ports ==


{{Anchor|Serial Data}}
{{Anchor|Serial Receive Data}}
=== Serial Data ($B1) ===
=== Serial Receive Data ($B1 read) ===
 
<pre>
7  bit  0
---- ----
dddd dddd
|||| ||||
++++-++++- Receive buffer value
</pre>
 
{{Anchor|Serial Transmit Data}}
=== Serial Transmit Data ($B1 write) ===


<pre>
<pre>
Line 25: Line 38:
dddd dddd
dddd dddd
|||| ||||
|||| ||||
++++-++++- Read a byte from the receive buffer, or
++++-++++- Transmit buffer value
          Write a byte into the transmit buffer.
</pre>
</pre>



Latest revision as of 12:00, 8 March 2025

The WonderSwan's EXT port features an UART operating with the following configuration:

  • 9,600 or 38,400 bps (bauds per second),
  • 8N1 (8 data bits followed by 1 stop bit, no parity).

This allows for an effective maximum transfer speed of 960 or 3840 bytes per second, respectively.

The hardware also features one-byte transmit and receive buffers, which allow for a slight delay in code when handling data to/from the console.

Interrupts

The UART features two interrupts:

  • UART Send Ready - constantly triggering (level interrupt) as long as the transmit buffer is empty (Serial Status bit 2),
  • UART Receive Ready - constantly triggering (level interrupt) as long as the receive buffer contains a byte (Serial Status bit 0).

These interrupts are only triggering if the UART block is enabled.

I/O ports

Serial Receive Data ($B1 read)

7  bit  0
---- ----
dddd dddd
|||| ||||
++++-++++- Receive buffer value

Serial Transmit Data ($B1 write)

7  bit  0
---- ----
dddd dddd
|||| ||||
++++-++++- Transmit buffer value

Serial Status ($B3 read)

7  bit  0
---- ----
eb.. .tor
||    |||
||    ||+- 1 if the receive buffer contains a byte
||    |+-- 1 on overrun (receive buffer overflow)
||    +--- 1 if the transmit buffer is empty (can transmit another byte)
|+-------- UART speed: 0 = 9600 bps, 1 = 38400 bps
+--------- UART enable: 0 = off, 1 = on

Serial Control ($B3 write)

7  bit  0
---- ----
ebO. ....
|||
||+------- Write 1 to reset overrun
|+-------- UART speed: 0 = 9600 bps, 1 = 38400 bps
+--------- UART enable: 0 = off, 1 = on