Buscar

APOSTILA MSP430 - C - PARTE IV - COMUNICAÇÃO SERIAL

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 40 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 40 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 40 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

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 
 
 
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. 
 
Página 137 
 
26.3. Breve introdução à comunicação serial. 
 
 
 
 
 
Página 138 
 
 
 
 
 
Página 139 
 
 
 
 
 
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. 
 
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. 
 
 
 
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. 
 
 
 
 
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. 
 
 
 
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 aoperação com a USCI seja liberada. 
 
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. 
 
 
 
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. 
 
 
 
 
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: 
 
 
 
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. 
 
 
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; 
 
 
 
Página 150 
 
 
• USOC16 = 1 Æ OVERSAMPLING; 
 
 
 
 
 
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. 
 
 
 
Página 152 
 
 
 
 
Página 153 
 
 
 
 
Página 154 
 
 
 
 
Página 155 
 
 
 
 
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 
} 
 
 
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 = defaultDCO = 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 
} 
 
 
 
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. 
 
Página 159 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
26.14. Formato dos dados transmitidos e recebido pela USART. 
 
 
 
 
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. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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: 
 
 
 
 
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. 
 
 
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 umdos 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. 
 
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. 
 
 
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. 
 
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. 
 
 
 
 
 
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. 
 
 
 
 
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. 
 
 
 
Página 169 
 
 
 
Página 170 
 
 
 
 
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 
 
 
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? 
 
 
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: 
 
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.

Outros materiais

Outros materiais