www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AT91SAM7SE Interrupt für Break und Char


Autor: Florian Fischer (e-lore)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Florian Fischer (e-lore)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Florian Fischer (e-lore)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...was mein Problem leider nicht gelöst hat...

Autor: Florian Fischer (e-lore)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK...Kommando zurück..war noch ein Hardwareproblem...warum sind es 
eigentlich immer zwei oder mehr Fehler, die sich ineinanderhängen und 
eine Diagnose erstmal um ein vielfaches verkomplizieren?...gemein...

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.