Forum: Mikrocontroller und Digitale Elektronik AVR IO Register indirekt auslesen


von Gad Z. (gad)


Lesenswert?

Hallo an Alle,
ich habe mal wieder ein Problem und finde keine Lösung.

Ich habe eine Steuerung mit einem Atmega 1284P.
Mit der kann ich mich über USB verbinden und beliebige Daten aus dem 
Sram / Eeprom lesen und schreiben.
Nun möchte ich aber meine Datenaufzeichnung erweitern und gerne den 
Status einiger IO-Register mitschreiben.

Gibt es eine Möglichkeit, ein IO-Register (z.B. PORTA) mit einer Adresse 
indirekt zu laden?
Oder gehen da wirklich nur die Befehle IN, LDS?

Laut Hilfe würde der Befehl elpm den IO-Space ansprechen.
Aber leider meinen die nur den normalen Speicherbereich.

von spess53 (Gast)


Lesenswert?

Hi

>Laut Hilfe würde der Befehl elpm den IO-Space ansprechen.
>Aber leider meinen die nur den normalen Speicherbereich.

Den IO-Bereich erreichst du z.B. mit mit ld rd,Z. Z muss dazu mit 
Speicheradresse deines Registers geladen werden.

MfG Spess

von Amateur (Gast)


Lesenswert?

Die Hausnummern zu den internen Registern findest Du im Handbuch im 
Kapitel: "30. Register summary".

von Gad Z. (gad)


Lesenswert?

Danke Spess53,
ich war wohl blind oder wollte nicht glauben, das es so einfach ist.
Aber es geht wirklich mit LD wenn ich zum IO-Register noch doe 0x0020 
dazu addiere, weil die IO-Register erst bei 0x0020 anfangen.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

spess53 schrieb:
> Den IO-Bereich erreichst du z.B. mit mit ld rd,Z. Z muss dazu mit
> Speicheradresse deines Registers geladen werden.

 Und die Adresse in Klammern nehmen (höhere).
 PortA = 0x22
 PortB = 0x25
 ...
 PortG = 0x34

von spess53 (Gast)


Lesenswert?

Hi

>Aber es geht wirklich mit LD wenn ich zum IO-Register noch doe 0x0020
>dazu addiere, weil die IO-Register erst bei 0x0020 anfangen.

Aber nur im IO-Bereich von 0..0x3F. Im extended IO-Bereich ab 0x60 darf 
keine 0x20 addiert werden.

MfG Spess

von Gad Z. (gad)


Lesenswert?

spess53 schrieb:
> Hi
>
>>Aber es geht wirklich mit LD wenn ich zum IO-Register noch doe 0x0020
>>dazu addiere, weil die IO-Register erst bei 0x0020 anfangen.
>
> Aber nur im IO-Bereich von 0..0x3F. Im extended IO-Bereich ab 0x60 darf
> keine 0x20 addiert werden.
>
> MfG Spess

Danke für den Tip, das hatte ich übersehen...
Wäre mir wahrscheinlich garnicht aufgefallen weil hauptsächlich nur die 
PORTA-PORTD auslesen will :-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.