Home » Artigos arquivados » Interrupções no barramento PCI

Interrupções no barramento PCI

Autor: Laércio Vasconcelos
Data: 31/mai/2006

A princípio, qualquer placa PCI funciona ao ser conectada em qualquer slot PCI. As interrupções são compartilhadas, ao contrário do velho barramento ISA, no qual cada IRQ era usada por uma única interface. Apesar desse compartilhamento no barramento PCI, em alguns casos podem ocorrer problemas, tornando necessária uma troca de slot. Vamos entender como funcionam essas interrupções e o que fazer em caso de problemas.

Uso de interrupções no barramento PCI

Entre o público de usuários em geral, o pensamento a respeito do assunto varia entre:

a) O que é um slot PCI?
b) O que é uma IRQ?
c) Não sabia que existia essa história de “conflito de IRQ”
d) Duas placas não podem usar a mesma IRQ
e) Duas placas PCI podem compartilhar uma IRQ
f) Duas placas PCI podem compartilhar uma IRQ, mas em alguns casos isso não funciona, dependendo das placas envolvidas

Vamos então apresentar a teoria sobre o assunto.

IRQs compartilhadas

O barramento PCI utiliza 4 linhas de interrupção que podem ser redirecionadas para as interrupções convencionais do PC (IRQs). Um componente do chipset chamado Redirecionador de interrupções é encarregado de fazer este redirecionamento.

Figura 1 – Ligação do roteador de interrupções do barramento PCI.

A figura 1 mostra como funciona o roteador de interrupções. Chegam a ele 4 linhas de interrupção do barramento PCI: R0, R1, R2 e R3. Este roteador é programado para redirecionar essas 4 linhas para linhas de IRQ apropriadas. No exemplo da figura 1 essas interrupções estão redirecionadas para IRQ9, IRQ10, IRQ11 e IRQ12. Esta escolha de IRQs é feita de forma automática pelo BIOS, mas pode ser alterada através do CMOS Setup, na seção PCI Configuration. Nela podemos escolher entre as várias IRQs disponíveis para serem associadas às 4 linhas de interrupção que chegam do barramento PCI.

As interrupções no barramento PCI podem ser compartilhadas, ou seja, dois ou mais dispositivos podem usar a mesma interrupção. Caberá à rotina do sistema operacional que faz o atendimento a cada interrupção, determinar qual foi o dispositivo que a gerou.

Curiosa é a forma como as linhas de interrupção são ligadas aos slots PCI. Cada slot tem 4 pinos de interrupção: IRQA, IRQB, IRQC e IRQD. Entretanto a ligação com as entradas do roteador não é direta, e sim, alternada. A figura 2 mostra um método típico de ligação.

Figura 2 – Conexões de INTA, INTB, INTC e INTD em slots PCI.

A forma de conexão parece confusa, mas é na verdade bastante interessante e faz com que o uso das interrupções seja distribuído uniformemente entre as disponíveis. Sempre que uma placa PCI precisa utilizar uma única interrupção, deve ser obrigatoriamente a IRQA. Se uma placa precisar ter mais de uma interrupção pode utilizar as demais linhas, mas a a IRQA sempre deverá ser usada. Aparentemente isto faria com que a linha IRQA ficasse congestionada, mas não fica graças à forma como as linhas IRQA, IRQB, IRQC e IRQD são levadas até o roteador de interrupções. Note que no esquema da figura 2, a IRQA do slot 1 está ligada em R3, que por sua vez é direcionada para IRQ12. A IRQA do slot 2 está ligada em R2, que por sua vez é direcionada para IRQ11. A IRQA do slot 3 está ligada em R1, que por sua vez é direcionada para IRQ10, e finalmente a IRQA do slot 4 está ligada em R0, que por sua vez é direcionada para IRQ9. Se cada placa utilizar a IRQA ao mesmo tempo, serão geradas interrupções diferentes IRQ9, IRQ10, IRQ11 e IRQ12.

Quando existem mais de 4 slots PCI, o roteamento obrigatoriamente faz com que uma mesma entrada do roteador esteja ligada a duas linhas INTA, de dois slots PCI diferentes. Por exemplo, em uma placa com 6 slots PCI, as IRQs poderiam estar roteadas da seguinte forma:

R0: INTA/1, INTB/2, INTC/3, INTD/4, INTA/5, INTB/6
R1: INTB/1, INTC/2, INTD/3, INTA/4, INTB/5, INTC/6
R2: INTC/1, INTD/2, INTA/3, INTB/4, INTC/5, INTD/6
R3: INTD/1, INTA/2, INTB/3, INTC/4, INTD/5, INTA/6

Neste caso é comum dizer que “os slots 1 e 5 compartilham a mesma IRQ” e “os slots 2 e 6 compartilham a mesma IRQ”. Isso estaria correto se cada slot usar uma única IRQ, mas sabemos que quando mais de uma IRQ é usada, outras IRQs também serão compartilhadas.

Vimos que a distribuição das IRQs a serem usadas pelo roteador pode ser configurada pelo CMOS Setup, de forma manual, ou ser deixada a cargo do BIOS e do sistema operacional. Podemos checar através do Gerenciador de Dispositivos, quais linhas estão sendo usadas pelo roteador de interrupções. Clicando em Computador / Propriedades / IRQs, podemos ver a lista das IRQs em uso. Aquelas indicadas com “Portador de IRQs para redirecionamento de IRQs PCI” são as que estão em uso pelo roteador.

Nem todos os dispositivos ligados ao barramento PCI utilizam as linhas IRQA, IRQB, IRQC ou IRQD. Por exemplo, as interfaces IDE primária e secundária, apesar de serem dispositivos PCI, utilizam as interrupções IRQ15 e IRQ14, respectivamente, que não passam pelo roteador, sendo ligadas diretamente ao controlador de interrupções. Da mesma forma, as interfaces USB que também são dispositivos PCI podem estar diretamente ligadas a uma interrupção, ou então usarem uma das IRQs disponíveis para os slots PCI.

Conflitos de IRQ

No antigo barramento ISA, era proibido que duas interface usassem a mesma IRQ. Quando isso ocorria, devido a erro de instalação, tínhamos um “conflito de IRQ”. Por exemplo, um mouse PS2 usando a IRQ12 poderia parar de funcionar se uma placa de rede fosse configurada através de jumpers, também como IRQ12. É interessante acrescentar que no projeto original do IBM PC, estava previsto o compartilhamento de interrupções, mas este recurso era opcional e não foi implementado pelos fabricantes de placas.

O barramento PCI foi projetado para suportar o compartilhamento de interrupções. A regra geral é que constatamos, no próprio gerenciador de dispositivos do Windows, IRQs usadas por mais de uma interface, e sem que isso seja indicado como conflito. As interfaces envolvidas normalmente funcionam sem problemas.

Ainda assim, o compartilhamento de IRQs pode resultar em sobrecarga. Se duas placas geram um número muito grande de interrupções por segundo, e compartilham a mesma linha de interrupção, seu bom funcionamento pode ficar comprometido. Não é à toa que as IRQs nos slots PCI são entrelaçadas, visando distribuí-las de forma mais “democrática” entre as placas, evitando que alguma IRQ fique sobrecarregada. Se tivermos problemas de funcionamento em placas PCI, uma tentativa válida é trocar a placa de slot. Ao usar uma linha de interrupção menos ocupada, a placa poderá passar a funcionar corretamente.