Forum: Mikrocontroller und Digitale Elektronik Interrupt im atmega


von Florian Hillen (Gast)


Lesenswert?

Hallo,

mein atmega 162 springt immer ans ende der interrupt vektortabelle
wenn der timer0 überläuft. Ich habe keine komischen Fuses gesetzt
nur externe Taktquelle. Naja jedenfalls springt der avr im studio4
immer falsch.

.cseg
.org $0000
  jmp RESET    ;reset entry vector
  reti
  reti
  reti
  reti
  reti
  reti
  reti
  reti
  reti
  reti
  reti
  reti
  reti
  reti
  reti
  jmp TIMER
  jmp TIMER
  reti
  reti
  reti
  reti
  reti
  reti
  reti
  reti
  reti
  reti

für infos wär ich dankbar
Florian

von mmerten (Gast)


Lesenswert?

in der tabelle müssen entweder reti/nop sequenzen oder entsprechende
.org direktiven verwendet werden, da beim mega162 die tabelleneinträge
2 worte lang sind.

von johnny.m (Gast)


Lesenswert?

reti ist ein Ein-Wort-Befehl. Die Interrupt-Vektoren beim Mega162 sind
aber 2 Wort breit. Entweder vor jedes reti ein nop oder ein jmp RESET
o.ä.

von Rolf Magnus (Gast)


Lesenswert?

> Entweder vor jedes reti ein nop...

Ich würd's dahinter machen. Dann werden die Interrupts, die eigentlich
gar nicht auftreten dürften, etwas schneller ignoriert ;-)

von Kai R. (kairiek)


Lesenswert?

Mein Vorschlag: Schreibe die ein "Default Int Unterprogramm" - DEFINT
(was 'n Name) in dem der reti Befehl steht. Dann alle reti's in
deiner Tabelle mit "jmp DEFINT" ersetzen.

MFG

Kai

von johnny.m (Gast)


Lesenswert?

Am besten das Beispiel aus dem Datenblatt (beim Mega162 auf S. 60)
übernehmen und, wie Kai schon sagte, bei jedem nicht benutzten
Interrupt-Vektor einen Sprung in eine Standard-Ignorierungs-Routine
(also DEFINT oder so) setzen.

@Rolf:
Danke für den Tip;-) Jetzt weiß ich endlich, warum mein µC beim
Ignorieren immer so lahmt...

von Florian Hillen (Gast)


Lesenswert?

supergut
vielen Dank Männer
Florian

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.