zu langsame ISR?

Gast #75497
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
Gast #75499
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
#75500
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
Gast #75501
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren