DoStuff Wiki
Attachments
History
Blame
View Source
Documentation
About An Otter Wiki
Toggle dark mode
Login
Home
A - Z
Changelog
Page Index
Hardware
Backplane
Board Features
Memory Map
News
20260512 - Increased Cpu Speed
Programming
Examples
Duart
PIT
Handling Interrupts
Machine Library
MMU
Reference Material
Runtime
Toolchains
Project Ideas
Operating System
Gloworm Port
Linux Port
Atari Vector Generator
Ethernet Card
Keyboard Controller
Monitor
BIOS
Books
Datasheets
Getting Connected
Home
Specs and Tech Notes
Programming
Examples
Duart
b396d9
Commit
b396d9
2026-04-16 11:23:26
Bob Green
: -/-
programming/examples/duart.md
..
@@ 8,35 8,72 @@
```
#### gcc
```c
-
/* Duart Register Addresses */
-
#define duart_base ((unsigned char*) 0xad0001)
-
-
#define duart_mr1a ((unsigned char*) duart_base)
-
#define duart_mr2a ((unsigned char*) duart_base)
-
#define duart_sra ((unsigned char*) duart_base+2)
-
#define duart_csra ((unsigned char*) duart_base+2)
-
#define duart_cra ((unsigned char*) duart_base+4)
-
#define duart_rba ((unsigned char*) duart_base+6)
-
#define duart_tba ((unsigned char*) duart_base+6)
-
#define duart_ipcr ((unsigned char*) duart_base+8)
-
#define duart_acr ((unsigned char*) duart_base+8)
-
#define duart_isr ((unsigned char*) duart_base+10)
-
#define duart_imr ((unsigned char*) duart_base+10)
-
#define duart_cur ((unsigned char*) duart_base+12)
-
#define duart_ctur ((unsigned char*) duart_base+12)
-
#define duart_clr ((unsigned char*) duart_base+14)
-
#define duart_ctlr ((unsigned char*) duart_base+14)
-
#define duart_mr1a ((unsigned char*) duart_base+16)
-
#define duart_mr2b ((unsigned char*) duart_base+16)
-
#define duart_srb ((unsigned char*) duart_base+18)
-
#define duart_csrb ((unsigned char*) duart_base+18)
-
#define duart_crb ((unsigned char*) duart_base+20)
-
#define duart_rbb ((unsigned char*) duart_base+22)
-
#define duart_tbb ((unsigned char*) duart_base+22)
-
#define duart_ivr ((unsigned char*) duart_base+24)
-
#define duart_opcr ((unsigned char*) duart_base+26)
-
#define duart_start_counter ((unsigned char*) duart_base+28)
-
#define duart_opr_set ((unsigned char*) duart_base+28)
-
#define duart_stop_counter ((unsigned char*) duart_base+30)
-
#define duart_opr_reset ((unsigned char*) duart_base+30)
+
/* Duart Register Base Addresses */
+
#define duart_base ((volatile uint8_t*) 0xad0001)
+
+
#define duart_mr1a ((volatile uint8_t*) duart_base)
+
#define duart_mr2a ((volatile uint8_t*) duart_base)
+
#define duart_sra ((volatile uint8_t*) duart_base+2)
+
#define duart_csra ((volatile uint8_t*) duart_base+2)
+
#define duart_cra ((volatile uint8_t*) duart_base+4)
+
#define duart_rba ((volatile uint8_t*) duart_base+6)
+
#define duart_tba ((volatile uint8_t*) duart_base+6)
+
#define duart_ipcr ((volatile uint8_t*) duart_base+8)
+
#define duart_acr ((volatile uint8_t*) duart_base+8)
+
#define duart_isr ((volatile uint8_t*) duart_base+10)
+
#define duart_imr ((volatile uint8_t*) duart_base+10)
+
#define duart_cur ((volatile uint8_t*) duart_base+12)
+
#define duart_ctur ((volatile uint8_t*) duart_base+12)
+
#define duart_clr ((volatile uint8_t*) duart_base+14)
+
#define duart_ctlr ((volatile uint8_t*) duart_base+14)
+
#define duart_mr1b ((volatile uint8_t*) duart_base+16)
+
#define duart_mr2b ((volatile uint8_t*) duart_base+16)
+
#define duart_srb ((volatile uint8_t*) duart_base+18)
+
#define duart_csrb ((volatile uint8_t*) duart_base+18)
+
#define duart_crb ((volatile uint8_t*) duart_base+20)
+
#define duart_rbb ((volatile uint8_t*) duart_base+22)
+
#define duart_tbb ((volatile uint8_t*) duart_base+22)
+
#define duart_ivr ((volatile uint8_t*) duart_base+24)
+
#define duart_opcr ((volatile uint8_t*) duart_base+26)
+
#define duart_start_counter ((volatile uint8_t*) duart_base+28)
+
#define duart_opr_set ((volatile uint8_t*) duart_base+28)
+
#define duart_stop_counter ((volatile uint8_t*) duart_base+30)
+
#define duart_opr_reset ((volatile uint8_t*) duart_base+30)
+
+
/* Status Register A and B */
+
#define SR_RXRDY 0x01
+
#define SR_RX_READY 0x01
+
#define SR_TXRDY 0x04
+
#define SR_TX_READY 0x04
+
#define SR_TX_EMPTY 0x08
+
+
/* Command Register A and B */
+
#define CR_NOP 0x00
+
#define CR_RESET_MR_PTR 0x10
+
#define CR_RESET_RX 0x20
+
#define CR_RESET_TX 0x30
+
#define CR_RESET_ERROR 0x40
+
#define CR_RESET_BREAK 0x50
+
#define CR_START_BREAK 0x60
+
#define CR_STOP_BREAK 0x70
+
#define CR_SET_EXT_RX 0x80
+
#define CR_CLEAR_EXT_RX 0x90
+
#define CR_SET_EXT_TX 0xa0
+
#define CR_CLEAR_EXT_TX 0xb0
+
#define CR_STANDBY_MODE 0xc0
+
#define CR_ACTIVE_MODE 0xd0
+
+
#define CR_ENABLE_TX 0x04
+
#define CR_DISABLE_TX 0x08
+
#define CR_ENABLE_RX 0x01
+
#define CR_DISABLE_RX 0x02
+
+
/* Interrupt Status Register */
+
#define GLOBAL_ISR_TXRDY_A 0x01
+
#define GLOBAL_ISR_RXRDY_A 0x02
+
#define GLOBAL_ISR_TXRDY_B 0x10
+
#define GLOBAL_ISR_RXRDY_B 0x20
+
+
#define ISR_TX_READY 0x01
+
#define ISR_RX_READY 0x02
```
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9