externen interrupt simulieren

OP #887949
Lesenswert?

Hallo,
ich möchte gerne einen externen Interrupt simulieren. Besser gesagt in 
der Simulation eine Interrupt-Routine ausführen. Habe schon einiges 
gelesen hier und dachte eigentlich es sollte gehen. Es passiert aber 
nichts.

Folgende Problemstellung:
Habe ein STK500 mit einem ATmega16. AVRStudio 4.14.
Bei einer steigenden Flanke an INT0 soll die Routine SIG_INTERRUPT0 
ausgeführt werden.
Das Kontrollregister MCUCR habe ich richtig eingestellt und auch den 
Interrupt freigegeben.
Wenn ich jetzt die Simulation laufen lasse läuft das Programm durch, 
ohne in die Routine zu springen.
Weis nicht ob ich es richtig verstanden habe, aber es müsste doch 
reichen, wenn ich einfach den PD2 (was hier INT0 ist) setze, oder??
Dann müsste das Programm in die Interrupt-Routine springen.

Oder geht das so mit einem STK500 nicht?

Danke für die Antworten!
(Firma: TravelRec.) Persönliche Seite #887960
Lesenswert?

Simulierst Du nun oder läßt Du das Programm im Controller auf dem STK500 
laufen? Wenn es im Controller läuft, reicht es in der Tat, bei gesetztem 
DDRx Register den betreffenden Portpin zu setzen oder zu löschen, wenn 
ein Interrupt ausgelöst werden soll. Dies passiert natürlich nur, wenn 
der Interrupt auch freigegeben ist.
OP #888006
Lesenswert?

Simulation hätte ich vielleicht nicht schreiben sollen. Ich gehe es halt 
im Debugging Schritt für Schritt durch.
Geht es da mit dem externen Interrupt?
Habe PIND2 gesetzt und für die Steigende Flanke habe ich wie im 
Datenblatt beschrieben ISC01 und ISC00 gesetzt. INT0 habe ich ebenfalls 
freigegeben.
Denke schon das es so richtig ist mit den Einstellungen.
Mir ist nur nicht klar ob es geht das zu debuggen.
Das mit den veralteten Namen ist doch noch egal, solange der Compiler 
die Befehle noch kennt, oder?
#888014
Lesenswert?

Nur mit einem STK500 kann man nicht debuggen (bzw. eben nur in Software, 
und das nennt man Simulation...)! Simulation geht mit dem Simulator vom 
AVRStudio, der aber nichts mit dem STK500 zu tun hat, sondern eine reine 
Software-Simulation macht. In-System-Debugging geht nur mit einem 
JTAG-Adapter (Dragon, JTAGICE). Also, was genau hast Du und was machst 
Du?
Gast #888021
Lesenswert?

>Ich gehe es halt im Debugging Schritt für Schritt durch.

Genau.  Und wenn Du den Zustand von PD2 im PIND-I/O-Register per 
Mausklick von einem Schritt zum nächsten änderst, dann springt der 
Simulator nach dem Abarbeiten der nachfolgenden Instruktion (so ist es 
auch in echt) in den zugehörigen Handler des externen Interrupts.  Das 
i-Bit muss dazu natürlich gesetzt sein, sonst sind ja komplett alle 
Interrupts gesperrt.
OP #888027
Lesenswert?

Ok, also ich simuliere!!
Komme immer noch nicht in die Interrupt-Routine.
Habe jetzt auch auf den neunen Vectornamen umgestellt.
Ist das so richtig?
ISR(INT0_vect)
Muss mir die Doku dazu nochmal genau durchlesen um die Syntax zu kennen.
Habe bis jetzt nur mit SIGNAL gearbeitet.
Dann wird mein Fehler wo anders liegen. Ich suche mal!
Danke aber für die Infos!

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