Adressen verstehen im Datenblatt

Gast #4890357
Lesenswert?

Guten Tag Miteinander

ich versuche mich zur Zeit mit avr assembler (avra) und einem Simulator 
ein Zeichen über die serielle Schnittstelle zu schicken.
Beim Debuggen fällt mir auf, dass das Register UDR in der atmega8 
definition auf .equ UDR = 0x0c steht.
Im Simulator wird jedoch UDR an Stelle 0x2c dargestellt.
Im Datenblatt.. und jetzt zur Frage... steht UDR 0x0c (0x2c) ....

Was bedeutet das, wenn im Datenblatt von atmega8 in der 
Registerübersicht UDR 0x0c(0x2c) steht? Ist die Adresse nun die, die 
ohne Klammer da steht, oder die in der Klammer?

Danke und Grüße
Denis
#4890363
Lesenswert?

UDR hat die Adresse 0x2C, wird aber in den IN/OUT Befehlen mit 0x0C 
adressiert, da der I/O-Bereich bei 0x20 beginnt.

Besonders gelungen ist diese auf den Assembler durchgreifende Methode 
von Atmel nicht, da IN/OUT nur 64 Bytes adressieren können und jenseits 
davon LDS/STS genutzt werden müssen. Mit IN/OUT adressiert man es also 
mit 0x0C, mit LDS/STS aber mit 0x2C.
Gast #4890372
Lesenswert?

Hi

>Was bedeutet das, wenn im Datenblatt von atmega8 in der
>Registerübersicht UDR 0x0c(0x2c) steht? Ist die Adresse nun die, die
>ohne Klammer da steht, oder die in der Klammer?

Das ein ist die Adresse (ohne Klammern) die für Befehle wie 
in/out/cbr/sbr, also Bafehle in IO-Adressraun verwendet werden. Ohne 
Klammer sind Adressen die in RAM verwentet werden, also z.B. sts /lds 
für diese Register.

MfG Spess
#4890376
Lesenswert?

Hi

Dafür nutze ich folgende Macros:
1
; Makros für AVR-Assemblerprogramme
2
; Dr. Michael Schramm Softwareentwicklung
3
; www.schramm-software.de
4
... weitere Makros ...
5
.macro out_ ;(I/O-Reg, reg)
6
.if (@0 < 64)
7
  out  @0,@1
8
.else
9
  sts  @0,@1
10
.endif
11
.endmacro
12

13
.macro in_ ;(reg, I/O-Reg)
14
.if (@1 < 64)
15
  in  @0,@1
16
.else
17
  lds  @0,@1
18
.endif
19
.endmacro
20
... weitere Makros ...
IN/OUT brauchen je einen Tick, STS/LDS je Zwei
Die Makros ersetzen den Befehl 1:1 mit dem nötigen Befehl.

MfG
Gast #4890383
Lesenswert?

Oha...


Könnte man dann anstatt out einfach nur sts nutzen um in die Register zu 
schreiben?
Ein paar Experimente diesbezüglich funktionierten, nur das UDR 
beschreibt sich in keiner Weise. Ich schätze, ich muss zuvor andere 
Dinge machen, bevor ich das Beschreiben darf....

Danke für die Antwort - schnelle Antwort.
Gast #4890419
Lesenswert?

>Ein paar Experimente diesbezüglich funktionierten, nur das UDR
>beschreibt sich in keiner Weise.

Du versuchst doch hoffentlich nicht UDR zu lesen um
nachzusehen ob das drin steht was du geschrieben hast.
Das geht gar nicht!

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