Hallo
Ich habe ien klines problem mit einem bootloader.
Wenn ich den ATMEGA32 + rfm12 Modul einschalte, dann startet der
Bootloader, wartet bis zu 3 sekunden, wenn er da ein paket bekommt, dann
flasht er die neue Firmware -> das funktioniert ohne probleme.
Wenn ich aber nur den ATMEGA32 resete, dann startet der bootloader,
bekommt aber keine Pakete und nach 3 sekunden wird die applikation
(Ethersex gestartet)
Wenn ich den ATMEGA32 resetet, während dem reset, das rfm12 modul die
versorgugnsspannung nehme und wieder gebe, dann den resettaster
auslasse, dann funktioniert der bootloader auch.
-> Daher ist meine vermutung, das irgendeine initialisierung vom e6
nicht mehr zurückgenommen wird.
Allerdings konnte ich keine Commands finden, die ein rfm12 Modul Reseten
...
Hier meine init funktionen
die rfm12_wait_read .... wartet dann das der PD3 (INT1) auf Lowlevel
geht, also wird nicht per Interrupt gemacht sondern einfach ein warten
...
beim starten des bootloaders mache ich ein
1
ldi r28, lo8(RAMEND)
2
ldi r29, hi8(RAMEND)
3
out SPH, r29
4
out SPL, r28
5
6
eor r1, r1
7
out SREG, r1
8
ldi r16, _BV (IVCE)
9
out GICR, r16 ; enable change reset vector
10
ldi r16, _BV (IVSEL)
11
out GICR, r16 ; change reset vector to application
daher sollte ja auch kein interrupt aktiv sein, und dazwischen funken,
vermute ich mal
Aber irgendwas übersehe ich da noch ....
Hat da wer noch eine idee dazu?
Eventuell kann jemand etwas zu einem Reset durch den Reseteingang sagen.
Vorstellbar wäre, das ein RFM-Interrupt anhängig ist, beim Reset das
globale interruptflag gesetzt bleibt. Schließlich ist der Reset über den
Reseteingang nicht vergleichbar mit einem power-on-reset (oder doch?).
Ich kämpfte auch mit dem RFM. Bin der Ansicht, daß unterschiedliche
Chips verbaut sind. Du solltest den INT1 auf Interrupt bei fallender
Flanke stellen. Weiterhin solltest du in der Initialisierung den INT1
ausschalten, den TX-FIFO füllen und dann erst INT1 zulassen. Ich hab das
mal in ASM für vollen Interruptbetrieb (SPI-INT und INT1) geschrieben,
hier mal die Befehlsreihenfolge für initialisieren
.db
0,0,0xc0,0xe0,0x80,0xe7,0xc2,0xac,0xa6,0x86,0xc6,0x11,0x94,0xa1,0xc4,0x8
3
.db 0x98,0x50,0xc8,0,0xe0,0,0xca,0x81,0x82,0x00,0xb8,0xaa--- jetzt geht
nirq auf high ---,0xb8,0xaa
.db 0x82,0x39
.db 0,0
Umgesetzt auf C sieht es so aus
rfm12_trans (0x0000);
rfm12_trans (0xC0E0);
rfm12_trans (0x80E7); .... und so weiter
Ach ja, bei reset bei 500 msec delay.
Oh danke für die Info ...
Ich schalte den Interrupt im bootloader ja total aus also das GICR, und
es wird direkt auf den PIN PD3 gewartet.
Wo meinst du 500ms Delay , beim erseht mit 0xffff auf rfm Modul??
Ich werde auf jedenfalls morgen gleich mal deine initialisierungs
commands mit meinen vergleichen, vielleicht passt da die Reihenfolge
nicht, oder ich habe einen übersehen .... Oder oder
Danke auf jedenfall schon mal