Altana Tubes > Blog > PIC16F627A/628A/648A > Módulo USART > Assíncrono

12.2 Modo Assíncrono do USART dos microcontroladores PIC16F627A, PIC16F628A e PIC16F648A

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

12.2.1 TRANSMISSOR ASSÍNCRONO DO USART

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.

FIGURA 12.1: DIAGRAMA DE BLOCOS DA TRANSMISSÃO DO USART

Siga estes passos ao configurar uma Transmissão Assíncrona:

  1. 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.
  2. 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").
  3. Habilitar a porta serial assíncrona apagando o bit SYNC e ativando o bit SPEN.
  4. Se interrupções forem desejadas, ativar o bit de transmissão TXIE.
  5. Se a transmissão de 9 bits for desejada, ativar o bit de transmissão TX9.
  6. Habilitar a transmissão ativando o bit TXEN, o que também ativará o bit TXIF.
  7. Se a transmissão de 9 bits for selecionada, o nono bit deve ser carregado para o bit TX9D.
  8. Carregar os dados para o registrador TXREG (inicia a transmissão).

FIGURA 12.2: TRANSMISSÃO ASSÍNCRONA

FIGURA 12.3: TRANSMISSÃO ASSÍNCRONA (CONSECUTIVA - BACK TO BACK)

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

12.2.2 RECEPTOR ASSÍNCRONO DO USART

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.4: DIAGRAMA DE BLOCOS DA RECEPÇÃO DO USART

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:

  1. 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.
  2. 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").
  3. Habilitar a porta serial assíncrona apagando o bit SYNC e ativando o bit SPEN.
  4. Se interrupções forem desejadas, ativar o bit de habilitação RCIE.
  5. Se a recepção de 9 bits for desejada, ativar o bit RX9.
  6. Habilitar a recepção ativando o bit CREN.
  7. 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.
  8. Executar a leitura do registrador RCSTA para obter o nono bit (caso esteja habilitado) e determinar se algum erro ocorreu durante a recepção.
  9. Executar a leitura dos dados de 8 bits recebidos, através da leitura do registrador RCREG.
  10. 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

<-Anterior Índice Próximo->