Hilfe bei Script Übersetzung Bootloader (Assembler)
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:
Code:
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 ?
Code:
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:
Code:
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
Schade das sich noch keiner gemeldet hat
Schade das noch keiner eine Antwort reingeschrieben hat naja mir sind da dann letztens ein paar Erkenntnisse gekommen also ich geh mal dvon aus das in C der datentyp Char 16bit hat also aus 2 register besteht dann denk ich ist lo8 und hi8 nur einmal die untersten 8 und die obersten 8 bit aus diesen zusammen gefassten. Aber das ist doch immer noch kein typischer asm. befehl ?
Dann bin ich mir auch ziemlich sicher das 0x01 <== das das ein Hex wert ist naja und damit erklärt sich dann meine erste Frage von selbst.
Naja nur ich versteh noch nicht warum er da IO_REG(GICR) hingeschreiben hat reicht nicht eig auch einfach nur GICR ?
dann komtm noche in frage hinzu in den Globalen C variablen hat er da rein geschrieben
volatile unsigned char flash_buffer[SPM_PAGESIZE]
woher komtm der Befehl SPM_PAGESIZE ???
Sooo aber bei den Rest bin ich noch net weiter.