Forum: Mikrocontroller und Digitale Elektronik Interrupt Vektoren beim Mega32


von Karl Heinz (Gast)


Lesenswert?

Hallo,

wollte gerade mein asm programm von einem 8515 auf einen mega32
portieren. ich dachte mit ein paar kleinen änderungen
(registerbezeichnungen) wär's getan, aber leider klappt die ganze
interrupt geschichte nicht mehr. beim start springt der mega32 noch
artig auf den reset-vektor, während des programms geht dann aber kein
timer/uart/etc. interrupt mehr.
hab ich da was übersehen?!

danke
KH

von Johannes M. Richter (Gast)


Lesenswert?

Die verschiedenen Interrupt-Vektoren sind bei den verschiedenen AVRs
nicht immer an den gleichen Stellen. Schau Dir dazu in den
Datenblaettern die Tabelle im Kapitel ueber die Interrupts an (z.B.
beim Mega64-Datasheet auf Seite 59, beim 8515 Seite 22)

von Karl Heinz (Gast)


Lesenswert?

die interrupt vektor tabelle hab ich schön aus dem datenblatt abgetippt
(und auch nochmal gecheckt). das ist es nicht...
ich hab auch mal folgendes probiert:

.cseg
.org  0
    jmp  reset
    reti         ;ext int 0
    reti        ;ext int 1
    reti        ;ext int 2
    reti        ;TIMER2 COMPARE
    reti        ;TIMER2 OVERFLOW
    reti        ;TIMER1 CAPTURE
    reti        ;TIMER1 COMPARE A
.org  $010
    jmp  SetResetMark    ;TIMER1 COMPARE B
    reti        ;TIMER1 OVERFLOW
    reti        ;TIMER0 COMPARE
.org  $016
    jmp  GetKeys      ;TIMER0 OVERFLOW
    reti        ;SPI Transfer beendet
.org  $01a
    jmp  empfangen    ;UART byte empfangen
.org  $01c
    jmp  TransINT    ;UART datenreg
.org  $01e
    reti        ;UART transfer beendet
    reti        ;ADC conversion
    reti        ;EEPROM ready
    reti        ;anacomp
    reti        ;Two Wire Serial
    reti        ;store program

.cseg
.org  $02a
...

das hat dann auch funktioniert bis auf den TIMER1 COMPARE B. wenn ich
den wie oben modifiziere, schmiert das ganze prog ab...
hat das vielleicht was mit self programming/bootloader/... zu tun?
den gab's beim 8515 nämlich nicht...

von Andi (Gast)


Lesenswert?

Hi!

Du mußt allerdings bedenken, das ein JMP XYZ benötigt 2 Words und ein
RETI nur eins.
Da man beim Mega32 mit RJMP nicht weit kommen würde, sind für jeden
Verktor 2 Words reserviert.
Ich meine damit, das Du das villeicht nich so machen soltest

    reti        ;TIMER2 COMPARE
    reti        ;TIMER2 OVERFLOW
    reti        ;TIMER1 CAPTURE
    reti        ;TIMER1 COMPARE A

sonder evtl. so um die 2 Words für jeden Verktor zu füllen

    reti        ;TIMER2 COMPARE
    nop
    reti        ;TIMER2 OVERFLOW
    nop
    reti        ;TIMER1 CAPTURE
    nop
    reti        ;TIMER1 COMPARE A
    nop

oder statt nop noch ein reti.

Ich hoffe, Du weißt was ich meine.

Gruß
Andi

von Karl Heinz (Gast)


Lesenswert?

danke andi,

ich hab's gleich mal implementiert und es spielt!

allerdings bekomme ich jetzt einen verify fehler beim programmieren.
mal sehen woran das jetzt wieder liegt...

KH

von Andi (Gast)


Lesenswert?

Habe Pony-Prog und wenn ich Write Device statt Write Program und dann
Write Data gemacht hatte, gab es bei mir auch ab und zu einen Verify
Fehler obwohl dann alles funxionierte.
Seit dem mach ich das immer schön der Reihe nach dann passiert das
nicht mehr.

Gruß
Andi

von Gralf (Gast)


Lesenswert?

Andi schrieb:
"Du mußt allerdings bedenken, das ein JMP XYZ benötigt 2 Words und
ein
RETI nur eins.
Da man beim Mega32 mit RJMP nicht weit kommen würde, sind für jeden
Verktor 2 Words reserviert."

Besten Dank, Andi! Genau das Problem hatte ich auch beim Umstieg auf
den Mega32. Daß das bei den AVR auch immer gleich mit einem kompletten
Datenblattstudium beginnen muß, wenn man nur wegen mehr RAM auf einen
anderen Controller umsteigt...

Da hat man schon einige Controller programmiert und glaubt man kann es,
schon tauchen wieder neue Dinge auf, die beachtet werden müssen:
interner/externer Clock, Bootloader, JTAG, neue IntVec-Tabelle, neue
Register, neue Bitnamen...
Dabei wollte ich doch nur einen 8535 mit mehr RAM! Okay fürs nächste
mal habe ich mir vorgenommen, das Datenblatt mal komplett zu studieren
und nicht nur zu überfliegen, aber davon werden mich wohl wieder viele
hundert Seiten englisch abhalten und viele Stunden (hoffentlich nicht
Tage) rauchenden Kopf bescheren.

Daß die Interupts anders liegen bei unterschiedlichen Prozessoren, ist
klar. Es gibt ja auch diverse Funktionen mehr oder weniger wie TWI,
SPI, Timer etc. Aber daß man jetzt such noch auf ein- und
zwei-word-Befehle achten muß...
Naja, wieder was gelernt - nach zwei Tagen Fehlersuche und Simulation.

Auf jeden Fall großen Dank an dieses Forum und alle, die hier posten.
Ich selbst bin hier zwar nicht sehr aktiv, weil ich eher mit Problemen
kämpfe als sie zu lösen. Dabei hat mir aber bisher immer die Suche
weitergeholfen. Übrigens ein guter Tip: Suchen bringt meist schneller
ein Ergebnis als lange Texte schreiben und auf Hilfe hoffen.

Oh, ich glaube der Text war schon zu lang...

Gralf

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.