Forum: Compiler & IDEs zu langsame ISR?


von Rahul (Gast)


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

von Peter D. (peda)


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

von Rahul (Gast)


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

von Peter D. (peda)


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

von Rahul Ghose (Gast)


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

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.