ersetzen von in/out durch lds/sts

Gast #147199
Lesenswert?

hallo,
ich bin dabei ein assembler-projekt vom atmega8 auf den atmega88
anzupassen.
ich benutze das avr-studio und das ice-mk2.
in den application notes von atmel steht, dass man, um die I/O register
zu beschreiben einfach nur die befehle in/out durch lds/sts ersetzen
soll.
grund: beim atmega8 sind die adressen der register im bereich 0x00-0x31
und beim atmega88 werden sie in den sram bereich gemapped.

speziell geht es hier um folgendes problem:
atmega8:
ldi R24,UBR ; Baud rate = 19.200 bps UBR=33
out UBRRL,R24

atmega88:
ldi R24,UBR ; Baud rate = 19.200 bps UBR=33
sts UBRR0L,R24

im debugger werden die bits nicht in die register geschrieben.
daher funktioniert da die uart nicht.

wer weis abhilfe?
Gast #147203
Lesenswert?

das sollte eigentlich das include file machen... also es steht zumindest
drin das in/out nicht funzt... also wird die adresse schon stimmen.
hast du dir das app note "migration from mega8 to mega88" angeguckt?
da steht das bei der initialiersierung irgendwas anders ist...

ganz was anderes... im datenblatt find ich kein UBRR0L=33 für 19.2
Gast #147205
Lesenswert?

interruptvektoren und adressoffsets werden im includefile geregelt.
muss man irgenwas freischalten, um auf die erweiterten I/O Register
zugreifen zu können?
wenn ich mir ein c prog schreibe und das debugge wird im disassembler
auf die register genauso zugegriffen, wie es auch von atmel
vorgeschlagen wird. seltsamerweise funktiert es da, allerdings im
richtigen assemblerprog nicht.

(UBRR0L=33 für 19.2 war übrigens leider ein falscher kommentar :-))

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren