albi1989
07.02.2008, 20:03
Ich versuche grade einen Bootloader selber zu schreiben für den Atmega16 als Hilfe habe ich mir einen BL für den Atmega8 besorgt um mir quasi alles anzugucken und zu lernen wie es geht
http://home.planet.nl/~winko001/ <== da habe ich den her
Folgende Sachen versteh ich net/ net so ganz:
ldi temp1, 0x01 //interruptvektoren-tabelle
out IO_REG(GICR), temp1 // ins boot loader flash verschieben
ldi temp1, 0x02
out IO_REG(GICR), temp1
Hier werden denke ich mal der die Interrupts Init. aber warum 0x01
ich kenn wohl zb. 0b010101000 um ein bitMuster ins Register zu laden
Könnte Hex sein aber warum dann zweimal rein laden???
Ach ja
IO_REG ist:
#define IO_REG(n) _SFR_IO_ADDR(n)
So dann wird in dem Bootlaoder ein Spannungstest durchgeführt
in dem auf den high wert der r1 hinzugefügt wird Carry wert da das mit adc passiert so nun die Frage was ist das für ein Register und was ist da drin ?
batt_loop:
sbic IO_REG(ADCSRA), ADSC
rjmp batt_loop
in temp1, IO_REG(ADCL)
in INT_REG_H, IO_REG(ADCH)
clr INT_REG_L
add INT_REG_L, temp1
adc INT_REG_H, r1
subi INT_REG_L, lo8(BATT_MIN)
sbci INT_REG_H, hi8(BATT_MIN)
brcc batt_ok
So letzte Frage:
ldi ZL, lo8(__vectors)// adresse bootloader-start
ldi ZH, hi8(__vectors)
ijmp // indirect jump zum programmstart
Z= Zeiger für den ijmp aber wo find ichd ie defs. für lo8 hi8 oder __vectors
Danke an all die freundlichen und netten Menschen die mir hoffentlich helfen werden
MFG
Der Albi
http://home.planet.nl/~winko001/ <== da habe ich den her
Folgende Sachen versteh ich net/ net so ganz:
ldi temp1, 0x01 //interruptvektoren-tabelle
out IO_REG(GICR), temp1 // ins boot loader flash verschieben
ldi temp1, 0x02
out IO_REG(GICR), temp1
Hier werden denke ich mal der die Interrupts Init. aber warum 0x01
ich kenn wohl zb. 0b010101000 um ein bitMuster ins Register zu laden
Könnte Hex sein aber warum dann zweimal rein laden???
Ach ja
IO_REG ist:
#define IO_REG(n) _SFR_IO_ADDR(n)
So dann wird in dem Bootlaoder ein Spannungstest durchgeführt
in dem auf den high wert der r1 hinzugefügt wird Carry wert da das mit adc passiert so nun die Frage was ist das für ein Register und was ist da drin ?
batt_loop:
sbic IO_REG(ADCSRA), ADSC
rjmp batt_loop
in temp1, IO_REG(ADCL)
in INT_REG_H, IO_REG(ADCH)
clr INT_REG_L
add INT_REG_L, temp1
adc INT_REG_H, r1
subi INT_REG_L, lo8(BATT_MIN)
sbci INT_REG_H, hi8(BATT_MIN)
brcc batt_ok
So letzte Frage:
ldi ZL, lo8(__vectors)// adresse bootloader-start
ldi ZH, hi8(__vectors)
ijmp // indirect jump zum programmstart
Z= Zeiger für den ijmp aber wo find ichd ie defs. für lo8 hi8 oder __vectors
Danke an all die freundlichen und netten Menschen die mir hoffentlich helfen werden
MFG
Der Albi