40
Página 135 26. USART 26.1. Máquinas de comunicação serial no MSP430. Os dispositivos MSP430 tem dois tipos de máquinas para comunicação serial: USART: Universal Synchronous/Asynchronous Receive/Transmit; USCI: Universal Serial Communication Interface; Cada uma destas máquinas pode ser configurada para operar em modos de transmissão distintos: UART: Universal Asynchronous Receive/Transmit; SPI: Synchronous Peripheral Interface; I 2 C: Inter-Integrated Circuit É necessário consultar o datasheet de cada dispositivo para saber exatamente qual máquina está presente no chip e quais as funcionalidades ativas. Para os dois dispositivos que temos presentes na Experimenter Board, tem-se as seguintes máquinas seriais: MSP430x20x2, MSP430x20x3: o USCI: Universal Serial Communication Interface; SPI: Synchronous Peripheral Interface; I 2 C: Inter-Integrated Circuit MSP430Xg461x: o USART: Universal Synchronous/Asynchronous Receive/Transmit; UART: Universal Asynchronous Receive/Transmit; SPI: Synchronous Peripheral Interface o USCI: Universal Serial Communication Interface; Enhanced UART: Universal Asynchronous Receive/Transmit; IrDA Encoder & Decoder: Infrared Data Association SPI: Synchronous Peripheral Interface; I 2 C: Inter-Integrated Circuit

APOSTILA MSP430 C.pdf

Embed Size (px)

Citation preview

Page 1: APOSTILA MSP430 C.pdf

Página 135

26. USART

26.1. Máquinas de comunicação serial no MSP430. Os dispositivos MSP430 tem dois tipos de máquinas para comunicação serial:

• USART: Universal Synchronous/Asynchronous Receive/Transmit; • USCI: Universal Serial Communication Interface;

Cada uma destas máquinas pode ser configurada para operar em modos de transmissão distintos:

• UART: Universal Asynchronous Receive/Transmit; • SPI: Synchronous Peripheral Interface; • I2C: Inter-Integrated Circuit

É necessário consultar o datasheet de cada dispositivo para saber exatamente qual máquina está presente no chip e quais as funcionalidades ativas. Para os dois dispositivos que temos presentes na Experimenter Board, tem-se as seguintes máquinas seriais:

• MSP430x20x2, MSP430x20x3: o USCI: Universal Serial Communication Interface;

SPI: Synchronous Peripheral Interface; I2C: Inter-Integrated Circuit

• MSP430Xg461x: o USART: Universal Synchronous/Asynchronous Receive/Transmit;

UART: Universal Asynchronous Receive/Transmit; SPI: Synchronous Peripheral Interface

o USCI: Universal Serial Communication Interface; Enhanced UART: Universal Asynchronous Receive/Transmit; IrDA Encoder & Decoder: Infrared Data Association SPI: Synchronous Peripheral Interface; I2C: Inter-Integrated Circuit

Page 2: APOSTILA MSP430 C.pdf

Página 136

26.2. O RS232 na Experimenter Board

Durante o nosso treinamento serão abordadas as máquinas USART e USCI do MSP430FG4618, ambas configuradas para modo UART, como veremos a seguir. Porém apenas a USCI tem conexão com o terminal DB9 da placa, como pode ser visto pelo diagrama elétrico acima.

Page 3: APOSTILA MSP430 C.pdf

Página 137

26.3. Breve introdução à comunicação serial.

Page 4: APOSTILA MSP430 C.pdf

Página 138

Page 5: APOSTILA MSP430 C.pdf

Página 139

Page 6: APOSTILA MSP430 C.pdf

Página 140

26.4. O padrão de comunicação serial RS232 (EIA232).

26.4.1. O que é RS232

RS é uma abreviação de “Recommended Standard”. Ela relata uma padronização de uma interface comum para comunicação de dados entre equipamentos, criada no início dos anos 60, por um comitê conhecido atualmente como “Electronic Industries Association” (EIA). Naquele tempo, a comunicação de dados compreendia a troca de dados digitais entre um computador central (mainframe) e terminais de computador remotos, ou entre dois terminais sem o envolvimento do computador. Estes dispositivos poderiam ser conectados através de linha telefônica, e conseqüentemente necessitavam um modem em cada lado para fazer a decodificação dos sinais. Dessas idéias nasceu o padrão RS232. Ele especifica as tensões, temporizações e funções dos sinais, um protocolo para troca de informações, e as conexões mecânicas. A mais de 30 anos desde que essa padronização foi desenvolvida, a EIA publicou três modificações. A mais recente, EIA232E, foi introduzida em 1991. Ao lado da mudança de nome de RS232 para EIA232, algumas linhas de sinais foram renomeadas e várias linhas novas foram definidas.

26.4.2. Definições de sinais Se a norma EIA232 completa for implementada, o equipamento que faz o processamento dos sinais é chamado DTE (Data Terminal Equipment – usualmente um computador ou terminal), tem um conector DB9 macho, e utilizando os pinos mostrados na figura a seguir para sinais ou terra.

O equipamento que faz a conexão (normalmente uma interface com a linha telefônica) é denominado de DCE (Data Circuit-terminating Equipment – usualmente um modem), tem um conector DB9 fêmea, e utilizando os pinos mostrados na figura a seguir para sinais ou terra.

Page 7: APOSTILA MSP430 C.pdf

Página 141

Um cabo de conexão entre dispositivos DTE e DCE contém ligações em paralelo, não necessitando mudanças na conexão de pinos. Se todos os dispositivos seguissem essa norma, todos os cabos seriam idênticos, e não haveria chances de haver conexões incorretas.

Diversos sinais são necessários para conexões onde o dispositivo DCE é um modem, e eles são utilizados apenas quando o protocolo de software os emprega. Para dispositivos DCE que não são modem, ou quando dois dispositivos DTE são conectados diretamente, poucos sinais são necessários. Os sinais de temporização de transmissão e recepção são utilizados somente quando o protocolo de transmissão utilizado for síncrono. Para protocolos assíncronos, padrão 8 bits, os sinais de temporização externos são desnecessários. Os nomes dos sinais que implicam em uma direção, como “Transmit Data” e “Receive Data”, são nomeados do ponto de vista dos dispositivos DTE. Se a norma EIA232 for seguida a risca, estes sinais terão o mesmo nome e o mesmo número de pino do lado do DCE. Infelizmente, isto não é feito na prática pela maioria dos usuários, provavelmente porque em alguns casos torna-se difícil definir quem é o DTE e quem é o DCE. A figura a seguir apresenta a convenção utilizada para os sinais mais comuns.

Page 8: APOSTILA MSP430 C.pdf

Página 142

26.4.3. Definições de sinais

As funções dos sinais da norma EIA232 podem ser subdivididos categorias, apresentados na tabela a seguir.

Page 9: APOSTILA MSP430 C.pdf

Página 143

26.4.4. Características dos sinais Todas as linhas, sejam elas de informações de dados, temporização ou controle, podem ser representadas pelo mesmo circuito elétrico equivalente da figura a seguir:

Este circuito equivalente aplica-se aos sinais originados tanto no DTE quanto no DCE. A capacitância “Co” não é especificada na norma, mas deve ser assumida como pequena e consistir apenas de elementos parasitas. “Ro” e “Vo” são escolhidos de forma tal que a corrente de curto-circuito não exceda a 500 mA. Sinais com tensão entre –3 volts e –25 volts com relação ao terra (pino 7) são considerados nível lógico “1” (condição marca), e tensões entre +3 volts e +25 volts são considerados nível lógico “0” (condição espaço). A faixa de tensões entre –3 volts e +3 volts é considerada uma região de transição para o qual o estado do sinal é indefinido.

Page 10: APOSTILA MSP430 C.pdf

Página 144

Quatro sinais foram implementados com segurança à falhas (“fail-safe design”) no qual durante a desenergização ou desconexão do cabo, seus sinais estarão desabilitados (nível lógico “0”). São eles:

• Sinal RTS – desabilitado • Sinal SRTS – desabilitado • Sinal DTR – DTE não pronto • Sinal DSR – DCE não pronto

26.5. Modo UART na máquina USCI.

Como foi abordado na breve introdução a comunicação serial, através da máquina USCI, configurada em modo UART, será possível conectar o MSP430 ao mundo externo através de dois pinos: UCA0RXD e UCA0TXD. Isto permitirá a transmissão de dados em modo full duplex. Algumas das características que estão presentes neste modo são:

• Transmissão de 7 ou 8 bits de dados, com ou sem paridade; • Registradores de TX e RX independentes; • Buffers de TX e RX separados; • Transmissão e recepção através de LSB-first; • Possibilidade de transmissão de bit de endereçamento; • Detector de início de recepção com possibilidade de acordar o dispositivo; • Taxa de transmissão programável; • Indicador de erro de TX/RX; • Capacidade de interrupção independente para TX e RX.

Quando neste modo, a USCI transmite e recebe caracteres a uma determinada taxa de bits em modo assíncrono, para outro dispositivo. O tempo que é gasto para transmitir cada bit de dado é baseado na freqüência de baud rate ajustada na USCI, e é sempre a mesma para transmitir e receber informações.

26.6. Inicializando a USCI. A máquina USCI é resetada toda vez que ocorrer um PUC ou quando o bit USCWRST = 1. Após a ocorrência de um PUC, o bit USCWRST sempre é levado para nível lógico um, o que significa dizer que a USCI sempre começa a operar em condição de reset. É necessário passar este bit para nível lógico zero para que a operação com a USCI seja liberada.

Page 11: APOSTILA MSP430 C.pdf

Página 145

Isto faz com que os bits UCAxRXIE, UCAxTXIE, UCAxRXIFG, UCRXERR, UCBRK, UCPE, UCOE, UCFE, UCTOE e UCBTOE sejam resetados, e o bit UCAxTXIFG seja setado. É importante ter isto em mente, pois após estudar o que cada um destes sinais fazem na configuração da máquina, você entenderá em que estado ela começa a trabalhar quando o chip é resetado.

Page 12: APOSTILA MSP430 C.pdf

Página 146

26.7. Formato dos dados transmitidos e recebido pela UART da

máquina USCI.

26.8. Gerador de Baud Rate da USCI. Dentro da máquina USCI tem-se um módulo que tem a capacidade de gerar a base de tempo necessária para a transmissão de dados em modo assíncrono. Lembre-se que os dispositivos que fazem comunicação assíncrona necessitam que esta base de tempo seja a mais precisa possível, de modo que possam identificar perfeitamente onde está cada bit ao longo do tempo. Pequenos erros no valor do Baud Rate costumam gerar grandes erros na transmissão de dados. O módulo gerador de Baud Rate do MSP430 na máquina USCI pode ser visto na figura a seguir.

Page 13: APOSTILA MSP430 C.pdf

Página 147

No MSP430 a temporização para validar cada bit recebido é mostrado na figura abaixo. A amostra de informação ocorre nos momentos N/2-1, N/2 e N/2+1 dos pulsos do BRCLK. N é a relação entre o número de pulsos do BRCLK para cada BITCLK.

26.8.1. Ajuste de Baud Rate da USCI

A fonte de clock é selecionada através dos bits UCSSELx. Esta seleção indicará qual é a velocidade presente na entrada BRCLK. Sabendo o valor da velocidade de BRCLK (fBRCLK), o valor da baud rate é calculado através da expressão abaixo:

A máquina USCI pode trabalhar em dois modos de velocidade de baud rate: LOW-FREQUENCY e OVERSAMPLING. A seleção de qual modo está ajustado na máquina depende do valor do bit USOC16, onde:

• USOC16 = 0 LOW FREQUENCY; • USOC16 = 1 OVERSAMPLING;

O fator N depende de qual dos dois modos de velocidade está selecionado na máquina.

• Fator N quando USOC16 = 0 LOW FREQUENCY; A parte inteira de N será calculada por:

A parte fracionária de N será calculada por:

Page 14: APOSTILA MSP430 C.pdf

Página 148

• Fator N quandoUSOC16 = 1 OVERSAMPLING;

A parte inteira de N será calculada por:

A parte fracionária de N será calculada por:

26.8.2. Temporização dos bits de recepção A temporização na recepção tem duas fontes de erro. A primeira é o tempo de bit a bit, como acontece na transmissão. A segunda é o erro entre uma borda de início de recepção ocorrer e o tempo necessário para que a máquina entenda que isto aconteceu e comece a processar os dados de entrada. Estes dois erros podem ser melhor visualizados através do mapa de tempos mostrados na figura a seguir.

A temporização ideal para início do start bit é a metade da temporização de baud rate, porque cada bit sempre é testado na metade deste período. Assim, a temporização ideal para todos os bits restantes deve seguir a mesma lógica.

Page 15: APOSTILA MSP430 C.pdf

Página 149

26.8.3. Taxas típicas de transmissão e recepção e seus

respectivos erros na máquina USCI no modo UART • USOC16 = 0 LOW FREQUENCY;

Page 16: APOSTILA MSP430 C.pdf

Página 150

• USOC16 = 1 OVERSAMPLING;

Page 17: APOSTILA MSP430 C.pdf

Página 151

26.9. Interrupções da USCI no modo UART.

A USCI possui vetores de interrupção separados para TX e RX. Isto permite que os dois tipos de interrupção ocorram separadamente.

26.9.1. Interrupção numa operação de TX A flag de interrupção de transmissão UCAxTXIFG é setada pelo transmissor para indicar que o buffer UCAxTXBUF está pronto para aceitar mais um caractere a ser transmitido. Para que isto ocorra é necessário que os bits GIE e UCAxTXIE estejam em nível lógico 1. A flag de interrupção é automaticamente apagada quando o programa entra na rotina de tratamento de interrupção ou quando um novo caractere é gravado no registrador UCAxTXBUF. UCAxTXIFG é setada após um PUC ou quando UCSWRST = 1. UCAxTXIE é resetado após um PUC ou quando UCSWRST = 1.

26.9.2. Interrupção numa operação de RX A flag de interrupção de recepção UCAxRXIFG é setada pelo receptor quando um caractere é recebido e gravado com sucesso no buffer UCAxRXBUF. Para que isto ocorra é necessário que os bits GIE e UCAxRXIE estejam em nível lógico 1. A flag de interrupção é automaticamente apagada quando o programa entra na rotina de tratamento de interrupção ou quando o registrador UCAxRXBUF é lido. UCAxRXIFG e UCAxRXIE são automaticamente resetadas após um PUC ou quando UCSWRST = 1.

26.10. Os principais registradores de controle da USCI.

Page 18: APOSTILA MSP430 C.pdf

Página 152

Page 19: APOSTILA MSP430 C.pdf

Página 153

Page 20: APOSTILA MSP430 C.pdf

Página 154

Page 21: APOSTILA MSP430 C.pdf

Página 155

Page 22: APOSTILA MSP430 C.pdf

Página 156

26.11. Dois códigos de exemplo de configuração e uso da USCI.

26.11.1. EXEMPLO-33 msp430xG46x_uscia0_9600.c

//****************************************************************************** // MSP430xG46x Demo - USCI_A0, Ultra-Low Pwr UART 9600 Echo ISR, 32kHz ACLK // // Description: Echo a received character, RX ISR used. Normal mode is LPM3, // USCI_A0 RX interrupt triggers TX Echo. // ACLK = BRCLK = LFXT1 = 32768, MCLK = SMCLK = DCO~1048k // Baud rate divider with 32768hz XTAL @9600 = 32768Hz/9600 = 3.41 (0003h 03h ) // //* An external watch crystal is required on XIN XOUT for ACLK *// // // // MSP430xG461x // ----------------- // /|\| XIN|- // | | | 32kHz // --|RST XOUT|- // | | // | P4.7/UCA0RXD|------------> // | | 9600 - 8N1 // | P4.6/UCA0TXD|<------------ // // K. Quiring/ M. Mitchell // Texas Instruments Inc. // October 2006 // Built with IAR Embedded Workbench Version: 3.41A //****************************************************************************** #include "msp430xG46x.h" void main(void) { volatile unsigned int i; WDTCTL = WDTPW+WDTHOLD; // Stop WDT FLL_CTL0 |= XCAP14PF; // Configure load caps do { IFG1 &= ~OFIFG; // Clear OSCFault flag for (i = 0x47FF; i > 0; i--); // Time for flag to set } while ((IFG1 & OFIFG)); // OSCFault flag still set? P4SEL |= 0x0C0; // P4.7,6 = USCI_A0 RXD/TXD UCA0CTL1 |= UCSSEL_1; // CLK = ACLK UCA0BR0 = 0x03; // 32k/9600 - 3.41 UCA0BR1 = 0x00; // UCA0MCTL = 0x06; // Modulation UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine** IE2 |= UCA0RXIE; // Enable USCI_A0 RX interrupt _BIS_SR(LPM0_bits + GIE); // Enter LPM0, interrupts enabled } // Echo back RXed character, confirm TX buffer is ready first #pragma vector=USCIAB0RX_VECTOR __interrupt void USCIA0RX_ISR (void) { while(!(IFG2&UCA0TXIFG)); UCA0TXBUF = UCA0RXBUF; // TX -> RXed character }

Page 23: APOSTILA MSP430 C.pdf

Página 157

26.11.2. EXEMPLO-34 msp430xG46x_uscia0_uart_115k_lpm.c //****************************************************************************** // MSP430xG46x Demo - USCI_A0, 115200 UART Echo ISR, DCO SMCLK, LPM3 // // Description: Echo a received character, RX ISR used. Normal mode is LPM3. // Automatic clock activation for SMCLK through the USCI is demonstrated. // USCI_A0 RX interrupt triggers TX Echo. // Baud rate divider with 1048576hz = 1048576/115200 = ~9.1 (009h|01h) // ACLK = LFXT1 = 32768Hz, MCLK = SMCLK = default DCO = 32 x ACLK = 1048576Hz // //* An external watch crystal between XIN & XOUT is required for ACLK *// // // MSP430xG461x // ----------------- // /|\| XIN|- // | | | 32kHz // --|RST XOUT|- // | | // | P4.6/UCA0TXD|------------> // | | 115200 - 8N1 // | P4.7/UCA0RXD|<------------ // // // A. Dannenberg/ M. Mitchell // Texas Instruments Inc. // October 2006 // Built with IAR Embedded Workbench Version: 3.41A //****************************************************************************** #include "msp430xG46x.h" void main(void) { volatile unsigned int i; WDTCTL = WDTPW+WDTHOLD; // Stop WDT FLL_CTL0 |= XCAP14PF; // Configure load caps do { IFG1 &= ~OFIFG; // Clear OSCFault flag for (i = 0x47FF; i > 0; i--); // Time for flag to set } while ((IFG1 & OFIFG)); // OSCFault flag still set? P4SEL |= 0x0C0; // P4.7,6 = USCI_A0 RXD/TXD UCA0CTL1 |= UCSSEL_2; // SMCLK UCA0BR0 = 0x09; // 1MHz 115200 UCA0BR1 = 0x00; // 1MHz 115200 UCA0MCTL = 0x02; // Modulation UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine** IE2 |= UCA0RXIE; // Enable USCI_A0 RX interrupt __bis_SR_register(LPM3_bits + GIE); // Enter LPM4, interrupts enabled } // Echo back RXed character, confirm TX buffer is ready first #pragma vector=USCIAB0RX_VECTOR __interrupt void USCI0RX_ISR(void) { while (!(IFG2&UCA0TXIFG)); // USCI_A0 TX buffer ready? UCA0TXBUF = UCA0RXBUF; // TX -> RXed character }

Page 24: APOSTILA MSP430 C.pdf

Página 158

26.12. Modo UART na máquina USART.

Como foi abordado na breve introdução a comunicação serial, através da máquina USART, configurada em modo UART, será possível conectar o MSP430 ao mundo externo através de dois pinos: URXD e UTXD. Isto permitirá a transmissão de dados em modo full duplex. Algumas das características que estão presentes neste modo são:

• Transmissão de 7 ou 8 bits de dados, com ou sem paridade; • Registradores de TX e RX independentes; • Buffers de TX e RX separados; • Transmissão e recepção através de LSB-first; • Possibilidade de transmissão de bit de endereçamento; • Detector de início de recepção com possibilidade de acordar o dispositivo; • Taxa de transmissão programável; • Indicador de erro de TX/RX; • Capacidade de interrupção independente para TX e RX.

Quando neste modo, a USART transmite e recebe caracteres a uma determinada taxa de bits em modo assíncrono, para outro dispositivo. O tempo que é gasto para transmitir cada bit de dado é baseado na freqüência de baud rate ajustada na USART, e é sempre a mesma para transmitir e receber informações.

26.13. Inicializando a USART. A máquina USART é resetada toda vez que ocorrer um PUC ou quando o bit SWRST = 1. Após a ocorrência de um PUC, o bit SWRST sempre é levado para nível lógico um, o que significa dizer que a USART sempre começa a operar em condição de reset. É necessário passar este bit para nível lógico zero para que a operação com a USART seja liberada. Isto faz com que os bits URXIEx, UTXIEx, URXIFGx, RXWAKE, TXWAKE, RXERR, BRK, PE, OE e FE sejam resetados, e os bits UTXIFGx e TXEPT sejam setados. Já as flags URXEx e UTXEx não são alteradas. É importante ter isto em mente, pois após estudar o que cada um destes sinais fazem na configuração da máquina, você entenderá em que estado ela começa a trabalhar quando o chip é resetado.

Page 25: APOSTILA MSP430 C.pdf

Página 159

26.14. Formato dos dados transmitidos e recebido pela USART.

Page 26: APOSTILA MSP430 C.pdf

Página 160

26.15. Gerador de Baud Rate da USART.

Dentro da máquina USART tem-se um módulo que tem a capacidade de gerar a base de tempo necessária para a transmissão de dados em modo assíncrono. Lembre-se que os dispositivos que fazem comunicação assíncrona necessitam que esta base de tempo seja a mais precisa possível, de modo que possam identificar perfeitamente onde está cada bit ao longo do tempo. Pequenos erros no valor do Baud Rate costumam gerar grandes erros na transmissão de dados. O módulo gerador de Baud Rate do MSP430 pode ser visto na figura a seguir.

Page 27: APOSTILA MSP430 C.pdf

Página 161

No MSP430 a temporização para validar cada bit recebido é mostrado na figura abaixo. A amostra de informação ocorre nos momentos N/2-1, N/2 e N/2+1 dos pulsos do BRCLK. N é a relação entre o número de pulsos do BRCLK para cada BITCLK.

26.15.1. Tempo de Bit do Gerador de Baud Rate O primeiro estágio do gerador de Baud Rate é o contador/comparador de 16 bits. No início de cada transmissão ou recepção, o contador é carregado um o valor inteiro de N/2, onde N é o valor de 16 bits armazenados nos dois registradores de 8 bits UxBR0 e UxBR1. Este contador é recarregado com INT (N/2) a cada metade de ciclo de transmissão/recepção de cada bit. Isto Isto resultará o período total de um bit para N BRCLKs. Deste modo, para um determinado valor do BRCLK, o valor utilizado para Baud Rate irá determinar o requisito do fator de divisão N, como pode ser visto na equação abaixo.

É claro que matematicamente podemos escrever também que:

Page 28: APOSTILA MSP430 C.pdf

Página 162

Lembre-se que o resultado da divisão que gera o valor de N pode resultar em um valor não inteiro, um valor decimal. A parte inteira deste valor pode ser aproveitada pelo divisor (prescaler). O segundo estágio do gerador de Baud Rate é o modulador. Ele é utilizado para encontrar a parte fracionária de N mais próxima possível do valor real obtido durante a operação de divisão. Assim, a definição do fator N é:

Onde:

• N: fator de divisão alvo para um determinado Baud Rate; • UxBR: 16 bits resultantes dos registradores UxBR0 e UxBR1; • i: posicionamento de cada bit dentro de um caractere transmitido ou recebido; • n: número total de bits transmitidos ou recebidos em um caractere; • mi: dado carregado em cada bit (0 ou 1).

Assim, com as informações anteriores, podemos chegar a seguinte expressão:

O valor de BICLK pode ser ajustado para cada bit com o auxílio do modulador, para encontrar o tempo necessário quando um valor de N não inteiro é obtido. A temporização de cada bit é expandida para um ciclo do BRCLK se o bit mi do modulador está setado. A cada momento que um bit é recebido ou transmitido, o próximo bit no registrador de controle do modulador determina qual a temporização daquele bit. Levar o bit set modulation para nível lógico 1 incrementará o fator de divisão fornecido por UxBR. O tempo necessário para a existência de um start bit é determinada pelo valor de UxBR vezes m0, o próximo bit é determinado por UxBR vezes m1, e assim por diante, até que todos os bits tenham sido transmitidos. A modulação sempre inicia pelo LSB. Caso o caractere a ser transmitido seja maior que os 8 bits do padrão de transmissão, o modulador irá reiniciar a sequência com o valor de m0 e continuará até que todos os bits tenham sido processados.

Page 29: APOSTILA MSP430 C.pdf

Página 163

26.15.2. Determinando o valor da Modulação

Determinar o valor da modulação é um processo interativo. Utilizando a fórmula de erro mostrada no próximo item deste capítulo inicia-se pelo primeiro bit, calculando o erro individual de cada bit, para os ajustes do bit de modulação em 0 e em 1. Em um dos dois casos será obtido o menor valor de erro. Este será o valor ajustado para o próximo bit, onde deve-se, novamente, testar os dois estados. Este processo se repete até que todos os bits sejam testados e se obtem um valor do modulador cujo erro seja o menor possível.

26.15.3. Temporização dos bits de transmissão A temporização necessária para transmissão de um caractere deve ser o resultado da soma dos tempos de transmissão de cada bit individualmente. Como o MSP430 modula cada bit individualmente, o erro acumulativo no caractere inteiro é reduzido. O erro individual de cada bit pode ser calculado através da seguinte expressão:

Onde:

• Baud Rate: velocidade de transmissão desejada; • BRCLK: valor da freqüência de entrada no gerador de Baud Rate, que pode ser

fornecida por diversas fontes: UCLKI, ACLK ou SMCLK; • j: posicionamento de cada bit dentro de um caractere transmitido ou recebido, onde j

= 0 para o start bit, j = 1 para o bit D0, e assim por diante; • UxBR: 16 bits resultantes dos registradores UxBR0 e UxBR1;

Vamos a um exemplo. Queremos descobrir quais são os valores de erro transmissão para cada bit nas seguintes condições:

• Baud Rate: 2400; • BRCLK: 32768 Hz (ACLK); • UxBR: 13. O valor ideal seria 13,653333 (N = BRCLK / Baud Rate). • UxMCTL: 0x06Bh:

o m7=0, m6=1, m5=1, m4=0, m3=1, m2=0, m1=1, and m0=1; o O LSB no UxMCTL é utilizado primeiramente.

Page 30: APOSTILA MSP430 C.pdf

Página 164

Fazendo os cálculos:

Isto significa que o máximo erro que existirá em um bit deste caractere será de 5,08%.

26.15.4. Temporização dos bits de recepção A temporização na recepção tem duas fontes de erro. A primeira é o tempo de bit a bit, como acontece na transmissão. A segunda é o erro entre uma borda de início de recepção ocorrer e o tempo necessário para que a máquina entenda que isto aconteceu e comece a processar os dados de entrada. Estes dois erros podem ser melhor visualizados através do mapa de tempos mostrados na figura a seguir.

Page 31: APOSTILA MSP430 C.pdf

Página 165

A temporização ideal para início do start bit é a metade da temporização de baud rate, porque cada bit sempre é testado na metade deste período. Assim, a temporização ideal para todos os bits restantes deve seguir a mesma lógica. O erro obtido durante este ajuste pode ser obtido através da equação abaixo: Onde:

• Baud Rate: velocidade de recepção desejada; • BRCLK: valor da freqüência de entrada no gerador de Baud Rate, que pode ser

fornecida por diversas fontes: UCLKI, ACLK ou SMCLK; • j: posicionamento de cada bit dentro de um caractere transmitido ou recebido, onde j

= 0 para o start bit, j = 1 para o bit D0, e assim por diante; • UxBR: 16 bits resultantes dos registradores UxBR0 e UxBR1;

Vamos fazer os cálculo para o mesmo exemplo utilizado na transmissão, mas agora ajsutando a máquina para a recepção:

• Baud Rate: 2400; • BRCLK: 32768 Hz (ACLK); • UxBR: 13. O valor ideal seria 13,653333 (N = BRCLK / Baud Rate). • UxMCTL: 0x06Bh:

o m7=0, m6=1, m5=1, m4=0, m3=1, m2=0, m1=1, and m0=1; o O LSB no UxMCTL é utilizado primeiramente.

Page 32: APOSTILA MSP430 C.pdf

Página 166

Bit a bit:

Isto significa que o máximo erro que existirá em um bit deste caractere será de 5,08%.

26.15.5. Taxas típicas de transmissão e seus respectivos erros A tabela mostrada a seguir foi calculada para um sistema com ACLK de 32768 Hz e SMCLK de 1048756 Hz.

Page 33: APOSTILA MSP430 C.pdf

Página 167

26.16. Interrupções da USART.

A USART possui vetores de interrupção separados para TX e RX. Isto permite que os dois tipos de interrupção ocorram separadamente.

26.16.1. Interrupção numa operação de TX A flag de interrupção de transmissão UTXIFGx é setada pelo transmissor para indicar que o buffer UxTXBUF está pronto para aceitar mais um caractere a ser transmitido. Para que isto ocorra é necessário que os bits GIE e UTXIEx estejam em nível lógico 1. A flag de interrupção é automaticamente apagada quando o programa entra na rotina de tratamento de interrupção ou quando um novo caractere é gravado no registrador UxTXBUF. UTXIFGx é setada após um PUC ou quando SWRST = 1. UTXIEx é resetado após um PUC ou quando SWRST = 1. O hardware que garante a ocorrência destas condições é mostrado na figura abaixo.

Page 34: APOSTILA MSP430 C.pdf

Página 168

26.16.2. Interrupção numa operação de RX

A flag de interrupção de recepção URXIFGx é setada pelo receptor quando um caractere é recebido e gravado com sucesso no buffer UxRXBUF. Para que isto ocorra é necessário que os bits GIE e URXIEx estejam em nível lógico 1. A flag de interrupção é automaticamente apagada quando o programa entra na rotina de tratamento de interrupção ou quando o registrador UxRXBUF é lido. URXIFGx e URXIEx são automaticamente resetadas após um PUC ou quando SWRST = 1. é após um PUC ou quando SWRST = 1. O hardware que garante a ocorrência destas condições é mostrado na figura abaixo.

26.17. Os principais registradores de controle da USART.

Page 35: APOSTILA MSP430 C.pdf

Página 169

Page 36: APOSTILA MSP430 C.pdf

Página 170

Page 37: APOSTILA MSP430 C.pdf

Página 171

26.18. Dois códigos de exemplo de configuração e uso da USART.

26.18.1. EXEMPLO-35 msp430xG46x_usart1_19200.c

//***************************************************************************** // MSP430xG46x Demo - USART1, Ultra-Low Pwr UART 19200 Echo ISR, 32kHz ACLK // // Description: Echo a received character, USART1 RX ISR at high-speed used // with ultra-low power techniques. Normal operation in LPM3, // On valid RX character, character echoed back. Use start-bit // edge detect - URXSE - to automatically (re)enable DCO and trigger ISR. ISR // must make sure DCO clock source remains enabled for the UART to receive // full character. // Software needs to make sure a character has been completely TX'ed, or RX'ed // before entering LPM3, which disables DCO required for the USART baud rate // generator. In the example, TX'ing is checked using the TXEPT bit directly. // RX'ing is checked using the SSEL0 clock select bit as a flag. This is // possible because UCLK1 = SMCLK when either both SSEL1 and SSEL0 or just // SSEL1 = 1. In the example, when SSEL1 = SSEL0 = 1 there is no RX'ing, and // LPM3 is allowed. When SSEL 1 = 1 and SSEL0 = 0 SMCLK is selected, but // RX'ing is active and the DCO is required, thus LPM3 is not allowed. // ACLK = LFXT1/8 = 32768/8, MCLK = SMCLK = UCLK1 = DCOCLK = 1048576 // Baud rate divider with 1048576hz= 1048576Hz/19200 ~ 55 (0036h) // //* An external 32kHz watch crystal on XIN XOUT is required for ACLK *// // // // MSP430FG4619 // ----------------- // /|\| XIN|- // | | | 32768Hz // --|RST XOUT|- // | | // | P4.0|------------> // | | 19200 - 8N1 // | 43.1|<------------ // // // K. Quiring/ M. Mitchell // Texas Instruments Inc. // October 2006 // Built with IAR Embedded Workbench Version: 3.41A //***************************************************************************** #include <msp430xG46x.h> void main(void) { volatile unsigned int i; WDTCTL = WDTPW + WDTHOLD; // Stop WDT P4SEL |= 0x03; // P4.1,0 = USART1 TXD/RXD FLL_CTL0 |= XCAP14PF; // Configure load caps do { IFG1 &= ~OFIFG; // Clear OSCFault flag for (i = 0x47FF; i > 0; i--); // Time for flag to set } while ((IFG1 & OFIFG)); // OSCFault flag still set? ME2 |= UTXE1 + URXE1; // Enable USART1 TXD/RXD U1CTL |= CHAR; // 8-bit character U1TCTL |= SSEL1 + SSEL0 + URXSE; // UCLK = SMCLK, start edge detect U1BR0 = 0x36; // 1MHz 19200 U1BR1 = 0x00; // 1MHz 19200 U1MCTL = 0x6B; // 1MHz 19200 modulation U1CTL &= ~SWRST; // Initialize USART state machine IE2 |= URXIE1; // Enable USART1 RX interrupt

Page 38: APOSTILA MSP430 C.pdf

Página 172

for (;;) { while (!(U1TCTL & TXEPT)); // Confirm no TXing before --> LPM3 _DINT(); // Disable interrupts for flag test _NOP(); if (!(U1TCTL & SSEL0)) _BIS_SR(LPM0_bits + GIE); // RX'ing char, LPM, int's active else _BIS_SR(LPM3_bits + GIE); // Enter LPM3, int's active } } #pragma vector=USART1RX_VECTOR __interrupt void usart1_rx (void) { if ((IFG2 & URXIFG1)) // Test URXIFG0 { while (!(IFG2 & UTXIFG1)); // USART1 TX buffer ready? U1TXBUF = U1RXBUF; // RXBUF0 to TXBUF0 _BIC_SR_IRQ(LPM3_bits); // Exit LPM3 after reti U1TCTL |= SSEL0; // SSEL0 = 1, no RX activity } else // Start edge { U1TCTL &= ~URXSE; // Clear URXS signal U1TCTL |= URXSE; // Re-enable edge detect _BIC_SR_IRQ(SCG1 + SCG0); // DCO reamins on after reti U1TCTL &= ~SSEL0; // SSEL0= 0, RX activity } }

26.18.2. EXEMPLO-36 msp430xG46x_usart1_uart_115k.c //****************************************************************************** // MSP430xG46x Demo - USART1, 115200 UART Echo ISR, DCO SMCLK // // Description: Echo a received character, RX ISR used. Normal mode is LPM0. // USART1 RX interrupt triggers TX Echo. // Baud rate divider with 1048576hz = 1048576/115200 = ~9.1 (009h|08h) // ACLK = LFXT1 = 32768Hz, MCLK = SMCLK = default DCO = 32 x ACLK = 1048576Hz // //* An external watch crystal between XIN & XOUT is required for ACLK *// // // MSP430FG4619 // ----------------- // /|\| XIN|- // | | | 32kHz // --|RST XOUT|- // | | // | P4.0/UTXD1|------------> // | | 115200 - 8N1 // | P4.1/URXD1|<------------ // // K. Quiring // Texas Instruments Inc. // October 2005 // Built with IAR Embedded Workbench Version: 3.39 beta //****************************************************************************** #include <msp430xG46x.h> void main(void) { volatile unsigned int i; WDTCTL = WDTPW + WDTHOLD; // Stop WDT FLL_CTL0 |= XCAP14PF; // Configure load caps P4SEL |= 0x03; // P4.1,0 = USART1 TXD/RXD do { IFG1 &= ~OFIFG; // Clear OSCFault flag for (i = 0x47FF; i > 0; i--); // Time for flag to set } while ((IFG1 & OFIFG)); // OSCFault flag still set?

Page 39: APOSTILA MSP430 C.pdf

Página 173

ME2 |= UTXE1 + URXE1; // Enable USART1 TXD/RXD U1CTL |= CHAR; // 8-bit character U1TCTL |= SSEL1; // UCLK= ACLK U1BR0 = 0x09; // 1MHz 115200 U1BR1 = 0x00; // 1MHz 115200 U1MCTL = 0x08; // 1MHz 115200 modulation U1CTL &= ~SWRST; // Initialize USART state machine IE2 |= URXIE1; // Enable USART1 RX interrupt _BIS_SR(LPM0_bits + GIE); // Enter LPM0 w/ interrupt } #pragma vector=USART1RX_VECTOR __interrupt void USART1_rx (void) { while (!(IFG2 & UTXIFG1)); // USART1 TX buffer ready? TXBUF1 = RXBUF1; // RXBUF1 to TXBUF1 }

27. EXERCÍCIOS: Comunicação da EXPBoard via USCI – Modo UART.

27.1. EXERCÍCIO-18 Aproveitando os exemplos EXEMPLO-35 e EXEMPLO-36 escreva um programa que faça um eco (repetição) o que é digitado através do teclado do PC. Para tanto a velocidade de funcionamento da porta serial deve ser ajustada para um Baud Rate de 9600. Utilize o programa Hiperterminal do Windows para estabelecer a conexão com a Experimenter Board.

27.2. EXERCÍCIO-19 Escreva um programa que faça uma calculadora básica, que trabalhe com as quatro operações matemáticas elementares: soma, subtração, multiplicação e divisão. Ao ligar a Experimenter Board, conectá-la ao Hiperterminal do Windows, deve aparecer a seguinte mensagem:

DIGITE O PRIMEIRO NÚMERO:

O usuário, através do teclado do computador, digita um valor inteiro entre 0 e 65536 e tecla ENTER. Este valor deve ser transmitido via porta serial ao MSP430, que responde no Hiperterminal:

DIGITE O SEGUNDO NÚMERO:

O usuário, através do teclado do computador, digita um outro inteiro entre 0 e 65536 e tecla ENTER. Este valor deve ser transmitido via porta serial ao MSP430, que responde no Hiperterminal:

DIGITE A OPERAÇÃO A SER REALIZADA:

Page 40: APOSTILA MSP430 C.pdf

Página 174

O usuário, através do teclado do computador, digita uma das quatro operações possíveis ( +, -, * ou /) e tecla ENTER. Este valor deve ser transmitido via porta serial ao MSP430, que responde no Hiperterminal com o resultado do cálculo:

O RESULTADO É: XXXXXX

Onde XXXXX é o resultado do cálculo. Finalmente o programa deve retornar ao início, solicitando novamente a entrada do primeiro número. O programa deve ficar o maior tempo possível em LPM e sair apenas para interagir com o usuário, realizar os cálculos e apresentar os resultados.