Hallo!
Ich benutze bei einem mega168 das Input-Capture-Int und ein
Compare-Match-Int des Timer1. Zusatzlich noch UART per Int. Das
Compare-Match ist vergleichsweise Timing-kritisch (auch unter Ausnutzung
der automatischen Pin-Funktionen!).
Unter bestimmten Umständen führt das ausführen eines UART-Ints dazu,
dass ICP-Int und Comp-Match-Int beide getriggert werden. Leider wird
dann zuerst das ICP-Int ausgeführt (höhere Priorität), was dann dazu
führt, dass das Compare-Int die Timing-Constraints nicht einhalten kann.
Als Lösung (abgesehen von anderen Optimierungen) hatte ich
Pseudocode-maßig an folgendes gedacht:
1 | ISR(ICP)
|
2 | {
|
3 | if (CompareMatch)
|
4 | {
|
5 | "ret" (ohne Int-Flag zurückzusetzen)
|
6 | }
|
7 | .....
|
8 | }
|
Das geht natürlich so nicht ganz, da dann wieder das ICP-Int
angesprungen würde.
Was habt ihr für Vorschläge?
Grüße
Robert