Forum: Compiler & IDEs USART Problem beim ATMEGA644P


von Christoph K. (klemze)


Lesenswert?

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?

von Stefan E. (sternst)


Lesenswert?

Christoph K. schrieb:

> was zum henker mache ich falsch?

Den Code nicht zu posten.

von Justus S. (jussa)


Lesenswert?

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...

von Oliver (Gast)


Lesenswert?

>Zeile 42 in deinem Programm ist falsch...

und in dieser Zeile gibst du einen Interrupt frei, für den es keine ISR 
gibt.

Oliver

von Christoph K. (klemze)


Lesenswert?

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

von Justus S. (jussa)


Lesenswert?

Christoph K. schrieb:
> habe den code abgegrenzt, der fehler scheint hier zu liegen:
>
> ...

Und damit soll jemand was anfangen können?

von Christoph K. (klemze)


Lesenswert?

nachdem ich die usart initialisiert habe resettet der controller von 
sich aus

von Karl H. (kbuchegg)


Lesenswert?

Hast du Interrupt Handler für beide USART?

von Justus S. (jussa)


Lesenswert?

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...

von Oliver (Gast)


Lesenswert?

>   //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

von Justus S. (jussa)


Lesenswert?

Oliver schrieb:
>>   //Enable TXEN im Register UCR TX-Data Enable
>
>>  UCR =(1 << TXEN | 1 << RXEN | 1<< RXCIE);
>

 Komisch, in meinem Datenblatt zum Mega644p gibt erst gar kein 
UCR-Register...

von spess53 (Gast)


Lesenswert?

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

von Christoph K. (klemze)


Lesenswert?

hat irgendwer einen lösungsansatz?

von MWS (Gast)


Lesenswert?

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...

von Oliver (Gast)


Lesenswert?

>hat irgendwer einen lösungsansatz?

Wie wäre es damit, die bisher gegeben Antworten mal zu lesen?

Oliver

von Peter D. (peda)


Lesenswert?

Hier ein Beispiel für alle AVRs:

Beitrag "AVR-GCC: UART mit FIFO"


So schlimm ist das garnicht, ein paar Defines und gut is.

Ganz stur nach der Methode entwickelt: anderen AVR-Typ auswählen und 
dann die Fehlermeldung ansehen und dann im Datenblatt, wie das Register, 
Bit oder ISR dort heißt.


Peter

von Christoph K. (klemze)


Lesenswert?

hab den fehler gefunden

UCR war falsch definiert

danke für die hilfe

nur das nechste mal bitte etwas freundlicher....

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.