Forum: Compiler & IDEs atmega32 Interrupt Problem


von Mario Bernhard (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich kapier es nicht und brauche mal Hilfe. Wenn ich den Timer0
Interrupt aktiviere und dieser auftritt startet das Programm bei
main(). Ohne aktivierten Interrupt blinkt die LED. Sobald der Interrupt
aktiviert wird leuchtet sie immer, denn innerhalb der _delay_loop wird
der Interrupt ausgelöst und das Programm beginnt bei main(),

Ich benutze den avr-gcc 3.4.5 mit avr-libc-1.4.4 unter Linux. Nachdem
ich dort nicht weiter kam habe ich den Source mit dem WinAVR kompiliert
und im AVRStudio laufen lassen. Im Simulator kann man schön sehen wie er
zu main() springt. Nachdem ich das Macro ISR gegen SIGNAL ausgetauscht
hatte funktionierte es zumindest im Simulator. Aber auch nur dort. Hier
im Forum habe ich dann gelesen das es sein kann das er wegen fehlender
Interrupt Funktionen oder falscher Optimierung beim Interrupt zur
Adresse 0x00 spring. Ich habe dann alle Möglichen Optimierungen
durchprobiert (auch ohne) und für alle Interrupts die Funktionen
geschrieben. Hat alles nichts geholfen.
Mir fällt echt nichts mehr ein - wo kann ich noch suchen ?

Mit Gruß
Mario

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Tut hier anstandslos.  Ich habe aber nur einen ATmega16, keinen
32er.  Habe noch ein PORTD ^= 2 in die ISR gebaut, man kann am
Oszi gut beide Impulsfolgen sehen, die nahezu gleich lang sind
(aber nicht ganz).

Hast du's für den falschen Controller compiliert?

von Mario Bernhard (Gast)


Lesenswert?

Glaub ich nicht so. Auf dem Board ist ein ATMega32. Kompiliert habe ich
mit (Resultat vom makefile):
avr-gcc -c -Wall -Os -mmcu=atmega32 -o main.lo
avr-gcc -o main main.lo
avr-objcopy -j .text -j .data -O ihex main main.hex
avrdude -cpony-stk200 -patmega32 -Uflash:w:main.hex:i

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Im avr-gcc-Aufruf für das Linken fehlt die -mmcu= Option.

von Mario Bernhard (Gast)


Lesenswert?

Jup! Danke das war es. Jetzt arbeitet das Teil.
Echt vielen Dank - währe ich nie drauf gekommen.

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.