Tradução: Maria Elisa - Assessoria em Inglês e Alemão
Revisão: Renato Kodaira
Neste modo, o módulo USART dos microcontroladores PIC16F627A, PIC16F628A e PIC16F648A utiliza um formato padrão "não-retorno-a-zero" - NRZ (um bit de inicialização - Start, oito ou nove bits de dados e um bit de parada - Stop). O formato de dados mais comum é o de 8 bits. Um gerador de taxa de transmissão dedicado com 8 bits é utilizado para derivar as frequências de taxa de transmissão do oscilador. O USART transmite e recebe primeiramente o LSb (bit menos significativo). O transmissor e o receptor do USART são funcionalmente independentes, mas utilizam o mesmo formato de dados e taxa de transmissão. O gerador de taxa de transmissão produz um clock de x16 ou x64 da taxa de deslocamento de bit, dependendo do bit BRGH (TXSTA<2>). A paridade não é suportada pelo hardware, mas pode ser implementada pelo software (e armazenada assim como o nono bit de dados). O modo Assíncrono é interrompido durante a Hibernação.
O modo Assíncrono é selecionado apagando-se o bit SYNC (TXSTA<4>).
O módulo Assíncrono do USART é composto dos seguintes elementos importantes:
-
Gerador de Taxa de Transmissão
-
Circuito de Amostragem
-
Transmissor Assíncrono
-
Receptor Assíncrono
O diagrama de blocos do transmissor do USART é apresentado na Figura 12.1. O núcleo do transmissor é o Registrador de Deslocamento de Transmissão serial (TSR). O registrador de deslocamento obtém seus dados do buffer de transmissão de leitura/ escrita, TXREG. O registrador TXREG é carregado com dados pelo software. O registrador TSR não é carregado até que o bit Stop tenha sido transmitido do carregamento anterior. Assim que o bit Stop é transmitido, o TSR é carregado com novos dados provenientes do registrador TXREG (caso estejam disponíveis). Uma vez que o registrador TXREG transfere os dados para o registrador TSR (o que ocorre em um TCY), o registrador TXREG fica vazio e o bit sinalizador TXIF (PIR<4>) é ativado. Esta interrupção pode ser habilitada/ desabilitada ativando-se/ apagando-se o bit de habilitação TXIE (PIE<4>). O bit de sinalização TXIF será ativado independentemente do estado do bit de habilitação TXIE e não pode ser apagado pelo software. Ele será reinicializado somente quando novos dados forem carregados para o registrador TXREG. Enquanto o bit sinalizador TXIF indica o status do registrador TXREG, um outro bit TRMT (TXSTA<1>) mostra o status do registrador TSR. O bit de status TRMT é um bit acessível somente para leitura, o qual é ativado quando o registrador TSR está vazio. Nenhuma lógica de interrupção está relacionada a este bit, então o usuário deve eleger este bit para determinar se o registrador TSR está vazio.
Nota 1:
O registrador TSR não é mapeado na memória de dados, então ele não está disponível para o usuário.
Nota 2:
O bit sinalizador TXIF é ativado quando o bit de habilitação TXEN é ativado.
A transmissão é habilitada ativando-se o bit de habilitação TXEN (TXSTA<5>). A transmissão atual não ocorrerá até que o registrador TXREG tenha sido carregado com os dados e o Gerador de Taxa de Transmissão (BRG) tenha produzido um clock de deslocamento (Figura 12.1). A transmissão também pode ser iniciada através do primeiro carregamento do registrador TXREG e da posterior ativação do bit de habilitação TXEN. Normalmente, quando a transmissão é iniciada pela primeira vez, o registrador TSR está vazio, então uma transferência para o registrador TXREG resultará em uma transferência imediata para o TSR, resultando, por sua vez, em um TXREG vazio. Portanto, uma transferência back-to-back (consecutiva) é possível (Figura 12.3). Ao se apagar o bit de habilitação TXEN durante a transmissão, a mesma será abortada, e o transmissor será reinicializado. Como resultado, o pino RB2/TX/CK reverterá para alta-impedância.
Para que a transmissão de 9 bits seja selecionada, o bit de transmissão TX9 (TXSTA<6>) deve ser ativado e o nono bit deve ser escrito no TX9D (TXSTA<0>). O nono bit deve ser escrito antes da escrita dos dados de 8 bits no registrador TXREG. Isto porque uma escrita de dados no registrador TXREG pode resultar em uma transferência imediata dos dados para o registrador TSR (se o TSR estiver vazio). Neste caso, dados incorretos do nono bit podem ser carregados no registrador TSR.

Siga estes passos ao configurar uma Transmissão Assíncrona:
-
O TRISB<1> e o TRISB<2> devem ambos ser ativados para '1', a fim de configurar os pinos RB1/RX/DT e RB2/TX/CK como entradas. O drive de saída, quando requisitado, é controlado pelos circuitos periféricos.
-
Inicializar o registrador SPBRG para a taxa de transmissão apropriada. Se uma taxa de transmissão de alta velocidade é desejada, ativar o bit BRGH. (Seção 12.1 "Gerador de Taxa de Transmissão (BRG) do USART").
-
Habilitar a porta serial assíncrona apagando o bit SYNC e ativando o bit SPEN.
-
Se interrupções forem desejadas, ativar o bit de transmissão TXIE.
-
Se a transmissão de 9 bits for desejada, ativar o bit de transmissão TX9.
-
Habilitar a transmissão ativando o bit TXEN, o que também ativará o bit TXIF.
-
Se a transmissão de 9 bits for selecionada, o nono bit deve ser carregado para o bit TX9D.
-
Carregar os dados para o registrador TXREG (inicia a transmissão).
FIGURA 12.2: TRANSMISSÃO ASSÍNCRONA


TABELA 12.6: REGISTRADORES ASSOCIADOS À TRANSMISSÃO ASSÍNCRONA
Endereço |
Nome |
Bit 7 |
Bit 6 |
Bit 5 |
Bit 4 |
Bit 3 |
Bit 2 |
Bit 1 |
Bit 0 |
Valor na POR |
Valor em Todas as Outras Reinicializações |
0Ch |
PIR1 |
EEIF |
CMIF |
RCIF |
TXIF |
--- |
CCP1IF |
TMR2IF |
TMR1IF |
0000 -000 |
0000 -000 |
18h |
RCSTA |
SPEN |
RX9 |
SREN |
CREN |
ADEN |
FERR |
OERR |
RX9D |
0000 000x |
0000 000x |
19h |
TXREG |
Registrador de Dados Transmitidos do USART |
0000 0000 |
0000 0000 |
8Ch |
PIE1 |
EEIE |
CMIE |
RCIE |
TXIE |
--- |
CCP1IE |
TMR2IE |
TMR1IE |
0000 -000 |
0000 -000 |
98h |
TXSTA |
CSRC |
TX9 |
TXEN |
SYNC |
--- |
BRGH |
TRMT |
TX9D |
0000 -010 |
0000 -010 |
99h |
SPBRG |
Registrador Gerador de Taxa de Transmissão |
0000 0000 |
0000 0000 |
Legenda:
x = desconhecido
- = não implementado, lido como '0'
células sombreadas = não utilizadas para a Transmissão Assíncrona
O diagrama de blocos do receptor é apresentado na Figura 12.4. Os dados são recebidos no pino RB1/RX/DT e conduzem o bloco de recuperação de dados. O bloco de recuperação de dados é na verdade um deslocador de alta velocidade operando em x16 vezes a taxa de transmissão, enquanto o principal deslocador serial de recepção opera na taxa de transmissão ou na FOSC.
Quando o modo Assíncrono é selecionado, a recepção é habilitada ativando-se o bit CREN (RCSTA<4>).
O núcleo do receptor é o Registrador de Deslocamento de Recepção serial (RSR). Depois da amostragem do bit Stop, os dados recebidos no RSR são transferidos para o registrador RCREG (se ele estiver vazio). Quando a transferência estiver completa, o bit sinalizador RCIF (PIR1<5>) é ativado. A interrupção atual pode ser habilitada/ desabilitada ativando-se/ apagando-se o bit de habilitação RCIE (PIE<5>). O bit sinalizador RCIF é acessível somente para leitura, e é apagado pelo hardware. Ele é apagado quando o registrador RCREG tiver sido lido e estiver vazio. O RCREG é um registrador de buffer duplo (i.e. é um FIFO - first in, first out = primeiro a entrar, primeiro a sair - de dois níveis). É possível que dois bytes de dados sejam recebidos e transferidos para o FIFO do RCREG, e um terceiro byte comece a ser deslocado para o registrador RSR. Na detecção do bit Stop do terceiro byte, se o registrador RCREG ainda estiver cheio, então o bit de erro de overrun (atropelamento) OERR (RCSTA<1>) será ativado. A palavra no RSR será perdida. O registrador RCREG pode ser lido duas vezes para recuperar os dois bytes no FIFO. O bit de overrun OERR deve ser apagado pelo software. Isto é feito através da reinicialização da lógica de recepção (o CREN é apagado e depois ativado). Se o bit OERR estiver ativado, as transferências do registrador RSR para o registrador RCREG são inibidas, então é essencial apagar o bit de erro OERR se ele estiver ativado. O bit de erro de framing (enquadramento) FERR (RCSTA<2>) é ativado se um bit Stop é detectado como apagado. O bit FERR e o 9º bit de recepção são armazenados temporariamente da mesma forma que os dados recebidos. A leitura do RCREG carregará os bits RX9D e FERR com novos valores, e portanto é essencial que o usuário execute a leitura do registrador RCSTA antes da leitura do registrador RCREG, de forma a não perder as informações anteriores no FERR e no RX9D.

FIGURA 12.5: RECEPÇÃO ASSÍNCRONA COM DETECÇÃO DE ENDEREÇO

FIGURA 12.6: RECEPÇÃO ASSÍNCRONA COM BYTE DE ENDEREÇO PRIMEIRO

FIGURA 12.7: RECEPÇÃO ASSÍNCRONA COM BYTE DE ENDEREÇO PRIMEIRO SEGUIDO DE BYTE DE DADOS VÁLIDO

Siga estes passos ao configurar uma Recepção Assíncrona:
-
O TRISB<1> e o TRISB<2> devem ambos ser ativados para '1', a fim de configurar os pinos RB1/RX/DT e RB2/TX/CK como entradas. O drive de saída, quando requisitado, é controlado pelos circuitos periféricos.
-
Inicializar o registrador SPBRG para a taxa de transmissão apropriada. Se uma taxa de transmissão de alta velocidade é desejada, ativar o bit BRGH. (Seção 12.1 "Gerador de Taxa de Transmissão (BRG) do USART").
-
Habilitar a porta serial assíncrona apagando o bit SYNC e ativando o bit SPEN.
-
Se interrupções forem desejadas, ativar o bit de habilitação RCIE.
-
Se a recepção de 9 bits for desejada, ativar o bit RX9.
-
Habilitar a recepção ativando o bit CREN.
-
O bit sinalizador RCIF será ativado quando a recepção estiver completa, e uma interrupção será gerada se o bit de habilitação RCIE tiver sido ativado.
-
Executar a leitura do registrador RCSTA para obter o nono bit (caso esteja habilitado) e determinar se algum erro ocorreu durante a recepção.
-
Executar a leitura dos dados de 8 bits recebidos, através da leitura do registrador RCREG.
-
Caso haja ocorrido um erro OERR, eliminar o erro apagando o bit de habilitação CREN.
TABELA 12.7: REGISTRADORES ASSOCIADOS À RECEPÇÃO ASSÍNCRONA
Endereço |
Nome |
Bit 7 |
Bit 6 |
Bit 5 |
Bit 4 |
Bit 3 |
Bit 2 |
Bit 1 |
Bit 0 |
Valor na POR |
Valor em Todas as Outras Reinicializações |
0Ch |
PIR1 |
EEIF |
CMIF |
RCIF |
TXIF |
--- |
CCP1IF |
TMR2IF |
TMR1IF |
0000 -000 |
0000 -000 |
18h |
RCSTA |
SPEN |
RX9 |
SREN |
CREN |
ADEN |
FERR |
OERR |
RX9D |
0000 000x |
0000 000x |
1Ah |
RCREG |
Registrador de Dados Recebidos do USART |
0000 0000 |
0000 0000 |
8Ch |
PIE1 |
EEIE |
CMIE |
RCIE |
TXIE |
--- |
CCP1IE |
TMR2IE |
TMR1IE |
0000 -000 |
0000 -000 |
98h |
TXSTA |
CSRC |
TX9 |
TXEN |
SYNC |
--- |
BRGH |
TRMT |
TX9D |
0000 -010 |
0000 -010 |
99h |
SPBRG |
Registrador Gerador de Taxa de Transmissão |
0000 0000 |
0000 0000 |
Legenda:
x = desconhecido
- = não implementado, lido como '0'
células sombreadas = não utilizadas para a recepção assíncrona