Forum: Mikrocontroller und Digitale Elektronik AVR - externer Interrupt interruptet nicht.


von Andreas S. (igel1)


Lesenswert?

Hi Leute,

ich habe nach längerer AVR-Abstinenz ein Programm geschrieben,
um den externen Interrupt INT1 auf einem ATmega88PA zu testen.

Leider funktioniert mein Programm im AVR Studio 6 Simulator nicht.
Meine Selbstdiagnose lautet: Brett vor'm Kopf - bin irgendwie
blind und finde den Fehler nicht.

Vielleicht ist das für einen Kenner unter Euch ja eine Sache
von 2 Sekunden, daher mein Hilfegesuch.

Viele Grüße

Igel1


PS:  sorry - Code könnte schöner formatiert sein ...

1
/*
2
 *  Test external Interrupt INT1
3
 *
4
 *  When INT1 (=PD3) is rising from 0 to 1, an interrupt shall be triggered
5
 *      The level change is realized by setting/resetting PD3 within the program
6
 *
7
 *  V0.01  Doen't work - simulator doesn't branch into ISR (interrupt service routine)
8
 */
9
10
11
.EQU XTal = 1000000    ; XTal frequency definition
12
13
;* Controllertyp:    ATmega88PA
14
.include  "m88PAdef.inc"
15
16
;* Definitionen
17
.def akku = r19      ;Allzweckregister Programm
18
 
19
20
; Interrupt-Handler für atmega88PA
21
.org 0x0000
22
rjmp Main          ; rjmp RESET ; Reset Handler
23
reti            ; rjmp EXT_INT0 ; IRQ0 Handler
24
rjmp EXT_INT1          ; rjmp EXT_INT1 ; IRQ1 Handler
25
26
27
.cseg    ;Flash Segment
28
29
30
; Main Program
31
Main:
32
  ;Stack init
33
  ldi  akku,HIGH(RAMEND)
34
  out  SPH,akku
35
  ldi  akku,LOW(RAMEND)        ;Stack Initialisierung
36
  out  SPL,akku                ;Init Stackpointer
37
38
39
; Init Ports
40
  ldi akku, 0b00101100          ;Port D:  D2,D3,D5 => Ausgang,  Rest => Eingang
41
  out DDRD, akku
42
  nop
43
44
45
; Init Interrupts
46
  ldi  akku,(1 << ISC11 | 1 << ISC10)      
47
        ; The rising edge of INT1 generates an interrupt request.
48
  sts EICRA, akku
49
50
  ldi akku,(1 << INT1)            ; Bit 1 – INT1: External Interrupt Request 1 Enable
51
  out EIMSK, akku
52
53
  ldi  akku,0x00
54
  out EIFR, akku
55
56
  sei
57
58
; PORTD3 toggel - rising signal should trigger ISR
59
Flashy:
60
61
  cbi PortD, 3             ; INT1 -> 0
62
  nop
63
64
  sbi PortD, 3              ; INT1 -> 1      ### at this point, an interrupt should be triggered ###
65
  nop
66
 
67
  rjmp Flashy
68
69
70
;* Interrupt routine for external interrupt ext_int1
71
EXT_INT1:
72
  sbi PortD,5        ; LED an  
73
reti

von S. Landolt (Gast)


Lesenswert?

Das ".cseg" steht etwas zu tief, aber ob's daran liegt?

von MWS (Gast)


Lesenswert?

Andreas S. schrieb:
> *  V0.01  Doen't work - simulator doesn't branch into ISR (interrupt
> service routine)

Also ich kann das simulieren, AVR Studio 4.19, und es wird in die Int1 
ISR eingesprungen.

Beiläufig, das hier:
1
  ldi  akku,0x00
2
  out EIFR, akku
ist sinnlos, Flag-Bits werden durch Schreiben einer 1 gelöscht.

von Detlef K. (adenin)


Lesenswert?

In Version 4.18 funktioniert es mit "Simulator" und "Simulator2". :)

von Karl H. (kbuchegg)


Lesenswert?

Hab das Teil in Atmel Studio 6.2 geladen.
Im Simulator: nichts.

Das EIFR Bit wird korrekt gesetzt, aber der Interrupt Vektor wird nicht 
angesprungen.

Ich weiss schon, warum mir das alte AVR Studio lieber ist.

von S. Landolt (Gast)


Lesenswert?

> Hab das Teil in Atmel Studio 6.2 geladen.
Und was passiert, wenn Sie das ".cseg" an die richtige Stelle setzen?

von Karl H. (kbuchegg)


Lesenswert?

S. Landolt schrieb:
>> Hab das Teil in Atmel Studio 6.2 geladen.
> Und was passiert, wenn Sie das ".cseg" an die richtige Stelle setzen?

Hab ich probiert. Kein Unterschied.

von S. Landolt (Gast)


Lesenswert?

> Ich weiss schon, warum mir das alte AVR Studio lieber ist.
Und ich weiß schon, warum ich so selten den Simulator benutze - hab' 
genug mit meinen eigenen Fehlern zu tun, fremde brauche ich nicht.

von MWS (Gast)


Lesenswert?

Karl Heinz schrieb:
> Hab das Teil in Atmel Studio 6.2 geladen.

Version 6.1 funktioniert auch nicht, auch wenn das .cseg verschoben 
wird. Version 4.18 (nicht 4.19) funktioniert hingegen. Und ist auch 
nicht so elend ziagat.

von Karl H. (kbuchegg)


Lesenswert?

Aaaaaargh.

Man muss mittels F5 den Simulator laufen lassen. Im Einzelschrittbetrieb 
mittels F10 oder F11 funktioniert das nicht.

Also eines muss ich schon sagen.
So gerne ich die AVR auch habe, aber die Qualität der 
Entwicklungsumgebung könnte besser sein.

von MWS (Gast)


Lesenswert?

Karl Heinz schrieb:
> Man muss mittels F5 den Simulator laufen lassen.

Und auf dem linken Fuß stehen, sich mit der rechten Hand an das linke 
Ohrläppchen greifend.

von Karl H. (kbuchegg)


Angehängte Dateien:

Lesenswert?

es gibt eine Option im Atmel Studio.

Zu finden unter dem Menüpunkt "Tools" | "Options"

und dann im Dialog weiter wie im Bild gezeigt.
"Mask interrupts while stepping"

Die ist defaultmässig auf 'true' gestellt. Wer macht den auch sowas. 
IMHO der falsche Default.

von S. Landolt (Gast)


Lesenswert?

> IMHO der falsche Default.

Muret-Sanders (um 1900):
default: ... 5. Missethat, üble That ...

von Andreas S. (igel1)


Lesenswert?

Wow - Leute, das hätte ich jetzt nicht gedacht:

In dieser kurzen Zeit haben sich tatsächlich 3 von Euch
(MWS, Detlef und Karl-Heinz) die Mühe gemacht, meinen
Code in Ihrem jeweiligen Simulator laufen zu lassen ...
Da bleibt einem wirklich die Spucke weg - dickes Dankeschön
an die 3 Helden!  (die mir nebenbei auch noch nette Tipps
spendiert haben)

Und über das Ergebnis bin ich ebenfalls erstaunt: Vor Jahren
bin ich mit dem alten AVR Studio schon einmal in eine
Simulator-Falle getappt - hätte nicht gedacht, daß
die Software nach so vielen Jahren immer noch so buggy ist.

1000 Dank aber nochmals für Eure Unterstützung!

Viele Grüße

Igel1


PS: Ich habe mein Uralt AVR Studio 4.19 Build 716 gerade einmal 
ausgegraben
    Ergebnis: mein Programm funktioniert dort!

von Andreas S. (igel1)


Lesenswert?

Uff - während ich getextet habe, hat Karl Heinz noch einen drauf gelegt:

Da kann ich nur sagen:

Hier kannst Du wirklich was erleben, in diesem Forum !
@Karl Heinz: unglaublich! Wie bist Du darauf nur gekommen ?!

Danke - jetzt funktioniert's auch in meinem AVR Studio 6.2.1563 (SP 2).
Hamma!

Viele Grüße

Igel1

von Karl H. (kbuchegg)


Lesenswert?

Andreas S. schrieb:

> Simulator-Falle getappt - hätte nicht gedacht, daß
> die Software nach so vielen Jahren immer noch so buggy ist.

Wie sich rausgestellt hat, ist das kein Bug.

Es ist nur ein Feature, dass meiner Meinung nach unsinnigerweise nach 
der Installation aktiviert ist. Denn die Erwartungshaltung der meisten 
dürfte wohl sein, dass sich Single Step und Run nur dadurch 
unterscheiden, dass ein Run mehr oder weniger einfach nur ein Single 
Step nach dem anderen ist.
Warum man beim Single Steppen auftretende Interrupts nicht ausgeführt 
haben will, entzieht sich meiner Phantasie.

von The Return of Mistzeug (Gast)


Lesenswert?

Andreas S. schrieb:
>.... hätte nicht gedacht, daß
> die Software nach so vielen Jahren immer noch so buggy ist.

Nicht "immer noch" -WIEDER!

von Karl H. (kbuchegg)


Lesenswert?

Andreas S. schrieb:

> Hier kannst Du wirklich was erleben, in diesem Forum !
> @Karl Heinz: unglaublich! Wie bist Du darauf nur gekommen ?!

Die Annahme war, dass Atmel doch wohl nicht so einen simplen Bug im 
Simulator haben wird. Also hab ich mal angefangen zu googeln mit 
unterschiedlichen Stichworten.
Und nach einige Web Sites hatte ich dann einen Treffer, der mir weitere 
Stichworte für Google geliefert hat :-)

Die Sache mit dem F5 hab ich zufällig beim Probieren im Studio entdeckt.

von Andreas S. (igel1)


Lesenswert?

@Karl Heinz:
Scharf und richtig kombiniert (wie wir im Nachhinein nun alle wissen).
Danke für Dein Engagement!

1000 Dank aber auch an alle anderen, die sich hier bemüht haben.
Das hätte mich sicher Tage gekostet, weil ich das Problem ausschließlich
vor der Tastatur vermutet hatte ...

Habt noch einen schönen Abend!

Viele Grüße

Igel1

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.