2016-05-08 4 views
0

Ich bin neu in Embedded-Systeme entwickelt auch in Atmel Studio Environment, Ich benutze Atxmega128a1 mit 32 MHz System Clk. Ich versuche, einige Zeichen an den PC RS232-Modul bei jedem Timer-Interrupt-Überlauf (0.05s), zu senden, so habe ich definiert (tc) Timer, USART Treiber auf ASF und schrieb den untenstehenden Code in main.c-Datei, schließlich Ich habe es fehlerfrei getestet, aber es ist mir nicht gelungen, etwas über den seriellen Port zu übertragen. Jeder kann mir helfen oder mir Ratschläge geben.Atmel Studio mit Xmega Timer/USART

#include <asf.h> 

    volatile int flag=0; 
    uint8_t received_byte; 
    uint8_t tx_buf[] = "\n\rHello AVR world ! : "; 
    uint8_t tx_length = 22; 
    uint8_t i; 

    static void my_callback(void) 
    { 

     flag =1; 
    } 

    int main (void) 
    { 
/* Insert system clock initialization code here (sysclk_init()). */ 

    board_init(); 
    sysclk_init(); 
    static usart_rs232_options_t USART_SERIAL_OPTIONS = { 
      .baudrate = 9600, 
      .charlength = 8, 
      .paritytype = USART_PMODE_DISABLED_gc, 
      .stopbits = false 
    }; 
    usart_init_rs232(& USARTF0, &USART_SERIAL_OPTIONS); 


//usart_set_baudrate_precalculated(& USARTF0,0x00017700,0x01E84800); 

/* Insert application code here, after the board has been initialized. */ 
    if (flag==1) 
    { 

    //received_byte = usart_getchar(& USARTF0); 
    //if (received_byte == '\r') { 
      for (i = 0; i < tx_length; i++) 
      { 
      usart_putchar(& USARTF0, tx_buf[i]); 
      } 
    } 
     else 
     usart_putchar(& USARTF0, received_byte); 
      flag=0; 
    } 

Antwort

0

Ich glaube, Sie sind die Initialisierung des zugehörigen Systemtaktmodul fehlt:

sysclk_enable_module(SYSCLK_PORT_F, PR_USART0_bm); 
+0

danke Rev1 das Problem in definning den TX-Pin auf Port F als Ausgangs war: PORTF.DIRSET = PIN3_bm ; –

+0

@mahermansour: Ach ja, das ist ein weiterer Fallstrick. –

Verwandte Themen