Hello, Guest!
 
 

🔍
REVIEW

Description

Radar
Radar (1851 pt) 2026-Jan-29 14:33

Duart (Dual Asynchronous Receiver/Transmitter) 

Definizione

Un DUART (dual asynchronous receiver/transmitter) è un circuito integrato che integra due canali UART indipendenti, ciascuno full-duplex, per gestire comunicazioni seriali asincrone (stile RS-232/TTL) con minore carico per la CPU rispetto a soluzioni discrete. Un DUART  combina, nello stesso chip, due ricevitori/trasmettitori programmabili, una sezione di clocking (oscillatore + selezione clock), un baud rate generator, un counter/timer programmabile e logiche di interrupt e I/O ausiliari.

Cosa offre rispetto a una singola UART

Un dispositivo DUART è pensato per sistemi che devono gestire due linee seriali in modo robusto e flessibile, con queste caratteristiche tipiche:

  • Due canali indipendenti (canale A e canale B), con formato dati programmabile (bit dati, parità, stop) e velocità impostabili in modo separato per Tx e Rx.

  • Buffering del ricevitore: il ricevitore è quadruple-buffered per ridurre il rischio di overrun e abbassare l’overhead di interrupt/polling.

  • Gestione velocità: selezione di baud rate da un set di valori fissi (fino a 115.2 kbaud nelle specifiche della famiglia) oppure tramite clock derivati da timer/counter o ingressi esterni.

  • Contatore/timer programmabile a 16 bit: utile come base tempi, generatore di velocità non standard o generatore di onda quadra (a seconda della configurazione).

  • Porte ausiliarie: tipicamente una porta di input multiuso (es. 7 bit) e una porta di output multiuso (es. 8 bit) impiegabili come GPIO o come segnali “special function” (interrupt output, handshake, clock, status).

  • Flow control: possibilità di controllo di flusso per ridurre la perdita di dati quando i buffer del ricevitore sono pieni (tipicamente tramite linee stile RTS/CTS o funzioni equivalenti programmabili).

Modello di programmazione (registri e flusso driver)

La programmazione è in stile “registri per canale”, con blocchi tipici:

  • Mode registers (es. MR1/MR2): definiscono formato (5–8 bit, parità, stop, modalità speciali).

  • Clock select (CSR): seleziona la sorgente di clock/baud per Tx e Rx del canale.

  • Command register (CR): abilita/disabilita Tx/Rx, resetta errori, controlla break e funzioni operative.

  • Status register (SR): segnala Tx ready, Rx ready, errori (parità, framing, overrun) e condizioni buffer (es. “fifo full”).

  • THR/RHR: registro di trasmissione (holding) e registro di ricezione (holding), attraverso cui la CPU scrive i byte da inviare e legge i byte ricevuti.

Operativamente, un driver tipico: configura canale A e B, imposta baud e formato, abilita interrupt di ricezione, poi gestisce I/O con interrupt (o polling) leggendo RHR quando RxRDY è attivo e scrivendo THR quando TxRDY è attivo.

Clocking, baud rate e timer/counter

Un DUART di questa classe può lavorare con un cristallo o clock esterno, usando un baud rate generator interno e un counter/timer per generare velocità standard o non standard. La separazione tra sorgente clock e selettori per canale permette casi “dual-speed”, dove i due canali (o Tx/Rx dello stesso canale) operano a velocità diverse.

Schizzo dei collegamenti più importanti 

┌───────────────────────────┐ │ CPU / MCU │ │ D[7..0] A[ ] /RD /WR │ │ /CS /IRQ (bus I/O) │ └──────────────┬────────────┘ │ ▼ ┌──────────────────┐ │ DUART SCN2681 │ │ Ch.A: RxA/TxA │───►/◄── Line driver (TTL↔RS-232) ─► seriale A │ Ch.B: RxB/TxB │───►/◄── Line driver (TTL↔RS-232) ─► seriale B │ Baud gen + C/T │ │ IP[ ] / OP[ ] │───► GPIO / handshake / status └───────┬──────────┘ │ Xtal/clk in

Note pratiche: tra DUART e RS-232 “vera” serve quasi sempre un line driver/receiver (es. MAX232-class). In logica TTL/CMOS diretta (embedded) si può collegare Rx/Tx direttamente a livelli compatibili.