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
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)
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...
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
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.