Discussion:
Que hace esta funcion?
(demasiado antiguo para responder)
Olaf "El Blanco"
2006-01-13 11:55:16 UTC
Permalink
void confrs(unsigned long Velocidad, int Paridad, int LongPalabra, int
BitsStop){
unsigned long Divisor, BAL, BAH, LCR, IER;
outportb(base+1, 0); Divisor=115200 / Velocidad ;
BAL = Divisor % 256;
BAH = Divisor / 256;
LongPalabra = (LongPalabra-5) & 3;
BitsStop = ((BitsStop-1) & 1)*4;
Paridad = (Paridad & 3)*8;
LCR = Paridad+BitsStop+LongPalabra;
IER = 3;outportb(base+3, 128);
outportb(base+0, BAL);
outportb(base+1, BAH);
outportb(base+3, (LCR & 0x7f));
outportb(base+4, 0xb);
outportb(base+1, IER);
}
Zara
2006-01-13 13:59:27 UTC
Permalink
On Fri, 13 Jan 2006 12:55:16 +0100, "Olaf \"El Blanco\""
Post by Olaf "El Blanco"
void confrs(unsigned long Velocidad, int Paridad, int LongPalabra, int
BitsStop){
unsigned long Divisor, BAL, BAH, LCR, IER;
outportb(base+1, 0); Divisor=115200 / Velocidad ;
BAL = Divisor % 256;
BAH = Divisor / 256;
LongPalabra = (LongPalabra-5) & 3;
BitsStop = ((BitsStop-1) & 1)*4;
Paridad = (Paridad & 3)*8;
LCR = Paridad+BitsStop+LongPalabra;
IER = 3;outportb(base+3, 128);
outportb(base+0, BAL);
outportb(base+1, BAH);
outportb(base+3, (LCR & 0x7f));
outportb(base+4, 0xb);
outportb(base+1, IER);
}
Programa los parametros básicos de un puerto serie del tipo 16550.
(Echa una ojeada, por ejemplo, a Google buscando "16550) para enteder
todo lo demás).

Por cierto, las UART 16550 son el modelo del que derivan todas las que
se han usado en los PC's desd los heroicos tiempo del IBM-PC a 1 MHz.
Esta afrimación es inexacta, relamente todas derivan de un modelo
anterior, del cual también deriva la 16550, pero cuyo mapa de
regsitros se programaba exactamente como describe la rutina.


Saludos,
Zara
Antoine Leca
2006-01-13 15:37:28 UTC
Permalink
Post by Zara
Programa los parametros básicos de un puerto serie del tipo 16550.
Por cierto, las UART 16550 son el modelo del que derivan todas las que
se han usado en los PC's desd los heroicos tiempo del IBM-PC a 1 MHz.
Mmmm...
Post by Zara
Esta afrimación es inexacta, relamente todas derivan de un modelo
anterior,
8250 (Intel) para el PC y XT, 16450 (mismo en bus de 16 bits) para AT.
Post by Zara
del cual también deriva la 16550, pero cuyo mapa de regsitros se
programaba exactamente como describe la rutina.
La lógica es la misma. Pero si intentes programar un 8250 (o un 16450) a 115
bps, en el típico ordenador que lo conlleva, el enlace va resultar muy
dificil de uso... ;-)

La ventaja del 16550 es que permite tener 16 bits en espera (buffer FIFO),
cuando el antiguo 8250 solo permita 1.
El 16550 alcanza gran popularidad en el inicio de los 90 (mejoraba el uso de
los modems), y por aquel entonces no era en todos los ordenadores (un
ordenador típico _sin_ 16550 podría ser un 80286 a 12 Mhz).


Antoine
Zara
2006-01-13 16:14:22 UTC
Permalink
On Fri, 13 Jan 2006 16:37:28 +0100, "Antoine Leca"
Post by Antoine Leca
Post by Zara
Programa los parametros básicos de un puerto serie del tipo 16550.
Por cierto, las UART 16550 son el modelo del que derivan todas las que
se han usado en los PC's desd los heroicos tiempo del IBM-PC a 1 MHz.
Mmmm...
Post by Zara
Esta afrimación es inexacta, relamente todas derivan de un modelo
anterior,
8250 (Intel) para el PC y XT, 16450 (mismo en bus de 16 bits) para AT.
Gracias por recordármelo, he sido incapaz de acordarme, y eso que en
tiempos incluso las he utilizado en diseños reales (con un 8085...
¡tela!)
Post by Antoine Leca
Post by Zara
del cual también deriva la 16550, pero cuyo mapa de regsitros se
programaba exactamente como describe la rutina.
La lógica es la misma. Pero si intentes programar un 8250 (o un 16450) a 115
bps, en el típico ordenador que lo conlleva, el enlace va resultar muy
dificil de uso... ;-)
De acuerdo, la verdad es que ni me fijé en la velocidad
Post by Antoine Leca
La ventaja del 16550 es que permite tener 16 bits en espera (buffer FIFO),
cuando el antiguo 8250 solo permita 1.
Buebo, puesto a corregir, no son bits sino bytes los que están en
espera...
Post by Antoine Leca
El 16550 alcanza gran popularidad en el inicio de los 90 (mejoraba el uso de
los modems), y por aquel entonces no era en todos los ordenadores (un
ordenador típico _sin_ 16550 podría ser un 80286 a 12 Mhz).
Antoine
Saludos, y gracias por este pequeño recuerdo de nuestra prehistoria
;-)

Zara
Olaf "El Blanco"
2006-01-21 13:48:57 UTC
Permalink
Post by Antoine Leca
La lógica es la misma. Pero si intentes programar un 8250 (o un 16450) a 115
bps, en el típico ordenador que lo conlleva, el enlace va resultar muy
dificil de uso... ;-)
No logro entender esto último. A 115 bits por segundo? Porque no?
Antoine Leca
2006-01-24 15:44:09 UTC
Permalink
Post by Olaf "El Blanco"
Post by Antoine Leca
La lógica es la misma. Pero si intentes programar un 8250 (o un
16450) a 115 bps, en el típico ordenador que lo conlleva, el enlace
va resultar muy dificil de uso... ;-)
No logro entender esto último. A 115 bits por segundo? Porque no?
Ha saltado un carácter. Querría decir 115 kbps.

Con un típico 8250/16450, que no tenía búfer, la unidad central era siempre
pendiente del chip de comunicación para coger el próximo carácter;
programado "normalemente" (es decir, con interrupciones), había que guardar
todo el contexto, coger el siguiente carácter, y restaurar el contexto; y
volver para el siguiente. A más de 9.600 bps un ***@4.77 MHz no podía
aguantar.

Con otro modo de programación (sin interrupción, cogiendo carácter a
intervalo de más o menos 80 ms) podías subir hasta 115.000, pero eso suponía
no hacer cualquier otra cosa que contar para esperar al próximo.
Y no es "programar el 8250", sino más bién usarlo como esclavo.


Antoine

Pedro Maicas
2006-01-13 18:01:41 UTC
Permalink
Post by Zara
se han usado en los PC's desd los heroicos tiempo del IBM-PC a 1 MHz.
El primero no era un 8088 a 4.77 mhz ?

Hasta que salieron los turbo, a 8 mhz que dejaron jodidos
todos los programas temporizados por softwate ;-)


Saludos :-) -Pedro-

http://www.maicas.net/

e-mail en www.maicas.net
Pedro Maicas
2006-01-13 18:23:44 UTC
Permalink
Post by Olaf "El Blanco"
void confrs(unsigned long Velocidad, int Paridad, int LongPalabra, int
BitsStop){
unsigned long Divisor, BAL, BAH, LCR, IER;
outportb(base+1, 0); Divisor=115200 / Velocidad ;
BAL = Divisor % 256;
BAH = Divisor / 256;
LongPalabra = (LongPalabra-5) & 3;
BitsStop = ((BitsStop-1) & 1)*4;
Paridad = (Paridad & 3)*8;
LCR = Paridad+BitsStop+LongPalabra;
IER = 3;outportb(base+3, 128);
outportb(base+0, BAL);
outportb(base+1, BAH);
outportb(base+3, (LCR & 0x7f));
outportb(base+4, 0xb);
outportb(base+1, IER);
}
A eso me refería en el otro thread, esto es el puerto
serie, la uart del pc.

Es lo hacíamos hace muuuuuuuuchos años (y por lo visto
por aqui somos varios) en msdos, por ejemplo. Hoy en día
no se hace ni en windows ni el linux, primero porque
no se puede (salta una excepcion) y segundo porque el sistema
operativo provee toda la funcionalidad completa del puerto
serie (ya desde windows 16 bits, antes del 95).

Para el puerto paralelo a veces si que se trastea todavía con
el hardware, si por ejemplo quieres encender unos leds o le tienes
conectada alguna cosa rara.

====> perdon si recibes un email, se me ha escapado.


Saludos :-) -Pedro-

http://www.maicas.net/

e-mail en www.maicas.net
Loading...