mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik M16c62p uart stellt empfang ein


Autor: Peter Kasi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,
ich hab ein kleines Problem beim umstieg vom m16c62a auf den p. Ich hab
ein Programm das auf dem uart0 ständig Daten erhält und diese dann
verarbeitet. Beim m16c62a funktioniert das auch über Tage einwandfrei.
Beim Umstieg auf die P Version hab ich aber das Problem dass der Uart
nach ca. 10 Minuten den Empfang einstellt. Er nimmt einfach keine Daten
mehr entgegen, bzw löst den Interrupt nicht mehr aus. Ein
reinitialisieren der Schnittstelle bringt auch keinen Erfolg. Lediglich
ein Reset bringt ihn dazu für weitere 10-15 Minuten Daten
entgegenzunehmen (Das Programm selbst läuft einwandfrei weiter, konnte
auch nicht festellen das es mir irgenwas zerschießt, da der zweite Uart
auch noch was empfängt, und printf auf dem dritten auch noch geht). Die
sfr62p.h hatte ich anfänglich verwendet, enbenso die anderen
startupfiles für die P-Version. Nach dem das Problem aufgetreten ist
bin ich Stück für Stück zurück auf die Konfiguration für die A-Version,
hat aber nichts geändert. Auf A läuft es auf P hört er irgenwann auf.
Gibt es irgenwelche gravierenden Unterschiede zwischen den Prozessoren
die ich da übersehen habe? Ich komme da grad echt nicht weiter, wenn es
gar nicht funktionieren würde, ok, aber so? Am µC liegt es auch nicht,
hab mehrere ausprobiert und bei allen das Gleiche. Vieleicht kann mir
ja einer von euch weiterhelfen.. :)

Gruß
Peter

noch meine init-routine

void init_uart0(void){
  asm("FCLR I")
  u0brg =  CPU_CLK_FREQ/16/9600 -1;
  u0mr  = 0x5;    /* no parity, 8 data-bits, 1 stop-bit, internal clock
*/
  u0c0  = 0x10;   /* no cts/rts -> 0x10 b00010000 , prescaler = F1 */
  u0c1  = 0x5;    /* 00000101 enable receiver and transmitter */
  u0irs = 1;      /* TX INT on complete */
  s0tic |= 0x1;   /* Set UART0 transmit interrupt priority */
  s0ric |= 0x5;   /* Set UART0 receive interrupt priority */
  pd6_3 = 1;    /* TxD0 Pin->Input */
  pd6_2 = 0;      /* RxD0 Pin->Output */
  asm("FSET I")
}

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau mal alle Register durch, ob du nicht irgendein Bit auf 1 gesetzt
hast, das im Datenblatt mit "must not be set" beschrieben ist.
Ich hatte da einige Probleme, als ich von der P auf eine billigere
Version des uC umgestiegen bin.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.