[pso] [tema 2, general] portul serial

Irina Tirdea ynuka13 at gmail.com
Mon Apr 21 01:21:12 EEST 2008


> http://www.beyondlogic.org/serial/buff1024.c (linkul din enuntul temei)
> outportb(PORT1 + 3 , 0x80);  /* SET DLAB ON */
> ///////////////////////////////////////////////////////////////////BUBA
>  outportb(PORT1 + 0 , 0x0C);  /* Set Baud rate - Divisor Latch Low Byte */
>			      /* Default 0x03 =  38,400 BPS */
>			      /*         0x01 = 115,200 BPS */
>			      /*         0x02 =  57,600 BPS */
>			      /*         0x06 =  19,200 BPS */
>			      /*         0x0C =   9,600 BPS */
>			      /*         0x18 =   4,800 BPS */
>			      /*         0x30 =   2,400 BPS */
>  outportb(PORT1 + 1 , 0x00);  /* Set Baud rate - Divisor Latch High Byte
*/
>  outportb(PORT1 + 3 , 0x03);  /* 8 Bits, No Parity, 1 Stop Bit */
> ///////////////////////////////////////////////////////////////////BUBA
>  outportb(PORT1 + 2 , 0xC7);  /* FIFO Control Register */
>  outportb(PORT1 + 4 , 0x0B);  /* Turn on DTR, RTS, and OUT2 */

> pe un procesor la 2 GHz, de ce liniile marcate cu BUBA functioneaza?

UART-ul poate accesa 12 registri, desi are numai 8 porturi [1]. Asta este
posibil partial datorita unui bit din LCR, DLAB (Divisor Latch Access Bit).
Atunci cand DLAB este setat pe 1 (prima linie marcata cu BUBA), se pot
accesa doi registri suplimentari (la PORT1+0, PORT1+1), prin care se seteaza
viteza comunicatiei (baud rate). Atunci cand DLAB este setat pe 0 (a doua
linie marcata cu buba), la PORT1+0 o sa fie portul de date, iar la PORT1+1
IER. 

In a doua linie marcata cu buba in secventa de cod de mai sus, se seteaza si
parametrii comunicatiei in LCR pe langa resetarea bitului DLAB.

> sa inteleg ca fiecare port din cele 8 are cate un mini-buffer asociat?

Nu, in afara de buffer-ele legate de transmisia/receptia de date.

> corect n-ar fi sa fac outb pe procesorul meu de $300, dupa care sa
> astept intreruperea de la uartul de c5 inainte de a incerca sa scriu
> din nou la LCR? (+3)
>
> cel mai corect n-ar fi:
> 1. enable comx
> 2. in interupere, setat primul parametru (outb)
> 3. in interuperea generata candva dupa, setat al 2lea prametru


Nu prea am inteles ce vrei sa spui aici. Setarea parametrilor de comunicatie
in LCR nu se face la primirea unei intreruperi. 

Irina

[1] http://www.beyondlogic.org/serial/serial.htm#13




More information about the pso mailing list