Escritos
B. Piropo
Anteriores:
< Trilha Zero >
Volte de onde veio
23/08/1993

< Interrupções III: As Portas >


Se você reduzir as coisas à expressão mais simples, vai perceber que seu micro não passa de um núcleo central, a CPU, que se comunica com um conjunto de dispositivos. De alguns, como o teclado, ela somente recebe dados, e por isso são chamados de dispositivos de entrada. Para outros, como o vídeo, somente envia: são os dispositivos de saída. Finalmente há alguns, como o modem, para os quais tanto envia como recebe. O conjunto é conhecido como "dispositivos de entrada e saída". Você já se perguntou como as informações fluem entre eles e a CPU? Bem, cada caso é um caso. Mas, de uma forma genérica, a coisa pode ser entendida como um sistema tipo caixa postal e campainha: quando o dispositivo quer enviar um dado, coloca-o em uma caixa postal e toca uma campainha para avisar que o dado está lá. A CPU pára o que está fazendo, investiga a caixa postal, pega o dado e segue em frente.

Quer uma explicação mais técnica? Então vamos lá: a "caixa postal" é um trecho de memória designado especificamente para um dispositivo e reconhecido pelo endereço base, o endereço do byte inicial (endereço de entrada/saída ou "I/O adress"). Por exemplo: a partir do endereço 760 (2F8 em hexadecimal) há oito bytes disponíveis para isso. Se seu modem está conectado à segunda "porta serial" ou COM2 (calma que já explico), os dados que ele pretende enviar à CPU são escritos nesse espaço. E a "campainha" é a interrupção. A COM2 em geral usa a IRQ3. Então, quando um modem conectado à COM2 recebe dados, os escreve no trecho de memória que começa no endereço 760 e aciona a IRQ3. O controlador de interrupções imediatamente avisa à CPU que a IRQ3 foi acionada, logo a "caixa postal" correspondente contém dados. A CPU "sabe" que a IRQ3 corresponde à COM2, e portanto ao endereço 760. E assim que puder interrompe seus afazeres, vai até lá e lê os dados. É simples assim. Para os dispositivos mais comuns o sistema separou quatro destes conjuntos de endereços base, que funcionam como canais de comunicação ou "portas" que permanecem à disposição de quaisquer dispositivos que as queira usar. Desde, é claro, que não tenha sido previamente "reservada" por outro dispositivo.

Há dois tipos de portas. Na primeira, os oito bits que formam um byte trafegam entre a CPU e o dispositivo um após o outro, em série, através de um único "fio". Na segunda, trafegam ao mesmo tempo em oito "fios" paralelos (na verdade a coisa é um pouco mais complicada mas, para os fins que nos interessam, essa simplificação basta). Por razões evidentes, as primeiras são chamadas de portas seriais e as últimas de portas paralelas. Como eu disse, qualquer dispositivo que suporte o tipo correspondente de entrada/saída de dados pode usar qualquer uma destas portas. Por exemplo: os drives externos usados nos computadores portáteis usam uma porta paralela e algumas impressoras usam uma porta serial. Mas isso é raro: na imensa maioria dos casos você encontrará predominantemente mouses e modems ocupando as portas seriais e impressoras ocupando as paralelas. As duas portas seriais foram batizadas de COM1 e COM2 (daí o exemplo do modem na COM2) enquanto as paralelas são conhecidas por LPT1 e LPT2, respectivamente.

Porque todo esse papo sobre portas? Bem, é que se um dispositivo está ocupando uma porta, forçosamente estará utilizando uma interrupção. E, tradicionalmente, cada porta usa a "sua" interrupção. Assim, tanto nos XT quanto nos AT, às portas seriais COM1 e COM2 correspondem as interrupções IRQ4 e IRQ3, respectivamente, e à porta paralela LPT1 corresponde IRQ7. Já para a segunda porta paralela LPT2, somente o AT "guardou" uma interrupção, a IRQ5. O XT não reservou nenhuma. Portanto, se pretende ligar duas impressoras a um mesmo XT com HD, não tente conectar a segunda à LPT2 e atribuir-lhe a IRQ5. O desastre é certo, já que, como vimos semana passada, o XT usa a IRQ5 para o disco rígido. Está começando a entender agora o que é o tal "conflito de interrupções"? (Em tempo: se você não sabe como atribuir uma interrupção a um dispositivo, tenha paciência. Trataremos disso na próxima semana).

Achou estranho aquele "tradicionalmente" lá de cima quando discutíamos a correspondência entre portas e interrupções? Mas acontece que, dependendo das placas controladoras, às vezes é possível atribuir, por exemplo, a IRQ3 à COM1 e a IRQ4 à COM2. Sugestão: nunca faça isso. Embora a coisa não tenha sido padronizada, há uma tradição tão arraigada ligando COM1 à IRQ4, COM2 à IRQ3, LPT1 à IRQ7 e LPT2 à IRQ5 que a maioria dos dispositivos e programas esperam encontrá-las assim. Mudar sem que isso seja absolutamente necessário é o caminho mais curto para o desastre.

Por fim: talvez você tenha estranhado as portas seriais COM3 e COM4 nem sequer terem sido mencionadas, já que há trechos de memória e endereços base destinados a elas. Assim é, de fato. Mas acontece que, para a maioria dos efeitos práticos, elas são de muito pouca valia. Ocorre que, em geral, COM3 e COM4 somente podem utilizar IRQ3 e IRQ4, as mesmas interrupções usadas por COM1 e COM2. E não adianta muito ter quatro portas seriais quando se dispõe apenas de duas interrupções para todas elas. Só não são inteiramente inúteis porque sempre é possível atribuir a mesma interrupção a duas portas seriais, desde que os dispositivos a elas conectados não sejam usados simultaneamente. Por exemplo: se você tem um mouse serial, um modem antigo e uma placa FAX igualmente antiga, pode conectar o mouse na COM1, o modem na COM2 e a placa FAX na COM4. Depois, basta atribuir a IRQ4 a COM1 e a IRQ3 tanto a COM2 quanto a COM4. Tudo funciona muito bem desde que você não use o modem e a placa FAX ao mesmo tempo, o que faz sentido se ambos estão ligados à mesma linha telefônica. Mas hoje, quando quase toda placa de comunicação conjuga as funções de mouse e FAX, não são muitas as utilidades de COM3 e COM4.

Hoje, paramos por aqui. Semana que vem vamos discutir como atribuir interrupções aos dispositivos.

B. Piropo