duvidas PRINTF + IAR + MSP430

Software e Hardware para uC Texas

Moderadores: andre_luis, 51

duvidas PRINTF + IAR + MSP430

Mensagempor FFambrini » 22 Nov 2009 14:11

PrezadoS COLEGAS,

Estou tentando utilizar a usart no MSP430 F5418 usando o comando PRINTF (compilador IAR, DCO default em 1,045 MHz) sem sucesso.

Já testei a comunicação serial usando o seguinte exemplo (esse funciona bem):

//-----------------------------------------------------------------------------------------------------------------------
#include "msp430x54x.h"

void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT

P3SEL = 0x30; // P3.4,5 = USCI_A0 TXD/RXD
UCA0CTL1 |= UCSWRST; // **Put state machine in reset**
UCA0CTL1 |= UCSSEL_2; // SMCLK
UCA0BR0 = 9; // 1MHz 115200 (see User's Guide)
UCA0BR1 = 0; // 1MHz 115200
UCA0MCTL |= UCBRS_1 + UCBRF_0; // Modulation UCBRSx=1, UCBRFx=0
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
UCA0IE |= UCRXIE; // Enable USCI_A0 RX interrupt

__bis_SR_register(LPM0_bits + GIE); // Enter LPM0, interrupts enabled
__no_operation(); // For debugger
}

// Echo back RXed character, confirm TX buffer is ready first
#pragma vector=USCI_A0_VECTOR
__interrupt void USCI_A0_ISR(void)
{
switch(__even_in_range(UCA0IV,4))
{
case 0:break; // Vector 0 - no interrupt
case 2: // Vector 2 - RXIFG
while (!(UCA0IFG&UCTXIFG)); // USCI_A0 TX buffer ready?
UCA0TXBUF = UCA0RXBUF; // TX -> RXed character
break;
case 4:break; // Vector 4 - TXIFG
default: break;
}
}
//----------------------------------------------------------------------------------


Porém, esse outro aqui não funciona de jeito nenhum:


//------------------------------------------------------------------------------
#include "msp430x54x.h"
#include "intrinsics.h"
#include "stdio.h"
//-------------------------------------------------
void atraso (unsigned long tempo) {
volatile unsigned long i;
// Gera Delays por software
i = tempo;
do i-- ;
while (i !=0);
}//atraso

//---------------------------------------------
void main(void)
{
WDTCTL = WDTPW + WDTHOLD;
P3SEL = 0x30; // P3.4,5 = USCI_A0 TXD/RXD

while(1) {
printf ("Teste");
atraso(10000);
}
}
//---------------------------------------------------------------------------------

Pergunto: POR QUE O SEGUNDO EXEMPLO NÃO FUNCIONA ? (uma vez que está escrito em C padrão ANSI ?)
Nada aparece no hyperteminal...

Outra dúvida: Como configurar a USART no caso do segundo exemplo ? Como eu determino a velcoidade de comunicação em 9600 bps ou em 115200 bps ???

Muito obrigado pela ajuda !
FFambrini
 
Mensagens: 3
Registrado em: 10 Abr 2009 23:50

Voltar para Texas

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x