AT91SAM7SE Interrupt für Break und Char

OP #637314
Hallo!

Ich bin vor kurzem über ein blödes Probelm mit dem SAM7SE von Atmel 
gestolpert und weiss nicht mehr weiter.

Es wird ein LIN Feldbus über einen USART ausgelesen. Das Breaksignal von 
einem LIN Bus wird mindestens 14 nominale Bitlängen lang (13 davon als 0 
und ein Stop Bit).

Ich habe den USART mit zu Zeit 2 verschiedenen Interrupts konfigurier 
(mit RXRDY und RXBRK).

Die Interrupt Routine muss dann letztlich auseinanderpflücken, welcher 
jetzt den Interrupt ausgelöst hat. Das passiert z.B. mit folgender 
Zeile:

if (COM0->US_CSR & AT91C_US_RXBRK != 0) // mit AT91PS_USART COM0;

in dieser Abfrage werden die Statusbits (also auch das RXBRK) 
zurückgesetzt:

COM0->US_CR = AT91C_US_RSTSTA;

Es passiert nun folgendes. Ich bekomme einen Interrupt, es wird ein 
Break Signal erkannt! Alles läuft nach Plan.

Dann bekomme ich einen zweiten Interrupt. Es ist laut Abfrage KEIN Break 
und die andere routine läuft durch. Es ist allerdings auch kein 0x55 wie 
erwartet, sondern einfach nur 0x00.

Danach gibt es KEINEN Interrupt mehr! Wenn ich direkt nach dem 
rücksetzen der Statusbits ein kurzes "wait" einsetze, z.B. 1 ms, dann 
kommt nichtmal ein zweiter interrupt!

Vielleicht habt ihr noch eine spontane Idee...

Grüße

Florian
OP
Das war mal wieder typisch...

Ich stolper grundsätzlich in die lustigsten Fehler... ich habe gerade 
Antwort von Atmel bekommen.

Falls jemand den gleichen Fehler hat, es ist ein Errata, der noch nicht 
aufgeführt ist!

Hier ein Auszug aus der Mail vom Support:

---------------------------------------schnipp-------------------------- 
-----
There is an errata related to RXBRK management which is not referenced 
so far in the datasheet but will be in the next revision:

RXBRK flag error in Asynchronous Mode
When timeguard is 0, RXBRK is not set when the break character is 
located just after the Stop
Bit. FRAME (Frame Error) is set instead.
Problem Fix/Workaround
Timeguard should be > 0.

Check that timeguard is > to  0

Then, if it does not solve your issue, take care you correctly 
acknowledge the different interrupts.

---------------------------------------schnapp-------------------------- 
-----


Vielleicht erspare ich so jemandem die lange Suche...


Grüße


Florian

Antwort schreiben

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