Robin J. schrieb:
> Problem ist, dass das Programm zwei mal die Interrupt-Routine
> durchläuft, bevor der normale Programmablauf fortgesetzt wird. Ich habe
> das Programm bis jetzt nur in der Simulationsumgebung von Atmel Studio
> getestet. Kann jemand einen Formfehler finden, oder liegt es vielleicht
> an Atmel Studio?
Ich hab's mal mit dem Studio4.19 getestet.
Mit dem SimulatorV2:
Doppelauslösung ist da nicht festzustellen, aber dafür reagiert er immer
auf jede Flanke, ganz egal, wie die ISC0x Bits gesetzt wurden.
Mit dem SimulatorV1:
Ebenfalls keine Doppelauslösung festzustellen, und sogar die Flankenwahl
per ISC0x funktioniert hier erwartungsgemäß. Bloß LowLevel verhält sich
nicht in jedem Detail wie in der Realität.
Allerdings habe ich auch in deinen Code bei der Initialisierung noch
zwei Zeilen eingefügt:
ldi r21,1<<INTF0
out GIFR,r21
und zwar zwischen der Flankenwahl und dem sei. Dieses explizite Löschen
des Interruptflags ist bei vielen Interrupts empfehlenswert.