AVR - externer Interrupt interruptet nicht.

OP #4059168
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
Gast #4059198
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.
OP #4059317
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!
OP #4059330
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
#4059334
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.
#4059340
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.
OP #4059361
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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.