Ich versuche zur Zeit einen Bootloader für meinen Atmega644 zu
schreiben.
Meine Fuses habe ich wie Folgt gesetzt:
Die Bootresetfuse auf 0
und die beiden Bootsize Fuses auch auf 0 also alle 3 Programmiert so das
ich eine Bootsize von 4092 Words Benutze. Dem Entsprechend hab ich die
Linkerflag -tText=0xE000 gesetzt.
Dabei bin ich aber auf ein Problem gestoßen irgendwie Funktioniert das
Interrupthandling nicht so wie ich das gern Hätte. Gleich am Anfang
meines Codes verschiebe ich die Interruptpointer mit:
1 | cli();
|
2 | MCUCR |= (1<<IVCE);
|
3 | MCUCR |= (1<<IVSEL);
|
4 | sei();
|
die Interrupts versuche ich dann wie folgt zu handeln
1 | ISR (USART0_RX_vect)
|
2 | {
|
3 | //RX data receive
|
4 | char c = UDR0;
|
5 | usart_write_byte(c);
|
6 | }
|
Der Handler soll ein Char Empfangen und auch gleich zurück schicken.
Mein Problem besteht darin das der Handler anscheinend nicht ausgelöst
wird. Wenn ich die Verschiebung der Pointer nicht mache und die
Linker-Flag -tText=0xE000 nicht setze und auch die Bootreset Fuse nicht
Programmiere. Also es wie ein normales Programm behandle funktioniert
das auch alles, das heißt es liegt zumin nicht direkt an meinem Code der
das ganze drum herum macht. Was könnte ich noch vergessen haben oder hab
ich irgendwo einen totalen Denkfehler gemacht so das es so garnicht
funktionieren kann.
Mit Freundlichen Grüßen Martin