Forum: Mikrocontroller und Digitale Elektronik M16c62p uart stellt empfang ein


von Peter Kasi (Gast)


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")
}

von Benedikt (Gast)


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.

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.