You are on page 1of 40

26.

USART Mquinas de comunicao serial no MSP430.

26.1.

Os dispositivos MSP430 tem dois tipos de mquinas para comunicao serial: USART: Universal Synchronous/Asynchronous Receive/Transmit; USCI: Universal Serial Communication Interface; Cada uma destas mquinas pode ser configurada para operar em modos de transmisso distintos: UART: Universal Asynchronous Receive/Transmit; SPI: Synchronous Peripheral Interface; I2C: Inter-Integrated Circuit necessrio consultar o datasheet de cada dispositivo para saber exatamente qual mquina est presente no chip e quais as funcionalidades ativas. Para os dois dispositivos que temos presentes na Experimenter Board, tem-se as seguintes mquinas 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

Pgina 135

26.2.

O RS232 na Experimenter Board

Durante o nosso treinamento sero abordadas as mquinas USART e USCI do MSP430FG4618, ambas configuradas para modo UART, como veremos a seguir. Porm apenas a USCI tem conexo com o terminal DB9 da placa, como pode ser visto pelo diagrama eltrico acima. Pgina 136

26.3.

Breve introduo comunicao serial.

Pgina 137

Pgina 138

Pgina 139

26.4.

O padro de comunicao serial RS232 (EIA232). O que RS232

26.4.1.

RS uma abreviao de Recommended Standard. Ela relata uma padronizao de uma interface comum para comunicao de dados entre equipamentos, criada no incio dos anos 60, por um comit conhecido atualmente como Electronic Industries Association (EIA). Naquele tempo, a comunicao 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 atravs de linha telefnica, e conseqentemente necessitavam um modem em cada lado para fazer a decodificao dos sinais. Dessas idias nasceu o padro RS232. Ele especifica as tenses, temporizaes e funes dos sinais, um protocolo para troca de informaes, e as conexes mecnicas. A mais de 30 anos desde que essa padronizao foi desenvolvida, a EIA publicou trs modificaes. A mais recente, EIA232E, foi introduzida em 1991. Ao lado da mudana de nome de RS232 para EIA232, algumas linhas de sinais foram renomeadas e vrias linhas novas foram definidas.

26.4.2.

Definies 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 conexo (normalmente uma interface com a linha telefnica) denominado de DCE (Data Circuit-terminating Equipment usualmente um modem), tem um conector DB9 fmea, e utilizando os pinos mostrados na figura a seguir para sinais ou terra. Pgina 140

Um cabo de conexo entre dispositivos DTE e DCE contm ligaes em paralelo, no necessitando mudanas na conexo de pinos. Se todos os dispositivos seguissem essa norma, todos os cabos seriam idnticos, e no haveria chances de haver conexes incorretas.

Diversos sinais so necessrios para conexes onde o dispositivo DCE um modem, e eles so utilizados apenas quando o protocolo de software os emprega. Para dispositivos DCE que no so modem, ou quando dois dispositivos DTE so conectados diretamente, poucos sinais so necessrios. Os sinais de temporizao de transmisso e recepo so utilizados somente quando o protocolo de transmisso utilizado for sncrono. Para protocolos assncronos, padro 8 bits, os sinais de temporizao externos so desnecessrios. Os nomes dos sinais que implicam em uma direo, como Transmit Data e Receive Data, so nomeados do ponto de vista dos dispositivos DTE. Se a norma EIA232 for seguida a risca, estes sinais tero o mesmo nome e o mesmo nmero de pino do lado do DCE. Infelizmente, isto no feito na prtica pela maioria dos usurios, provavelmente porque em alguns casos torna-se difcil definir quem o DTE e quem o DCE. A figura a seguir apresenta a conveno utilizada para os sinais mais comuns.

Pgina 141

26.4.3.

Definies de sinais

As funes dos sinais da norma EIA232 podem ser subdivididos categorias, apresentados na tabela a seguir.

Pgina 142

26.4.4.

Caractersticas dos sinais

Todas as linhas, sejam elas de informaes de dados, temporizao ou controle, podem ser representadas pelo mesmo circuito eltrico equivalente da figura a seguir:

Este circuito equivalente aplica-se aos sinais originados tanto no DTE quanto no DCE. A capacitncia Co no especificada na norma, mas deve ser assumida como pequena e consistir apenas de elementos parasitas. Ro e Vo so escolhidos de forma tal que a corrente de curto-circuito no exceda a 500 mA. Sinais com tenso entre 3 volts e 25 volts com relao ao terra (pino 7) so considerados nvel lgico 1 (condio marca), e tenses entre +3 volts e +25 volts so considerados nvel lgico 0 (condio espao). A faixa de tenses entre 3 volts e +3 volts considerada uma regio de transio para o qual o estado do sinal indefinido.

Pgina 143

Quatro sinais foram implementados com segurana falhas (fail-safe design) no qual durante a desenergizao ou desconexo do cabo, seus sinais estaro desabilitados (nvel lgico 0). So eles: Sinal RTS desabilitado Sinal SRTS desabilitado Sinal DTR DTE no pronto Sinal DSR DCE no pronto

26.5.

Modo UART na mquina USCI.

Como foi abordado na breve introduo a comunicao serial, atravs da mquina USCI, configurada em modo UART, ser possvel conectar o MSP430 ao mundo externo atravs de dois pinos: UCA0RXD e UCA0TXD. Isto permitir a transmisso de dados em modo full duplex. Algumas das caractersticas que esto presentes neste modo so: Transmisso de 7 ou 8 bits de dados, com ou sem paridade; Registradores de TX e RX independentes; Buffers de TX e RX separados; Transmisso e recepo atravs de LSB-first; Possibilidade de transmisso de bit de endereamento; Detector de incio de recepo com possibilidade de acordar o dispositivo; Taxa de transmisso programvel; Indicador de erro de TX/RX; Capacidade de interrupo independente para TX e RX. Quando neste modo, a USCI transmite e recebe caracteres a uma determinada taxa de bits em modo assncrono, para outro dispositivo. O tempo que gasto para transmitir cada bit de dado baseado na freqncia de baud rate ajustada na USCI, e sempre a mesma para transmitir e receber informaes.

26.6.

Inicializando a USCI.

A mquina USCI resetada toda vez que ocorrer um PUC ou quando o bit USCWRST = 1. Aps a ocorrncia de um PUC, o bit USCWRST sempre levado para nvel lgico um, o que significa dizer que a USCI sempre comea a operar em condio de reset. necessrio passar este bit para nvel lgico zero para que a operao com a USCI seja liberada.

Pgina 144

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 aps estudar o que cada um destes sinais fazem na configurao da mquina, voc entender em que estado ela comea a trabalhar quando o chip resetado.

Pgina 145

26.7. Formato dos dados transmitidos e recebido pela UART da mquina USCI.

26.8.

Gerador de Baud Rate da USCI.

Dentro da mquina USCI tem-se um mdulo que tem a capacidade de gerar a base de tempo necessria para a transmisso de dados em modo assncrono. Lembre-se que os dispositivos que fazem comunicao assncrona necessitam que esta base de tempo seja a mais precisa possvel, 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 transmisso de dados. O mdulo gerador de Baud Rate do MSP430 na mquina USCI pode ser visto na figura a seguir.

Pgina 146

No MSP430 a temporizao para validar cada bit recebido mostrado na figura abaixo. A amostra de informao ocorre nos momentos N/2-1, N/2 e N/2+1 dos pulsos do BRCLK. N a relao entre o nmero de pulsos do BRCLK para cada BITCLK.

26.8.1.

Ajuste de Baud Rate da USCI

A fonte de clock selecionada atravs dos bits UCSSELx. Esta seleo indicar qual a velocidade presente na entrada BRCLK. Sabendo o valor da velocidade de BRCLK (fBRCLK), o valor da baud rate calculado atravs da expresso abaixo:

A mquina USCI pode trabalhar em dois modos de velocidade de baud rate: LOWFREQUENCY e OVERSAMPLING. A seleo de qual modo est ajustado na mquina 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 mquina. Fator N quando USOC16 = 0 LOW FREQUENCY; A parte inteira de N ser calculada por:

A parte fracionria de N ser calculada por:

Pgina 147

Fator N quandoUSOC16 = 1 OVERSAMPLING; A parte inteira de N ser calculada por:

A parte fracionria de N ser calculada por:

26.8.2.

Temporizao dos bits de recepo

A temporizao na recepo tem duas fontes de erro. A primeira o tempo de bit a bit, como acontece na transmisso. A segunda o erro entre uma borda de incio de recepo ocorrer e o tempo necessrio para que a mquina entenda que isto aconteceu e comece a processar os dados de entrada. Estes dois erros podem ser melhor visualizados atravs do mapa de tempos mostrados na figura a seguir.

A temporizao ideal para incio do start bit a metade da temporizao de baud rate, porque cada bit sempre testado na metade deste perodo. Assim, a temporizao ideal para todos os bits restantes deve seguir a mesma lgica.

Pgina 148

26.8.3. Taxas tpicas de transmisso e recepo respectivos erros na mquina USCI no modo UART
USOC16 = 0 LOW FREQUENCY;

seus

Pgina 149

USOC16 = 1 OVERSAMPLING;

Pgina 150

26.9.

Interrupes da USCI no modo UART.

A USCI possui vetores de interrupo separados para TX e RX. Isto permite que os dois tipos de interrupo ocorram separadamente.

26.9.1.

Interrupo numa operao de TX

A flag de interrupo de transmisso UCAxTXIFG setada pelo transmissor para indicar que o buffer UCAxTXBUF est pronto para aceitar mais um caractere a ser transmitido. Para que isto ocorra necessrio que os bits GIE e UCAxTXIE estejam em nvel lgico 1. A flag de interrupo automaticamente apagada quando o programa entra na rotina de tratamento de interrupo ou quando um novo caractere gravado no registrador UCAxTXBUF. UCAxTXIFG setada aps um PUC ou quando UCSWRST = 1. UCAxTXIE resetado aps um PUC ou quando UCSWRST = 1.

26.9.2.

Interrupo numa operao de RX

A flag de interrupo de recepo UCAxRXIFG setada pelo receptor quando um caractere recebido e gravado com sucesso no buffer UCAxRXBUF. Para que isto ocorra necessrio que os bits GIE e UCAxRXIE estejam em nvel lgico 1. A flag de interrupo automaticamente apagada quando o programa entra na rotina de tratamento de interrupo ou quando o registrador UCAxRXBUF lido. UCAxRXIFG e UCAxRXIE so automaticamente resetadas aps um PUC ou quando UCSWRST = 1.

26.10. Os principais registradores de controle da USCI.

Pgina 151

Pgina 152

Pgina 153

Pgina 154

Pgina 155

26.11. Dois cdigos de exemplo de configurao 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; FLL_CTL0 |= XCAP14PF; do { IFG1 &= ~OFIFG; for (i = 0x47FF; i > 0; i--); } while ((IFG1 & OFIFG)); P4SEL |= 0x0C0; UCA0CTL1 |= UCSSEL_1; UCA0BR0 = 0x03; UCA0BR1 = 0x00; UCA0MCTL = 0x06; UCA0CTL1 &= ~UCSWRST; IE2 |= UCA0RXIE; _BIS_SR(LPM0_bits + GIE); } // 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 } // Stop WDT // Configure load caps

// Clear OSCFault flag // Time for flag to set // OSCFault flag still set? // // // // // // // P4.7,6 = USCI_A0 RXD/TXD CLK = ACLK 32k/9600 - 3.41 Modulation **Initialize USCI state machine** Enable USCI_A0 RX interrupt

// Enter LPM0, interrupts enabled

Pgina 156

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; FLL_CTL0 |= XCAP14PF; do { IFG1 &= ~OFIFG; for (i = 0x47FF; i > 0; i--); } while ((IFG1 & OFIFG)); P4SEL |= 0x0C0; UCA0CTL1 |= UCSSEL_2; UCA0BR0 = 0x09; UCA0BR1 = 0x00; UCA0MCTL = 0x02; UCA0CTL1 &= ~UCSWRST; IE2 |= UCA0RXIE; __bis_SR_register(LPM3_bits + GIE); } // 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 } // Stop WDT // Configure load caps

// Clear OSCFault flag // Time for flag to set // OSCFault flag still set? // // // // // // // P4.7,6 = USCI_A0 RXD/TXD SMCLK 1MHz 115200 1MHz 115200 Modulation **Initialize USCI state machine** Enable USCI_A0 RX interrupt

// Enter LPM4, interrupts enabled

Pgina 157

26.12. Modo UART na mquina USART.


Como foi abordado na breve introduo a comunicao serial, atravs da mquina USART, configurada em modo UART, ser possvel conectar o MSP430 ao mundo externo atravs de dois pinos: URXD e UTXD. Isto permitir a transmisso de dados em modo full duplex. Algumas das caractersticas que esto presentes neste modo so: Transmisso de 7 ou 8 bits de dados, com ou sem paridade; Registradores de TX e RX independentes; Buffers de TX e RX separados; Transmisso e recepo atravs de LSB-first; Possibilidade de transmisso de bit de endereamento; Detector de incio de recepo com possibilidade de acordar o dispositivo; Taxa de transmisso programvel; Indicador de erro de TX/RX; Capacidade de interrupo independente para TX e RX. Quando neste modo, a USART transmite e recebe caracteres a uma determinada taxa de bits em modo assncrono, para outro dispositivo. O tempo que gasto para transmitir cada bit de dado baseado na freqncia de baud rate ajustada na USART, e sempre a mesma para transmitir e receber informaes.

26.13. Inicializando a USART.


A mquina USART resetada toda vez que ocorrer um PUC ou quando o bit SWRST = 1. Aps a ocorrncia de um PUC, o bit SWRST sempre levado para nvel lgico um, o que significa dizer que a USART sempre comea a operar em condio de reset. necessrio passar este bit para nvel lgico zero para que a operao 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 no so alteradas. importante ter isto em mente, pois aps estudar o que cada um destes sinais fazem na configurao da mquina, voc entender em que estado ela comea a trabalhar quando o chip resetado.

Pgina 158

26.14. Formato dos dados transmitidos e recebido pela USART.

Pgina 159

26.15. Gerador de Baud Rate da USART.


Dentro da mquina USART tem-se um mdulo que tem a capacidade de gerar a base de tempo necessria para a transmisso de dados em modo assncrono. Lembre-se que os dispositivos que fazem comunicao assncrona necessitam que esta base de tempo seja a mais precisa possvel, 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 transmisso de dados. O mdulo gerador de Baud Rate do MSP430 pode ser visto na figura a seguir.

Pgina 160

No MSP430 a temporizao para validar cada bit recebido mostrado na figura abaixo. A amostra de informao ocorre nos momentos N/2-1, N/2 e N/2+1 dos pulsos do BRCLK. N a relao entre o nmero de pulsos do BRCLK para cada BITCLK.

26.15.1.

Tempo de Bit do Gerador de Baud Rate

O primeiro estgio do gerador de Baud Rate o contador/comparador de 16 bits. No incio de cada transmisso ou recepo, 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 transmisso/recepo de cada bit. Isto Isto resultar o perodo 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 diviso N, como pode ser visto na equao abaixo.

claro que matematicamente podemos escrever tambm que:

Pgina 161

Lembre-se que o resultado da diviso que gera o valor de N pode resultar em um valor no inteiro, um valor decimal. A parte inteira deste valor pode ser aproveitada pelo divisor (prescaler). O segundo estgio do gerador de Baud Rate o modulador. Ele utilizado para encontrar a parte fracionria de N mais prxima possvel do valor real obtido durante a operao de diviso. Assim, a definio do fator N :

Onde: N: fator de diviso 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: nmero total de bits transmitidos ou recebidos em um caractere; mi: dado carregado em cada bit (0 ou 1).

Assim, com as informaes anteriores, podemos chegar a seguinte expresso:

O valor de BICLK pode ser ajustado para cada bit com o auxlio do modulador, para encontrar o tempo necessrio quando um valor de N no inteiro obtido. A temporizao 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 prximo bit no registrador de controle do modulador determina qual a temporizao daquele bit. Levar o bit set modulation para nvel lgico 1 incrementar o fator de diviso fornecido por UxBR. O tempo necessrio para a existncia de um start bit determinada pelo valor de UxBR vezes m0, o prximo bit determinado por UxBR vezes m1, e assim por diante, at que todos os bits tenham sido transmitidos. A modulao sempre inicia pelo LSB. Caso o caractere a ser transmitido seja maior que os 8 bits do padro de transmisso, o modulador ir reiniciar a sequncia com o valor de m0 e continuar at que todos os bits tenham sido processados.

Pgina 162

26.15.2.

Determinando o valor da Modulao

Determinar o valor da modulao um processo interativo. Utilizando a frmula de erro mostrada no prximo item deste captulo inicia-se pelo primeiro bit, calculando o erro individual de cada bit, para os ajustes do bit de modulao em 0 e em 1. Em um dos dois casos ser obtido o menor valor de erro. Este ser o valor ajustado para o prximo 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 possvel.

26.15.3.

Temporizao dos bits de transmisso

A temporizao necessria para transmisso de um caractere deve ser o resultado da soma dos tempos de transmisso 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 atravs da seguinte expresso:

Onde: Baud Rate: velocidade de transmisso desejada; BRCLK: valor da freqncia 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 so os valores de erro transmisso para cada bit nas seguintes condies: 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. Pgina 163

Fazendo os clculos:

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

26.15.4.

Temporizao dos bits de recepo

A temporizao na recepo tem duas fontes de erro. A primeira o tempo de bit a bit, como acontece na transmisso. A segunda o erro entre uma borda de incio de recepo ocorrer e o tempo necessrio para que a mquina entenda que isto aconteceu e comece a processar os dados de entrada. Estes dois erros podem ser melhor visualizados atravs do mapa de tempos mostrados na figura a seguir.

Pgina 164

A temporizao ideal para incio do start bit a metade da temporizao de baud rate, porque cada bit sempre testado na metade deste perodo. Assim, a temporizao ideal para todos os bits restantes deve seguir a mesma lgica. O erro obtido durante este ajuste pode ser obtido atravs da equao abaixo:

Onde: Baud Rate: velocidade de recepo desejada; BRCLK: valor da freqncia 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 clculo para o mesmo exemplo utilizado na transmisso, mas agora ajsutando a mquina para a recepo: 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. Pgina 165

Bit a bit:

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

26.15.5.

Taxas tpicas de transmisso e seus respectivos erros

A tabela mostrada a seguir foi calculada para um sistema com ACLK de 32768 Hz e SMCLK de 1048756 Hz.

Pgina 166

26.16. Interrupes da USART.


A USART possui vetores de interrupo separados para TX e RX. Isto permite que os dois tipos de interrupo ocorram separadamente.

26.16.1.

Interrupo numa operao de TX

A flag de interrupo de transmisso UTXIFGx setada pelo transmissor para indicar que o buffer UxTXBUF est pronto para aceitar mais um caractere a ser transmitido. Para que isto ocorra necessrio que os bits GIE e UTXIEx estejam em nvel lgico 1. A flag de interrupo automaticamente apagada quando o programa entra na rotina de tratamento de interrupo ou quando um novo caractere gravado no registrador UxTXBUF. UTXIFGx setada aps um PUC ou quando SWRST = 1. UTXIEx resetado aps um PUC ou quando SWRST = 1. O hardware que garante a ocorrncia destas condies mostrado na figura abaixo.

Pgina 167

26.16.2.

Interrupo numa operao de RX

A flag de interrupo de recepo URXIFGx setada pelo receptor quando um caractere recebido e gravado com sucesso no buffer UxRXBUF. Para que isto ocorra necessrio que os bits GIE e URXIEx estejam em nvel lgico 1. A flag de interrupo automaticamente apagada quando o programa entra na rotina de tratamento de interrupo ou quando o registrador UxRXBUF lido. URXIFGx e URXIEx so automaticamente resetadas aps um PUC ou quando SWRST = 1. aps um PUC ou quando SWRST = 1. O hardware que garante a ocorrncia destas condies mostrado na figura abaixo.

26.17. Os principais registradores de controle da USART.

Pgina 168

Pgina 169

Pgina 170

26.18. Dois cdigos de exemplo de configurao 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; P4SEL |= 0x03; FLL_CTL0 |= XCAP14PF; do { IFG1 &= ~OFIFG; for (i = 0x47FF; i > 0; i--); } while ((IFG1 & OFIFG)); ME2 |= UTXE1 + URXE1; U1CTL |= CHAR; U1TCTL |= SSEL1 + SSEL0 + URXSE; U1BR0 = 0x36; U1BR1 = 0x00; U1MCTL = 0x6B; U1CTL &= ~SWRST; IE2 |= URXIE1; // Stop WDT // P4.1,0 = USART1 TXD/RXD // Configure load caps

// Clear OSCFault flag // Time for flag to set // OSCFault flag still set? // // // // // // // // Enable USART1 TXD/RXD 8-bit character UCLK = SMCLK, start edge detect 1MHz 19200 1MHz 19200 1MHz 19200 modulation Initialize USART state machine Enable USART1 RX interrupt

Pgina 171

for (;;) { while (!(U1TCTL & TXEPT)); _DINT(); _NOP(); if (!(U1TCTL & SSEL0)) _BIS_SR(LPM0_bits + GIE); else _BIS_SR(LPM3_bits + GIE); } } #pragma vector=USART1RX_VECTOR __interrupt void usart1_rx (void) { if ((IFG2 & URXIFG1)) { while (!(IFG2 & UTXIFG1)); U1TXBUF = U1RXBUF; _BIC_SR_IRQ(LPM3_bits); U1TCTL |= SSEL0; } else { U1TCTL &= ~URXSE; U1TCTL |= URXSE; _BIC_SR_IRQ(SCG1 + SCG0); U1TCTL &= ~SSEL0; } }

// Confirm no TXing before --> LPM3 // Disable interrupts for flag test

// RX'ing char, LPM, int's active // Enter LPM3, int's active

// Test URXIFG0 // // // // USART1 TX buffer ready? RXBUF0 to TXBUF0 Exit LPM3 after reti SSEL0 = 1, no RX activity

// Start edge // // // // Clear URXS signal Re-enable edge detect DCO reamins on after reti 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; FLL_CTL0 |= XCAP14PF; P4SEL |= 0x03; do { IFG1 &= ~OFIFG; for (i = 0x47FF; i > 0; i--); } while ((IFG1 & OFIFG)); // Stop WDT // Configure load caps // P4.1,0 = USART1 TXD/RXD

// Clear OSCFault flag // Time for flag to set // OSCFault flag still set?

Pgina 172

ME2 |= UTXE1 + URXE1; U1CTL |= CHAR; U1TCTL |= SSEL1; U1BR0 = 0x09; U1BR1 = 0x00; U1MCTL = 0x08; U1CTL &= ~SWRST; IE2 |= URXIE1; _BIS_SR(LPM0_bits + GIE); } #pragma vector=USART1RX_VECTOR __interrupt void USART1_rx (void) { while (!(IFG2 & UTXIFG1)); TXBUF1 = RXBUF1; }

// // // // // // // //

Enable USART1 TXD/RXD 8-bit character UCLK= ACLK 1MHz 115200 1MHz 115200 1MHz 115200 modulation Initialize USART state machine Enable USART1 RX interrupt

// Enter LPM0 w/ interrupt

// USART1 TX buffer ready? // RXBUF1 to TXBUF1

27.

EXERCCIOS: Comunicao da EXPBoard via USCI Modo UART. EXERCCIO-18

27.1.

Aproveitando os exemplos EXEMPLO-35 e EXEMPLO-36 escreva um programa que faa um eco (repetio) o que digitado atravs 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 conexo com a Experimenter Board.

27.2.

EXERCCIO-19

Escreva um programa que faa uma calculadora bsica, que trabalhe com as quatro operaes matemticas elementares: soma, subtrao, multiplicao e diviso. Ao ligar a Experimenter Board, conect-la ao Hiperterminal do Windows, deve aparecer a seguinte mensagem: DIGITE O PRIMEIRO NMERO: O usurio, atravs 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 NMERO: O usurio, atravs 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 OPERAO A SER REALIZADA:

Pgina 173

O usurio, atravs do teclado do computador, digita uma das quatro operaes possveis ( +, -, * ou /) e tecla ENTER. Este valor deve ser transmitido via porta serial ao MSP430, que responde no Hiperterminal com o resultado do clculo: O RESULTADO : XXXXXX Onde XXXXX o resultado do clculo. Finalmente o programa deve retornar ao incio, solicitando novamente a entrada do primeiro nmero. O programa deve ficar o maior tempo possvel em LPM e sair apenas para interagir com o usurio, realizar os clculos e apresentar os resultados.

Pgina 174

You might also like