www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik INT2 bei ATmega32 via S/W


Autor: Manni (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
An alle Interrupt Freunde,

ich möchte via INT2 (PORTB2) einen S/W interrupt ausführen. Aber allein
schon den INT2 initialisiere, wird gleich ein Interrupt ausgeführt, was
aber nicht sein soll. Ich möchte vielmehr, dass erst bei einem
negativen Signal in PORTB2 der erste interrupt ausgeführt wird.

Dazu hier der code, device is ATmega32:

  cli
  sbi  DDRB, PORTB2    ; Setze PORTB2 auf output
  sbi  PORTB, PORTB2    ; Setze PORTB2 auf high
  in  temp1, GICR    ; hole Interrupt register
  ori  temp1, (1<<INT2)  ; enable INT2
  out  GICR, temp1    ; schreibe zurück
  sei

Nach dieser code sequenz (sei) wird sofort der interrupt ausgeführt (im
Simulator), was aber nicht sein soll.

Was mache ich hier verkehrt ? Oder ist nur der Simulator falsch
gestrickt ?

Schon mal Danke für jede Antwort.

Gruss Manni

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht solltest du vorher das Interrupt-Flag im Flagregister
löschen. Wie es beim Mega32 heißt, weiß ich jetzt nicht, bei anderen
AVRs heißt es GIFR. Gelöscht wird das Flag durch Schreiben einer 1,
nicht durch Schreiben einer 0.

Dann solltest du auch mal schaun, wo du den Auslösemode des Interrupts
einstellen kannst (fallende/steigende Flanke, Low-Level), bei anderen
AVRs ist das in MCUCR der Fall.

Ich gehe mal davon aus, dass die Interrupt-Vektoren korrekt eingetragen
sind (mit JMP) und der Stackpointer initialisiert wird.

...

Autor: Manni (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
@Hannes

Danke dir für die Tips:
- Interrupt Vector richtig eingestellt
- Stack pointer korrekt initialisiert (SPH, SPL)
- Low Level Trigger in MCUCR

Es liegt aber einfach am AVR simulator. Das INTF2 Flag in GIFR setzt
sich beim ersten Aufruf des Simulators richtig auf 0. Beim zweiten
Aufruf des Simulators ist das Flag schon gesetzt (siehe attached
Screenshot), wenn gerade mal vom RESET Vektor an die 1. instruction
gesprungen wird. Na ja, das ist halt beim AVR Studio (Version 4.12,
Built 460) so mit dem Gaul und dem Maul.

Ich gehe mal davon aus, das im richtigen Leben (Code im controller) das
Programm so läuft, wie es im Datenblatt beschrieben ist.

Danke an Hannes für die Tips !!

Autor: AR. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
macht er beim Timer auch. Wenn man zu Fuß das IntFlag löscht, geht alles
richtig.
Ist aber nur im Simulator. Mir konkret beim Mega48 aufgefallen. In real
geht alles.

So ist das mit dem Weib und dem Leib ;-))

AxelR.

Autor: Manni (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Axel

Ist ja gut zu hören, dass auch du das schon mit dem timer beobachtet
hast. Mit dem hatte ich ich schon so meine Probleme bis ich endlich
aufgehört habe zu simulieren und den code reingeworfen habe.

Seitdem bin ich sehr misstrauisch, wenn ich was im Datenblatt gelesen
habe und verstanden habe und dann tut nicht.

Danke für deinen Hinweis

Gruss Manni

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.