mikrocontroller.net

Forum: Compiler & IDEs zu langsame ISR?


Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin!
Ich habe folgende ISR geschrieben:

SIGNAL(SIG_UART_RECV)
  {
    instring[Buff++] = UDR;
  }

Kann es sein, dass die zu langsma ist, um auf vier sehr kurz
hintereinander folgende Bytes bei 9600 Baud zu reagieren?
Wie würde eine schneller (ASM?) aussehen?

Vielen Dank im Vorraus
Rahul

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sieh Dir doch einfach das Assemblerlisting an und zähl die Befehle.
Deinen Quarztakt kennst Du ja und schon hast Du die Abarbeitungszeit
raus.

Die Baudrate kennst Du auch und damit wie lange ein Byte dauert.

Nun vergleiche beides miteinander.


Peter

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So, ich habe mir den ASM-Code angeguckt.
Die ISR geht von 5C bis 9B als insgesamt 3F Taktperioden(63 µs).
Der µC hat eine Frequenz von 4MHz und somit eine Verarbeitungszeit von
0,25µs pro Anweisung (1Byte).
Ein komplettes Byte bei 9600 Baud hat eine Länge von 1,04ms als
1040µs.
Somit wäre es dem AVR möglich, während der Übertragung eines Byte 977
Anweisungen auszuführen.

Aber leider verschluckt er immer das Startbit des letzten Byte, und
empfängt es deswegen wohl auch nicht.

Ich werde mich jetzt wohl doch zu einer ASM-Routine durchschlagen
müssen.
Schönen Gruß
Rahul

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Ich werde mich jetzt wohl doch zu einer ASM-Routine durchschlagen
müssen."

Das wird Dir bloß nichts nützen.

Du hast doch erkannt, daß Du nur 63µs jede 1040µs brauchst, also
keinerlei zeitliche Probleme hast.

Dann muß es ein anderer Fehler sein und den must Du finden (z.B. Anzahl
der Daten-,Stopbits, Baudrate, Parity).


Peter

Autor: Rahul Ghose (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Peter!
Lesen bildet!
Hätte ich mich etwas genauer mit AVR-Studio und dem dazugehörenden
Handbuch beschäftigt, wäre mir auchfgefallen, dass der AVR gar nicht
mit 4MHz, sondern nur mit 3,69MHz betrieben wird.
Sämtliche ISR funktionieren jetzt einwandfrei!
Danke noch mal.
Schönen Gruß
Rahul

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.