Problem mit M64 Uart1 RXC-Interrupt

Gast #76619
Hallo,
ich programmiere momentan an einem Mega64 und will eine
Interrupt-gesteuerte Empfängerroutine benutzten, hier die Routine für
uart0:

Initialisierung:
 UCSR0B  = 0x00;
 UBRR0L = 0x40;
 UCSR0B  = 0x98;
Interrupt service Routine:
#pragma interrupt_handler uart0_rx_isr:iv_USART0_RXC
void uart0_rx_isr(void)
{ if (rec_num<127)
  { rec_field[rec_num]=UDR0;
    rec_num++;
  }
  if (rec_field[0]!=0x2a) rec_num=0;
}

Funktioniert alles bestens, nun das Problem: ich brauche eine 2.
serielle Schnittstelle und benutze selbige Routine (nur UDR1 statt UDR0
usw.), Ergebnis: die Routine empfängt das erste Zeichen korrekt,
scheint dann aber immer wieder neu angesprungen zu werden, ohne dass
neue Zeichen gesendet und damit empfangen würden -> der Zähler rec_num
ist in NullKommaNix auf 127 und im Buffer rec_field nur Müll.

Hat jemand eine Idee, was hier passiert? Ich habe mir angesehen, was
der C-Compiler (Imagecraft ICCAVR) daraus macht:

UDR1 wird via  LDS  R2,0x9C
und UDR0 via   IN   R2,0x0C

gelesen. Kann es sein, dass auch UDR1 über einen IN-Befehl gelesen
werden muss, damit das Zeichen aus dem Empfangs-Fifo der Uart gelöscht
wird? Imagecraft behauptet, dass auf Reg. 0x9c (UDR1) nur mit dem
LDS-Befehl zugegriffen werden darf, weil es im erweiterten Adressraum
(mega103 compatibility) liegt, allerdings ist uart1 ja nur dann
verfügbar, wenn der m64 nicht im m103c-Modus läuft - die entsprechende
Fuse ist daher auch gelöscht.

Vollkommen ratlos bin ich dankbar für jeden Tipp

Rainer

Antwort schreiben

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