Skip to content

Commit

Permalink
wip uart8250
Browse files Browse the repository at this point in the history
  • Loading branch information
d0p1s4m4 committed Feb 15, 2023
1 parent fe421b7 commit 3eb6513
Showing 1 changed file with 63 additions and 6 deletions.
69 changes: 63 additions & 6 deletions src/périphériques/communication-serie/UART8250.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,21 +24,78 @@

### Transmit Holding Register (THR)

Tout ce qui sera ecrit sur ce registre sera transmis en liaison série.
Tout ce qui sera ecrit sur ce registre sera transmis par l'UART.

### Receive Buffer Register (RBR)

Tout ce qui est reçu par l'UART sur la laison série sera accessible sur ce registre.

### Interrupt Enable Register (IER)

## Interrupt Enable Register (IER)
| 7-4 | 3 | 2 | 1 | 0 |
|---------|--------------|----------------------|-----------|-------------------------|
| reservé | MODEM Status | Receiver Line Status | THR Empty | Received Data Available |

| 7-4 | 3 | 2 | 1 | 0 |
|----------|--------------|----------------------|-----------|-------------------------|
| reserved | MODEM Status | Receiver Line Status | THR Empty | Received Data Available |
- **__Received Data Available__**: Si le bit est à 1 alors une interruption sera généré à la réception d'un charactère.
- **__THR Empty__**: si le bit est à 1 alors une interruption sera généré quand il sera possible d'écrire à nouveau dans le registre **THR**

## Interrupt Identification Register (IIR)
### Interrupt Identification Register (IIR)

### Line Control Register (LCR)

### Modem Control Register (MCR)

### Line Status Register (LSR)

### Modem Status Register (MSR)

### Scratch Register (SCR)

### Divisor Latch LSB (DLL) & Divisor Latch MSB (DLH)

| Baud Rate | 1.8432Mhz | 3.072 MHz | 8.0 MHz |
|-----------|-----------|-----------|---------|
| 50 | 2304 | 3840 | 10000 |
| 75 | 1536 | 2560 | 6667 |
| 110 | 1047 | 1745 | 4545 |
| 134.5 | 857 | 1428 | 3717 |
| 150 | 768 | 1280 | 3333 |
| 300 | 384 | 640 | 1667 |
| 600 | 192 | 320 | 833 |
| 1200 | 96 | 160 | 417 |
| 1800 | 64 | 107 | 277 |
| 2000 | 58 | 96 | 250 |
| 2400 | 48 | 80 | 208 |
| 3600 | 32 | 53 | 139 |
| 4800 | 24 | 40 | 104 |
| 7200 | 16 | 27 | 69 |
| 9600 | 12 | 20 | 52 |
| 19200 | 6 | 10 | 26 |
| 38400 | 3 | 5 | 13 |
| 56000 | 2 | - | 9 |
| 128000 | - | - | 4 |

Pour l'IBM PC la clock est de 1.8432Mhz

## Exemple (en pseudo C)

Partons du principe que nous avont `uart8250_write` permetant d'ecrire une valeur dans un registre et `uart8250_read` permetant de lire la valeur d'un registre.

### Initialisation de l'UART

```c
/* on desactive les interuptions en metant IER à zero */
uart8250_write(IER, 0x0);

/* DLAB à 1 */
uart8250_write(LCR, (1 << 7));

/* 9600 baud donc un diviseur de 12 (voir le tableau) */
uart8250_write(DLH, 0x0);
uart8250_write(DLL, 0xC);

/* TODO */
```
## Références
Expand Down

0 comments on commit 3eb6513

Please sign in to comment.