Roteiro exp9

5
Laboratório de Arquitetura de Processadores Digitais 01/2016 Experimento 9. Comunicação Serial no PC com Interrupção OBJETIVO: Implementar um programa de chat que funcione via porta serial entre dois PCs, em ambiente MS-DOS. Os caracteres inseridos no PC1 devem ser transmitidos ao PC2, o qual deve mostrar os caracteres na tela. Ao mesmo tempo, caracteres inseridos no PC2 devem ser transmitidos ao PC1 e mostrados na tela deste. O programa deve ser implementado utilizando a interrupção da porta serial. DESCRIÇÃO: O controle da interrupção no PC é feito através do controlador 8259. Assim como o controlador 8250, o controlador 8259 também pode ser acessado diretamente através das funções outportb() e inportb(). Na verdade, para possibilitar um maior número de interrupções, o PC utiliza dois controladores 8259. Os registradores mais importantes desses controladores são: Primeiro 8259 Segundo 8259 Registrador Acesso a qualquer instante 20H A0H ICW1 sim 21H A1H ICW2 não 21H A1H ICW3 não 21H A1H ICW4 não 21H A1H OCW1 sim 20H A0H OCW2 sim 20H A0H OCW3 sim Dentre esses registradores, os mais importantes no momento são o OCW1 (operation command word palavra de controle da operação) e OCW2. Os bits do registrador OCW1 são utilizados para ativar ou desativar as interrupções e, juntos, são chamados de máscara da interrupção. O bit de máscara desabilita (bit = 1) ou habilita (bit = 0) a interrupção. A descrição dos bits desse registrador encontram-se na Figura 1. Deve-se tomar cuidado quando se utiliza esse registrador, para que não sejam alterados os estados dos outros bits (que cuidam de outras interrupções) e para que seu valor seja retornado ao fim do seu programa.

Transcript of Roteiro exp9

Page 1: Roteiro exp9

Laboratório de Arquitetura de Processadores Digitais 01/2016

Experimento 9. Comunicação Serial no PC com Interrupção

OBJETIVO:

Implementar um programa de chat que funcione via porta serial entre dois PCs, em ambiente MS-DOS. Os caracteres inseridos no PC1 devem ser transmitidos ao PC2, o qual deve mostrar os caracteres na tela. Ao mesmo tempo, caracteres inseridos no PC2 devem ser transmitidos ao PC1 e mostrados na tela deste. O programa deve ser implementado utilizando a interrupção da porta serial.

DESCRIÇÃO:

O controle da interrupção no PC é feito através do controlador 8259. Assim como o controlador 8250, o controlador 8259 também pode ser acessado diretamente através das funções outportb() e inportb(). Na verdade, para possibilitar um maior número de interrupções, o PC utiliza dois controladores 8259. Os registradores mais importantes desses controladores são:

Primeiro 8259 Segundo 8259 Registrador Acesso a qualquer instante

20H A0H ICW1 sim

21H A1H ICW2 não

21H A1H ICW3 não

21H A1H ICW4 não

21H A1H OCW1 sim

20H A0H OCW2 sim

20H A0H OCW3 sim

Dentre esses registradores, os mais importantes no momento são o OCW1 (operation command word – palavra de controle da operação) e OCW2.

Os bits do registrador OCW1 são utilizados para ativar ou desativar as interrupções e, juntos, são chamados de máscara da interrupção. O bit de máscara desabilita (bit = 1) ou habilita (bit = 0) a interrupção. A descrição dos bits desse registrador encontram-se na Figura 1. Deve-se tomar cuidado quando se utiliza esse registrador, para que não sejam alterados os estados dos outros bits (que cuidam de outras interrupções) e para que seu valor seja retornado ao fim do seu programa.

Page 2: Roteiro exp9

Laboratório de Arquitetura de Processadores Digitais 01/2016

M7

IRQ0

M4 M3 M2 M1 M0OCW1

D7 D6 D5 D4 D3 D2 D1 D0

M6 M5

IRQ1

IRQ2IRQ3

IRQ4

IRQ5IRQ6

IRQ7

1 - Interrupção não ocorre0 - Interrupção pode ocorrer

Figura 1: Descrição do registrador OCW1

Quando a interrupção é servida, no retorno da sua função, deve-se apagar o pedido da interrupção, para que a próxima interrupção possa ser servida. Isso é feito ativando o bit EOI do registrador OCW2 do controlador 8259.

R 0 0 L2 L1 L0OCW2

D7 D6 D5 D4 D3 D2 D1 D0

SL EOI

Prioridade das Interrupções

001 – Fim da Interrupção

Figura 2: Descrição do registrador OCW2

Outros registradores importante são os registradores MCR e IER, encontrado no controlador 8250.

COM2 COM1 Registrador Nome Bit DLAB/LCR

2F8H 3F8H TxB Buffer de Transmissão 0 (escrita)

2F8H 3F8H RxB Buffer de Recepção 0 (leitura)

2F8H 3F8H DLL Latch para divisor (LSB) 1

2F9H 3F9H DLM Latch para divisor (MSB) 1

2F9H 3F9H IER Habilitador de Interrupção 0

2FAH 3FAH IIR Identificador de Interrupção -

2FBH 3FBH LCR Controlador de Linhas -

2FCH 3FCH MCR Controlador de Modem -

2FDH 3FDH LSR Estado de Linhas -

2FEH 3FEH MSR Estado de Modem -

2FFH 3FFH SCR Uso Geral -

Page 3: Roteiro exp9

Laboratório de Arquitetura de Processadores Digitais 01/2016

A interface dos pinos do registrador MCR é:

0Controla a

voltagem da saída DTR

LOOP OUT2 OUT1 RTS DTRMCR

D7 D6 D5 D4 D3 D2 D1 D0

0 0

Controla a voltagem da

saída RTSControla a saída OUT1

do 8250

Controla a saída OUT2 do 8250No PC, permite (quando ativado) que o

pedido de interrupção do 8250 seja diretamente conectado à IRQ alocada a

porta serialControla o diagnóstico LOOP BACK

Figura 3: Descrição do registrador MCR

A interface dos pinos do registrador IER é:

0

Interrupção por Dado Disponível

0 - - - -IER

D7 D6 D5 D4 D3 D2 D1 D0

0 0

Interrupção por THR Vazio

Interrupção por Estado de Linha de Recepção

Interrupção por Alteração no Estado do Modem

Em todos os casos:

0 – Desabilitado1 – Habilitado

Figura 4: Descrição do registrador IER

Depois que os registradores foram configurados corretamente, quando a interrupção ocorrer, a função guardada no vetor de interrupção do PC será chamada. Este vetor de interrupções contém ponteiros para funções do tipo:

void interrupt nomedafunção();

Dessa forma, deve-se escrever uma nova função com essa assinatura e inserir essa nova função no vetor de interrupções. Deve-se tomar cuidado para guardar o conteúdo anterior do vetor e restaurá-lo ao finalizar seu programa, para que o funcionamento do computador não seja alterado. O número das interrupções de interesse são:

Número Descrição

0BH IRQ3 – COM2/COM4

0CH IRQ4 – COM1/COM3

Page 4: Roteiro exp9

Laboratório de Arquitetura de Processadores Digitais 01/2016

Para alterar o vetor de interrupções, devem ser utilizadas as funções setvect() e getvect(), encontradas no cabeçalho dos.h.

setvect (int i, void interrupt(*ponteiro)());

void interrupt(*ponteiro)() getvect (int i);

Finalmente, para que o seu programa possa verificar o teclado sem que o controle seja trancado, pode-se utilizar a função kbhit() no cabeçalho conio.h .

int kbhit();

Essa função retorna um inteiro não-nulo se existir um caractere no buffer do teclado, caso contrário, retorna 0. Se existir um caractere no buffer do teclado, este pode ser lido com a função getch().

As demais configurações da porta serial funcionam da forma mostrada no Roteiro 8.

DADOS:

As instruções inportb() e outportb() são específicas dos compiladores da Borland. Portanto, o código em C deve ser compilado utilizando o Turbo C. Pode ser necessário rodar o programa TurboC dentro do DOSBOX, dependendo da sua versão do Windows.

Utilize as funções kbhit() e getch() da biblioteca conio.h para receber caracteres do teclado.

A função getch() recebe caracteres em formato ASCII, que é o mesmo formato usado pela função printf(). Porém, o caractere ENTER transmite apenas o Carriage Return (0DH). No seu programa, faça com que o enter transmita tanto o Carriage Return (0DH) e o Line Feed (0AH).

Utilize o caractere ESC para fechar o programa (1BH). Lembre-se de apagar o pedido de interrupção no setup do programa e toda vez que

uma interrupção for servida!

SUGESTÕES:

Utilize a diretiva #define para colocar os endereços das portas.

RELATÓRIO

O relatório é individual, e deve ser entregue impresso seguido o formato do IEEE. Em hipótese alguma será admitida a entrega do relatório de forma eletrônica. O relatório deve conter pelo menos os seguintes itens:

1. Introdução: Breve descrição sobre os elementos utilizados. (1 ponto)

2. Especificação: Descrição do sistema implementado. (0,5 ponto)

3. Implementação e prototipação: Descrição do sistema e comentários sobre os códigos

elaborados. Obs: Deve-se obrigatoriamente incluir os códigos e comentar todas as

linhas do código neste experimento. (7,5 pontos)

Page 5: Roteiro exp9

Laboratório de Arquitetura de Processadores Digitais 01/2016

4. Conclusão. Conclua o relatório. (1 ponto)