mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Atmega128: Externer Interupt funktioniert nicht


Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich möchte bei einem Atmega128 in C (WINAVR) den Externen Interrupt 7
auslösen. Nur leider funktioniert das nicht; der Controler macht bei
Logikwechsel an dem enstrechenden Pin einen Restart!

Ich hab den Interrupt wie folgt initialisiert:

***********************************************
// External Interrupt(s) initialization
EICRA=0x00;
EICRB=0x40;
EIMSK=0x80;
// Global enable interrupts
sei ();

***********************************************



Die Interruptmethode sieht wie folgt aus:

***********************************************
SIGNAL (SIG_INTERRUPT7)
{
//Code für den Interrupt
}
***********************************************



Beim Überprüfen der List-Datei nach dem übersetzen ist mir aufgefallen,
dass nur bei der Adresse 0x20 ein Sprung zum Interruptprogramm vorhanden
ist.
Der Interuptadresse für den Externen Interrupt 7 müsste doch eigentlich
bei 0x10 sein, oder?:

**********************************************

00000000 <__vectors>:
   0:  0c 94 46 00   jmp  0x8c
   4:  0c 94 63 00   jmp  0xc6
   8:  0c 94 63 00   jmp  0xc6
   c:  0c 94 63 00   jmp  0xc6
  10:  0c 94 63 00   jmp  0xc6
  14:  0c 94 63 00   jmp  0xc6
  18:  0c 94 63 00   jmp  0xc6
  1c:  0c 94 63 00   jmp  0xc6
  20:  0c 94 52 01   jmp  0x2a4
  24:  0c 94 63 00   jmp  0xc6
  28:  0c 94 63 00   jmp  0xc6
  2c:  0c 94 63 00   jmp  0xc6
  30:  0c 94 63 00   jmp  0xc6
  34:  0c 94 63 00   jmp  0xc6
  38:  0c 94 63 00   jmp  0xc6
  3c:  0c 94 63 00   jmp  0xc6
  40:  0c 94 63 00   jmp  0xc6
  44:  0c 94 63 00   jmp  0xc6
  48:  0c 94 63 00   jmp  0xc6
  4c:  0c 94 63 00   jmp  0xc6
  50:  0c 94 63 00   jmp  0xc6
  54:  0c 94 63 00   jmp  0xc6
  58:  0c 94 63 00   jmp  0xc6
  5c:  0c 94 63 00   jmp  0xc6
  60:  0c 94 63 00   jmp  0xc6
  64:  0c 94 63 00   jmp  0xc6
  68:  0c 94 63 00   jmp  0xc6
  6c:  0c 94 63 00   jmp  0xc6
  70:  0c 94 63 00   jmp  0xc6
  74:  0c 94 63 00   jmp  0xc6
  78:  0c 94 63 00   jmp  0xc6
  7c:  0c 94 63 00   jmp  0xc6
  80:  0c 94 63 00   jmp  0xc6
  84:  0c 94 63 00   jmp  0xc6
  88:  0c 94 63 00   jmp  0xc6

000000c6 <__bad_interrupt>:
  c6:  0c 94 00 00   jmp  0x0
**********************************************


Was hab ich falsch gemacht?

Autor: mmerten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
0x20 ist schon richtig da bei allen AVR mit >8k FLASH die Einträge in
der Interrupttabelle 4 Byte lang sind, damit`s für nen jmp Befehl
reicht. Bei den "kleinen" reicht ja nen rjmp mit 2 Byte aus.

Autor: peter dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"der Controler macht bei
Logikwechsel an dem enstrechenden Pin einen Restart!"


Typischer Falll für die M103-Fuse.


Peter

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also das M103-Fuse-Bit hatte ich schon zurückgesetzt. Wenn ich das setze
funktioniert ja überhaupt nichts mehr...

Das gleiche Programm hab ich ja schonmal im Assembler geschrieben. Da
funktioniert es einwandfrei. Dort habe ich allerdings die
Interruptadresse 0x10 verwendet.

Muss ich vielleicht am Controller noch irgendetwas einstellen (zb.
Fuse-Bits oder irgendwelche Register)?

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey, es funktioniert.

Ich weiß zwar nicht, woran es lag. Aber es funktioniert jetzt.

Eigentlich hab nich nur nochmal spaßeshalber das M103-Fuse-Bit gesetzt.
Dann hat, wie zu erwarten war, gar nichts mehr funktioniert.

Nachdem ich es aber wieder zurückgesetzt hab, hat der Interrupt
plötzlich richtig ausgelöst...

Warum weiß ich nicht. An den anderen Fuse-Bits hab ich eigentlich
nichts verändert. Es sei den ich hab es nicht bemerkt, was ich mir aber
nicht vorstellen kann.

Trotzdem danke für eure Tips.

Autor: DADA (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
möchte eine EICRA programiieren nur bei fallender Flanke...Kann jemand 
bitte helfen?

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.