> cli(); und sei(); ist übrigens doppelt gemoppelt.
Nicht nur das. Das sei() sorgt auch dafür, daß Interrupts schon wieder
eingeschaltet werden, bevor die Interrupt-Routine komplett fertig ist.
Falls in der Zwischenzeit ein weiterer Interrupt ansteht, wird der an
dieser Stelle sofort behandelt. Wenn man also mit der Interrupt-Frequenz
an der Lastgrenze des Prozessors ist, bekommt man einen Stacküberlauf,
weil immer schon der nächste Interrupt ausgeführt wird, bevor aus dem
letzten zurückgesprungen wurde.