UART lesen Xmega

Gast #1000141
Lesenswert?
• ▲
▼
Mit diesem Code kann ich Daten vom Xmega an meinem PC schicken. Aber 
leider empfängt er nichts??


volatile uint16_t receivedData;

void USART_Receive(void)
{
    /* Receive one char. */
    /* Wait until data received or a timeout.*/
    while ( !( USARTC0.STATUS & USART_RXCIF_bm) );
    receivedData = USARTC0.DATA;
}


void USART_Transmit(unsigned char data)
{
   /* Wait for empty transmit buffer */
   //while ( !( UCSR0A & (1<<UDRE0)) )
   while ( !( USARTC0.STATUS & USART_DREIF_bm) )
      ;
   /* Put data into buffer, sends the data */
   USARTC0.DATA = data;
   //UDR0 = data;
}


void USART_Init(unsigned int bsel)
//void USART_Init(unsigned int ubrr)
{
   /* Set baud rate */
   USARTC0.BAUDCTRLB = (unsigned char)(bsel>>8);

   USARTC0.BAUDCTRLA = (unsigned char)bsel;
   //UBRR0H = (unsigned char)(ubrr>>8);
   //UBRR0L = (unsigned char)ubrr;

   /* Set frame format: 8data, 1 stop bit */
  USARTC0.CTRLC = (USARTC0.CTRLC & ~USART_CHSIZE_gm) | 
USART_CHSIZE_8BIT_gc;
   //UCSR0C = (3<<UCSZ00);

   /* Enable receiver and transmitter */
   USARTC0.CTRLB = (USART_RXEN_bm | USART_TXEN_bm);
    //UCSR0B = (1<<RXEN0)|(1<<TXEN0);
}


int main(void)
{
PORTC.DIR |= 0x08;
USART_Init(0x0C);
while(1)
    {
    USART_Receive();
    USART_Transmit(receivedData);
    }
return 0;
}
(Firma: TravelRec.) Persönliche Seite #1002146
Lesenswert?
• ▲
▼
Immer ruhig Blut. Als Firma kann man Samples ordern, wenn man so fair 
ist, die Steine später auch zu verwenden. Als Privatperson kannst Du 
welche erschleichen (pfui!) oder auf die Markteinführung warten 
(besser). Und ich unterstelle mal, daß es bei Dir nicht sooo dringend 
sein kann. Bedenke: für die Umarbeitung vom gewöhnten AVR-Stoff hin zum 
XMega wirst Du auch ein gutes Stück Zeit brauchen. Zum Weihnachten in 
diesem Jahr wird´s also noch nichts.
Gast #1003805
Lesenswert?
• ▲
▼
Ich habe so ein gefühl das hier etwas nicht stimmt:

void USART_Receive(void)
{
    /* Receive one char. */
    /* Wait until data received or a timeout.*/
    while ( !( USARTC0.STATUS & USART_RXCIF_bm) );
    receivedData = USARTC0.DATA;
}

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.