Reinhardt Werbik
User
Hallo Ralf,
Du musst den Timer Vorladewert im Zusammenhang mit dem Compare Match Wert sehen.
Dieser ist durch die Dauer eines Bits vorgegeben, und nur bis zu diesem Wert läuft der Timer, bevor der erste Interrupt auftritt.
Außerdem musst Du berücksichtigen, was seit dem Interrupt vom Start-Bit schon alles passiert ist, bevor der Timer vorgeladen wird.
Die dafür nötigen Taktzyklen addieren sich zur Differenz zwischen Vorladewert und Compare Match Wert und ergeben die
Gesamtzahl der Taktzyklen vom Auslösen des Start-Bit Interrupts bis zum ersten Compare Match Interrupt zum Einlesen des 1. Datenbits.
Und da braucht die ISR bei 8 MHz dann auch wieder länger, bis das Einlesen des Bits tatsächlich passiert.
Die Gesamtzahl der Taktzyklen vom Start-Bit bis zum Einlesen des 1. Datenbits ist entscheidend, diese ist bei 16 MHz doppelt so groß wie bei 8 MHz.
Schau einfach mal in das LSS File, Du wirst Dich wundern, was da so alles an Assemblerbefehlen aus dem Compiler rauskommt.
Ein Unterprogrammaufruf in der ISR wäre tödlich, da allein das Sichern und Wiederherstellen des Prozessorstatus bei 8 MHz länger dauert als das ganze Bit.
Du musst den Timer Vorladewert im Zusammenhang mit dem Compare Match Wert sehen.
Dieser ist durch die Dauer eines Bits vorgegeben, und nur bis zu diesem Wert läuft der Timer, bevor der erste Interrupt auftritt.
Außerdem musst Du berücksichtigen, was seit dem Interrupt vom Start-Bit schon alles passiert ist, bevor der Timer vorgeladen wird.
Die dafür nötigen Taktzyklen addieren sich zur Differenz zwischen Vorladewert und Compare Match Wert und ergeben die
Gesamtzahl der Taktzyklen vom Auslösen des Start-Bit Interrupts bis zum ersten Compare Match Interrupt zum Einlesen des 1. Datenbits.
Und da braucht die ISR bei 8 MHz dann auch wieder länger, bis das Einlesen des Bits tatsächlich passiert.
Die Gesamtzahl der Taktzyklen vom Start-Bit bis zum Einlesen des 1. Datenbits ist entscheidend, diese ist bei 16 MHz doppelt so groß wie bei 8 MHz.
Schau einfach mal in das LSS File, Du wirst Dich wundern, was da so alles an Assemblerbefehlen aus dem Compiler rauskommt.
Ein Unterprogrammaufruf in der ISR wäre tödlich, da allein das Sichern und Wiederherstellen des Prozessorstatus bei 8 MHz länger dauert als das ganze Bit.