USART bei XMEGA-A1

Gast #2500032
Hallo
ich benutze volgende funktionen:
#define USARTF1_BSEL   1605
#define USARTF1_SCALE  0b1101  // -7

void USART_F1_Init(void)
{
  char data;

  // configuration of portpins
  PORTF.DIRCLR = 1<<PIN6;  // Pin6 input (RXD1)

  PORTF.OUTSET = 1<<PIN7;
  PORTF.DIRSET = 1<<PIN7;  // Pin7 output high (TXD1)

  // USARTF1, 8 Data bits, No Parity, 1 Stop bit.

  USARTF1.CTRLC = USART_CHSIZE_8BIT_gc | USART_PMODE_DISABLED_gc;
  USARTF1.CTRLA = 0;
  USARTF1.BAUDCTRLA = 0x33;
  USARTF1_BAUDCTRLB = 0x00;
  USARTF1.CTRLB = USART_RXEN_bm | USART_TXEN_bm; // enable receiver and 
transmitter
  data = (char)(USARTF1.DATA);    // Flush buffer

}


void USART_F1_Send(uint8_t data)
{

  while ((USARTF1.STATUS & USART_DREIF_bm) == 0) {};

  USARTF1.DATA = data;

}




char USART_F1_Receive(void)
{

  while ((USARTF1.STATUS & USART_RXCIF_bm) == 0) {};

  return USARTF1.DATA;

}

aber aus unbekanten gründen empfange ich nix!!

Kann mir bitte jemand helfen???

Gruss
Milan
#2500140
Schau Dir mal Deine und meine Initialisierung (im o.a. Beitrag) an. Du 
definierst zwar am Anfang Werte mit #define, verwendest sie aber später 
nicht. Die einzustellende Baudrate ist auch abhängig vom eingestellten 
CPU-Takt. Hast Du das berücksichtigt? Aus Deinem Code-Auszug geht das 
nicht hervor.

Carsten
Gast #2500719
Hallo zusammen,
gefunden.
es war die Baudrate!!
So sieht es jetzt aus:
#define USARTF1_BSEL   207
#define USARTF1_SCALE  0

void USART_F1_Init(void)
{
  char data;

  // configuration of portpins
  PORTF.DIRCLR = 1<<PIN6;  // Pin6 input (RXD1)

  PORTF.OUTSET = 1<<PIN7;
  PORTF.DIRSET = 1<<PIN7;  // Pin7 output high (TXD1)

  // USARTF1, 8 Data bits, No Parity, 1 Stop bit.

  USARTF1.CTRLC = USART_CHSIZE_8BIT_gc | USART_PMODE_DISABLED_gc;
  USARTF1.CTRLA = 0;
  USARTF1.BAUDCTRLA = (uint8_t)(USARTF1_BSEL);   // BSEL
  USARTF1_BAUDCTRLB = (USARTF1_SCALE<<4) | (uint8_t)(USARTF1_BSEL>>8); 
// SCALE, BSEL
  USARTF1.CTRLB = USART_RXEN_bm | USART_TXEN_bm; // enable receiver and

  data = USARTF1.DATA;    // Flush buffer
}


Besten dank für Eure hilfe.
Gruss
Milan
Gast #2500731
Hallo nochmahls,
das habe ich geendert:
   USARTF1.CTRLA = USART_RXCINTLVL_HI_gc; // enable Empfangsinterrupt 
(auf HI Level)


  PMIC.CTRL |= PMIC_HILVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_LOLVLEN_bm; 
//Interrupts (high-, medium- und lowlevel freigeben)


  sei(); // allegemeine interruptfreigabe

//--------------------------------------------------------------
und das habe ich hinzugefügt:

char rxbuffer[150]; /* Puffer für Empfang */
int rxpos = 0;     /* Zeiger auf nächstes Zeichen im Puffer */
bool rxvalid = 0;  /* 1= String vollständig */


ISR(USARTF1_RXC_vect)//Empfangen mit Interrupt
{
  int c=0;
  c = USARTF1.DATA;
  if (c=='\r')
  {
    c = 0x00;
    rxvalid = 1;
    rxbuffer[rxpos] = c;
    rxpos = 0;
  }
  if (c=='\n') {
    /* Windows Kompatibilität:
       c Verwerfen. */
  }
  else {
    /* Zeichen speichern */
    rxbuffer[rxpos++] = c;
  }

}
wenn ich rxbuffer am display ausgeben will kommt nichts.
kann mir jemand sagen warum???

oder muss ich die funktion ISR im main aufrufen???

Danke im voraus.
Gruss
Milan

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.