5555
O estudo do funcionamento da porta série nos PC’s, é o estudo da UART utilizada para a implementar. Os endereços na memória de entrada/saída, são referidos na tabela 1, em que COM1, COM2, COM3 e COM4 correspondem respectivamente à porta série 1, 2, 3 e 4.
Nome Endereço IRQ COM1 3F8 4 COM2 2F8 3 COM3 3E8 4 COM4 2E8 3
Tabela 1- Endereços das portas série com1 a com4 num PC.
1. UART - Universal Asynchronous Receiver/Transmitter
As UART’s necessitam de uma relógio para trabalhar. Nesta caso o cristal utilizado é de 1.8432 MHz. O cristal é ligado directamente À UART nos pinos XIN e XOUT, usando poucos componentes adicionais de modo a ajudar o cristal a oscilar. Este relógio vai ser usado para gerar a taxa de transmissão em que a velocidade de transmissão é calculada por 1.8Mhz /(16 x velocidade de transmissão).
O estudo da porta série nos PC é basicamente o estudo da UART 16550 usada nos PC’s, é possível efectuar o download a partir de http://www.natsemi.com, disponível em formato PDF, ou de http://www.ti.com, que é a UART TL16C750 que tem uma FIFO de 64 bytes.
1.1 Tipos de UART’s utilizadas nos PC’s
Tipo descrição
8250 Primeira UART utilizada nos PC’s, não dispunha de registo de uso geral.
16450 Começou a ser utilizada nos AT’s, pode atingir a taxa de transmissão até 38.4KBps. Ainda é comum a existência de a UART.
16550 Primeira de uma geração de UART’s com buffer de memória. Tem um memória FIFO de 16 bytes
16650 Contem um buffer de 32 bytes. Permite a programação de controlo de fluxo XON/XOFF
programação de controlo de fluxo XON/XOFF
16750 Com memória FIFO de 64 bytes.
Tabela 2- Tipos de UART’s utilizadas nos PC’s.
Figura 1- Pinout da UART PC16550D da National Semiconductor
1.3 Função dos pinos TD – Transmit Data
Por onde são transmitidos os dados em série.
RD – Receive Data
Por onde são recebidos os dados em série.
/CTS- Clear To Send
Quando a zero indica que o modem ou o dispositivo de dados está pronto para trocar dados. A linha /CTS é um sinal de entrada, que indica o estado do modem, cujo valor pode ser testado, pela leitura do bit 4 do registo MSR. O bit zero do MSR indica se houve variação do /CTS, desde a ultima leitura deste registo.
/DCD- Data Carrier Detect
Quando a zero indica que a portadora foi detectada pelo modem. É uma entrada de estado do modem, cujo valor pode ser testado pela leitura do bit 7 do registo MSR. O bit 3 do MSR indica se houve variação na linha /DCD desde a ultima leitura deste registo.
/DSR- Data Set Ready
Quando a zero indica que o modem está pronto para estabelecer a comunicação. A linha /DSR é um linha de estado do modem, cujo valor pode ser testado em MSR no bit 5. O bit 1 do MSR indica se houve alguma variação na linha /DSR desde a ultima leitura deste registo.
/DTR- Data Terminal Ready
Quando a zero informa o modem que a UART está pronta para estabelecer a comunicação. O sinal /DTR pode ser activado a zero colocando um’1’ no bit zero do registo MCR.
/RTS- Request To Send
Quando a zero informa o modem que a UART está pronta para trocar dados, o sinal /RTS pode ser activo a zero, colocando um ‘1’ no bit 1 do MCR.
/RI- Ring Indicator
Quando a zero indica que o modem recebeu um sinal de corrente de chamar, esta linha pode ser testada pela leitura do bit 6 do registo MSR. O bit 6 é o complemento do sinal /RI. O bit 2 do MSR indica se houve variação na linha RI desde a ultima leitura.
2. PINOUT DA PORTA SÉRIE
DB 25 DB 9 Nome pino 2 pino 3 TD pino 3 pino 2 RD pino 4 pino 7 RTS pino 5 pino 8 CTS pino 6 pino 6 DSR pino 7 pino 5 GND pino 8 pino 1 CD pino 20 pino 4 DTR pino 22 pino 9 RI
Tabela 3- Pin-out da porta série, PC’s para fichas macho de 9 e 25 pinos.
2.1 Ligações em null-modem
Esta é ligação para ligação de dois dispositivos DTE. Requer apenas três linhas entre os dois dispositivos /TD, RD e GND). A transmissão é efectuada pela linha de TD e a recepção é efectuada pela linha de RD. O controle de fluxo é implementado directamente pois em ambos os lados se ligam entre si as linhas DTR, DSR e CD e as linhas RTS e CTS são as duas ligadas entre si.
TD ! RD
RD " TD
DTR- DSR- CD- -DTR -DSR -CD RTS- CTS- -RTS -CTS
Tabela 4- Esquema de ligação em null-modem
3. CONFIGURAÇÃO DOS REGISTOS
Tabela 5- Localização dos registos na UART
REGISTO IER ( Interrupt Enable Register: BASE+1)
Permite habilitar os cinco tipos de interrupção da UART. Cada interrupção pode ser individualmente habilitada. Pode-se inibir qualquer interrupção da UART colocando os bits 0 a 3 a nível lógico ‘0’.
Bit Função
7 Reservado
6 Reservado
5 Habilita o modo de baixo consumo 4 Habilita o modo de repouso 3 Habilita o Modem status interrupt 2 Habilita Receive line interrupt
1 Habilita interrupção associada à transmissão 0 Habilita interrupção associada à recepção de dados
REGISTO IIR ( Interrupt Identification Register: BASE+2)
Este é um registo só de leitura. De forma a minimizar o software e dedicação do CPU a UART possibilita a configura de quatro limiares para a identificação da interrupção.
Bit designação Função 6 : 7 Bit 6 Bit 7
0 0 Sem FIFO
0 1 FIFO habilitada mas não utilizada
1 1 FIFO habilitada
5 64 bytes FIFO habilitada, só em 16750
4 Reservado
3 0 Reservado
1 Na 16550 interrupção de time-out, pendente 1 : 2 Bit 2 Bit 1
0 0 Interrupção do estado do modem
0 1 Interrupção de registo de transmissaão vazio 1 0 Interrupção de dados recebidos disponiveis 1 1 Interrupção de estado da linha de recepção
0 0 Interrupção pendente
1 Nenhuma interrupção pendente
REGISTO FCR ( FIFO Control Register: BASE+2)
Este é um registo só de escrita, na mesma localização de IIR(este é só de leitura). É usado para habilitar as FIFO, limpar a FIFO, definir o limiar da FIFO e seleccionar sinalização DMA.
Bit designação Função
6 : 7 Bit 7 Bit 6 Interrupção por transição de nível lógico
0 0 1 byte
0 1 4 bytes
1 0 8 bytes
1 1 16 bytes
5 64 bytes FIFO habilitada, só em 16750
4 Reservado
3 Selecciona modo DMA. Toca o estado dos pinos RXRDY e TXRDY
2 Limpa a FIFO de transmissão 1 Limpa a FIFO de recepção 0 Habilita as FIFO
REGISTO LCR ( Line Control Register: BASE+3)
Onde se configura o formato da transmissão, também onde está localizado o bit DLAB.
Bit Designação Função
7 1 DLAB – Divisor Latch Enable Bit
0 Permite o acesso ao registo de
transmissão/recepção e ao registo de habilitação de interrupções (IER)
6 Habilita bloqueio da UART
3 : 5 Bit 5 Bit 4 Bit 3 Selecção da paridade
X X 0 Sem paridade
0 0 1 Paridade ímpar
0 1 1 Paridade par
1 0 1 Paridade alta
1 1 1 Paridade baixa
2 Tamanho do stop bit
0 1-stop bit
1 2 stop bits quando o tamanho da palavra de dados é de 6, 7 ou 8 bits
1,5 stop bit quando o tamanho da palavra é de 5 bits
0 : 1 Bit 1 Bit 0 Tamanho da palavra de dados
0 0 5 bits
0 1 6 bits
1 0 7 bits
REGISTO MCR ( Modem Control Register: BASE+4)
Este registo controla o interface com o modem.
Bit Função
7 Reservado
6 Reservado
5 Habilita o controlo de fluxo automático ( só 16750)
4 Modo loopback
3 Saída auxiliar OUTPUT 2 2 Saída auxiliar OUTPUT 1
1 Coloca linha RTS Request To Send a ‘1’ 0 Coloca linha DTR Data Terminal Ready a ‘1’
REGISTO LSR ( Line Status Register: BASE+5)
Este registo permite fornecer informações ao CPU que dizem respeito à transferência de dados.
Bit Função
7 Erro na FIFO de recepção
6 Registo de recepção de dados está vazio 5 Registo de transmissão de dados está vazio 4 Interrupção de break
3 Erro de quadro 2 Erro de paridade 1 Erro de overrun 0 Dados disponíveis
REGISTO MSR ( Modem Status Register: BASE+6)
Este registo indica o estado corrente das linhas de controlo do modem ao CPU.
Bit Função
7 Detecção de portadora 6 Indica a chamar
5 Data set Ready
4 Clear To Send
3 Variação em DCD
2 Indicado de a chamar 1 Variaçãi de DSR
4. CONTROLO DE FLUXO
Nestas aplicações o controlo de fluxo pode ser realizado por software ou por hardware. Por software são utilizados dois caractere Xon e Xoff, que correspondem aos caracteres ASCII 17 e 20. Nas aplicações com modems este como têm um buffer de memória pequeno, enviam o caractere Xoff, quando este enche, de modo a indicar ao computador para o envio de dados, quando volta a poder aceitar dados envia o caractere Xon. Este tipo de controlo de fluxo tem a vantagem de não necessitar de hardware adicional, o que pode ser uma desvantagem em ligações a baixa velocidade, pois como cada caractere requer pelo menos 10 bits, o envio do Xon e Xoff pode baixar a taxa de transmissão!
O controlo de fluxo por hardware também é conhecido por RTS/CTS. Usa duas linhas na comunicação série em vez dos caracteres de controle atra´s referidos. Este controle por hardware não baixa a taxa de transmissão, Assim quando o computador quer transmitir dados activa a linha de RTS, então o modem se pode receber dadosreponderá activando a linha de CTS e o computador começa a transmissão de dados. Caso o modem não pode receber dados não activa a linha de CTS.
O controle de fluxo atrás referido, foi exemplificado com uma ligação de um computador a um modem, no entanto os mecanismos referidos aplicam-se entre quaisquer dois equipamentos em comunicação série.
5. APLICAÇÕES
Figura 4- Exemplo de ligação entre CPU e UART.
// exemplo para testar o funcionamento da porta série // adaptado de “Interfacing the serial RS232 port v5.0” // de www.beyondlogic.org
#include <dos.h> #include <stdio.h> #include <conio.h>
#define PORT1 0x3F8 // define endereço para a porta série COM1 void main (void)
{
int c, ch;
outportb(PORT1+1,0); // desactiva as interrupções
outportb(PORT1+3,0x080); // coloca o DLAB a 1
outportb(PORT1+0,0x03); // configura o baud-rate
outportb(PORT1+3,0x03); // 8 bits, sem paridade e 1 stop bit
outportb(PORT1+2,0x0c7); // FIFO controle
outportb(PORT1+4,0); // activa DTR, RTS e OUT2
printf(“\n Programa para testar o funcionamento da porta série. Prima ESC para sair \n”)
do {
c= inportb(PORT1+5); //verifica se recebeu algum caractere
if (c&1)
{
ch=inportb(PORT1); //caso tenha recebido vai lê-lo printf (“%c”,ch); // visualiza o caractere recebido }
if (kbhit()) // se for premida alguma tecla?
{
ch=getch(); // lê a tecla
outportb (PORT1, ch); // envia pela porta série }
}while (ch!=27); // enquanto não for premida a tecla de ESC
}
Referências
PC16550D Universal Asybchronous Receiver/transmitter with FIFOS – National Semiconductor