USART Problem beim ATMEGA644P

Christoph K. schrieb:
> ich verwende beide usart schnittstellen des controllers
>
> sobald ich die globalen interrupts im main file freigebe resetet sich
> der controller
>
> was zum henker mache ich falsch?

Zeile 42 in deinem Programm ist falsch...
OP
habe den code abgegrenzt, der fehler scheint hier zu liegen:


  //Serielle Schnittstelle 0

    //Enable TXEN im Register UCR TX-Data Enable

  UCR =(1 << TXEN | 1 << RXEN | 1<< RXCIE);

  // 0 = Parity Mode Disabled

  // 1 = Parity Mode Enabled, Even Parity

  // 2 = Parity Mode Enabled, Odd Parity

  //UCSRC = 0x06 + ((parity+1)<<4);

  //UCSRC |= (1<<USBS);

  //Teiler wird gesetzt

  UBRR=(F_CPU / (baudrate * 16L) - 1);

  usart_status.usart_disable = 0;


  #if USART1
  //Serielle Schnittstelle 1

    //Enable TXEN im Register UCR TX-Data Enable

  UCR1 =(1 << TXEN1 | 1 << RXEN1 | 1<< RXCIE1);

  // 0 = Parity Mode Disabled

  // 1 = Parity Mode Enabled, Even Parity

  // 2 = Parity Mode Enabled, Odd Parity

  //UCSRC = 0x06 + ((parity+1)<<4);

  //UCSRC |= (1<<USBS);

  //Teiler wird gesetzt

  UBRR1 =(F_CPU / (baudrate * 16L) - 1);
  #endif
Christoph K. schrieb:
> nachdem ich die usart initialisiert habe resettet der controller von
> sich aus

ich zitiere mich mal selbst:

> Und damit soll jemand was anfangen können?

Solange du keinen vollständigen Code postest, wird dir niemand helfen 
können und auch nicht wollen. Meine Glaskugel vermutet, dass Oliver 
recht hat, aber die arbeitet nicht wirklich zuverlässig...
Gast
>   //Enable TXEN im Register UCR TX-Data Enable

>  UCR =(1 << TXEN | 1 << RXEN | 1<< RXCIE);

Kommentare sind häufig Unsinn, wie man hier mal wieder deutlich gezeigt 
bekommt. Du gibst nicht nur TXEN frei, sondern auch alle anderen 
Interrupts der UART. Und ich wette, daß es dazu keine passenden ISR's 
gibt.

Oliver
Gast
Hi

> Du gibst nicht nur TXEN frei, sondern auch alle anderen
>Interrupts der UART. Und ich wette, daß es dazu keine passenden ISR's
>gibt.

Nein. TXEN und RXEN geben lediglich Sender und Empfänger frei. Keine 
Interrupts. Das macht lediglich RXCIE.

MfG Spess
Gast
Ja, lern etwas über die Prozessorregister und schau' Dir das Datenblatt 
an.

Das hat Dir doch Justus bereits geschrieben: es gibt kein UCR oder UCR1 
Register, außer Du hast selbst eines definiert.

Das zuständige Register dafür wäre das UCSRnB. Und dann noch dafür 
sorgen, daß es für das RXCIE auch eine passende ISR gibt.

Und benutz ab und zu die Shifttaste...

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 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.