Escritos
B. Piropo
Anteriores:
< Trilha Zero >
Volte de onde veio
06/07/1998

< Portas Seriais VI: Configurando as Portas >


Meu computador tem duas portas seriais. No máximo, quantas poderia ter?

Se afirmo que o micro tem duas portas seriais, todo o hardware necessário para constituir duas portas físicas (ambos os UARTs, circuitos auxiliares e conectores) existe e faz parte do micro. Porém a presença do hardware garante apenas a existência das portas físicas e isto não basta: é preciso ainda que ele esteja configurado para ocupar as portas lógicas correspondentes, ou seja, que seus endereços de memória possam ser acessados e usados para troca de dados.

E quantas portas lógicas existem? Bem, depende da máquina e do sistema operacional. Os micros modernos da linha PC e as novas versões do DOS e Windows reservam quatro conjuntos de nomes e endereços para portas seriais. Os nomes são, respectivamente, COM1, COM2, COM3 e COM4. Os conjuntos de endereços (de oito posições sucessivas cada) são identificados pelo endereço base, ou endereço da primeira posição. No sistema hexadecimal (de base 16) usado normalmente para exprimir endereços de memória, o endereço base da primeira porta serial, COM1, é 3F8(hex), o de COM2 é 2F8(hex), o de COM3 é 3E8(hex) e, finalmente, o de COM4 é 2E8(hex). Estas são as portas seriais (lógicas) possíveis. Para que todas possam funcionar é necessário não somente que o hardware correspondente esteja presente como também que esteja ajustado (ou "configurado") para ocupar aqueles quatro conjuntos de endereços.

Agora já podemos responder à pergunta lá de cima: meu micro pode ter no máximo quatro porta seriais. Como tem duas, posso adicionar no máximo mais duas. Mas para isto preciso não somente acrescentar o hardware necessário (duas portas físicas adicionais), como também configurá-lo para ocupar as duas portas lógicas (os endereços de memória) remanescentes.

Examinemos isto melhor. Como sabemos, cada porta serial (física) tem um UART e cada UART tem oito registradores. Um registrador nada mais é que uma posição de memória. E os registradores do UART podem ocupar qualquer endereço que lhes seja atribuído. Então eu posso ajustar a porta serial física (seja através de jumpers, no caso de portas fornecidas em placas controladoras, seja através do setup do micro, no caso de portas incorporadas às placas-mãe) de tal forma que os registradores de seu UART ocupem os endereços de memória que eu desejar. Na verdade, quando eu entro no setup de meu micro e configuro uma de minhas portas seriais para funcionar como, digamos, COM2, é justamente isto o que estou fazendo. Mais exatamente: estou atribuindo o endereço 2F8(hex), o endereço base de COM2, ao primeiro registrador de seu UART, justamente aquele usado para armazenar temporariamente os bytes transferidos (naturalmente os demais registradores do UART ocupam os endereços imediatamente subsequentes ao endereço base; é por isto que para cada porta serial lógica são reservadas oito posições sucessivas de memória). É assim que se configura uma porta física para ocupar uma porta lógica

A outra porta (física) de minha máquina está configurada para ocupar o endereço correspondente a COM1. Eu poderia ainda instalar uma placa controladora adicional com mais duas portas (físicas) seriais e ajustá-las (talvez por meio de jumpers na placa) para ocupar os endereços base de COM3 e COM4. Depois disto, não adiantaria instalar mais nenhuma porta física: se eu o fizesse, não poderia habilitá-la (ou seja, não poderia atribuir-lhe nenhum endereço de memória) por falta de endereço base disponível, já que por padrão o número de portas seriais lógicas está limitado a quatro (tá bem, eu sei, há exceções: algumas máquinas usadas em provedores Internet e BBS excedem em muito este limite; mas aqui falamos apenas das máquinas dos mortais comuns, como eu e você, que não dispõem de hardware especial e suporte para tais façanhas).

Note que se eu instalasse todas as quatro portas seriais, provavelmente iria encarar um problema quando fosse atribuir-lhes as respectivas interrupções. Porque, infelizmente, o número de interrupções disponíveis nos micros da linha AT é absurdamente limitado (apenas 16 e a maioria delas já tem "dono"), muito menor que o número de portas disponíveis. Tanto assim que tradicionalmente apenas duas interrupções são destinadas às quatro portas seriais: IRQ4, normalmente usada por COM1 ou COM3, e IRQ3, usualmente atribuída a COM2 ou COM4.

É claro que isto poderia gerar conflitos. Mas é claro que, se eu o fizesse, o faria de forma suficientemente judiciosa para evitá-los. Por exemplo: instalaria um modem em COM2 e um escaner em COM4, atribuiria a ambas a mesma IRQ3 e programaria meu trabalho de modo a jamais usar modem e escaner ao mesmo tempo. O que garantiria um funcionamento harmônico de dois dispositivos diferentes em duas portas distintas compartilhando a mesma interrupção.

Pronto, sabemos tudo sobre portas seriais. Semana que vem, prometo, encerramos a série com a solução do mistério relatado lá na primeira coluna. Ainda lembram?

B. Piropo