Skip to content

Commit 3eb6513

Browse files
committed
wip uart8250
1 parent fe421b7 commit 3eb6513

File tree

1 file changed

+63
-6
lines changed

1 file changed

+63
-6
lines changed

src/périphériques/communication-serie/UART8250.md

+63-6
Original file line numberDiff line numberDiff line change
@@ -24,21 +24,78 @@
2424

2525
### Transmit Holding Register (THR)
2626

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

2929
### Receive Buffer Register (RBR)
3030

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

33+
### Interrupt Enable Register (IER)
3234

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

35-
| 7-4 | 3 | 2 | 1 | 0 |
36-
|----------|--------------|----------------------|-----------|-------------------------|
37-
| reserved | MODEM Status | Receiver Line Status | THR Empty | Received Data Available |
39+
- **__Received Data Available__**: Si le bit est à 1 alors une interruption sera généré à la réception d'un charactère.
40+
- **__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**
3841

39-
## Interrupt Identification Register (IIR)
42+
### Interrupt Identification Register (IIR)
4043

44+
### Line Control Register (LCR)
4145

46+
### Modem Control Register (MCR)
47+
48+
### Line Status Register (LSR)
49+
50+
### Modem Status Register (MSR)
51+
52+
### Scratch Register (SCR)
53+
54+
### Divisor Latch LSB (DLL) & Divisor Latch MSB (DLH)
55+
56+
| Baud Rate | 1.8432Mhz | 3.072 MHz | 8.0 MHz |
57+
|-----------|-----------|-----------|---------|
58+
| 50 | 2304 | 3840 | 10000 |
59+
| 75 | 1536 | 2560 | 6667 |
60+
| 110 | 1047 | 1745 | 4545 |
61+
| 134.5 | 857 | 1428 | 3717 |
62+
| 150 | 768 | 1280 | 3333 |
63+
| 300 | 384 | 640 | 1667 |
64+
| 600 | 192 | 320 | 833 |
65+
| 1200 | 96 | 160 | 417 |
66+
| 1800 | 64 | 107 | 277 |
67+
| 2000 | 58 | 96 | 250 |
68+
| 2400 | 48 | 80 | 208 |
69+
| 3600 | 32 | 53 | 139 |
70+
| 4800 | 24 | 40 | 104 |
71+
| 7200 | 16 | 27 | 69 |
72+
| 9600 | 12 | 20 | 52 |
73+
| 19200 | 6 | 10 | 26 |
74+
| 38400 | 3 | 5 | 13 |
75+
| 56000 | 2 | - | 9 |
76+
| 128000 | - | - | 4 |
77+
78+
Pour l'IBM PC la clock est de 1.8432Mhz
79+
80+
## Exemple (en pseudo C)
81+
82+
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.
83+
84+
### Initialisation de l'UART
85+
86+
```c
87+
/* on desactive les interuptions en metant IER à zero */
88+
uart8250_write(IER, 0x0);
89+
90+
/* DLAB à 1 */
91+
uart8250_write(LCR, (1 << 7));
92+
93+
/* 9600 baud donc un diviseur de 12 (voir le tableau) */
94+
uart8250_write(DLH, 0x0);
95+
uart8250_write(DLL, 0xC);
96+
97+
/* TODO */
98+
```
4299
43100
## Références
44101

0 commit comments

Comments
 (0)