Forum: Mikrocontroller und Digitale Elektronik IO Adressen in .S file um 0x20 höher als in .CPP


von Neo (Gast)


Lesenswert?

Hallo Forenmitglieder,
Bei meinem Projekt sind die IO Adressen im .S file um 0x20 höher als im 
Datasheet also meistens außer Range. Im .cpp file ist alles normal. Ich 
weiß wirklicht nicht woran das liegen kann.

Kurzes Beispiel:

C_file:
1
#include <avr/io.h>
2
3
extern "C" void SPI_PUT_WORD(uint8_t pword);
4
5
int main(void)
6
{
7
  SPI_PUT_WORD(0x0000);
8
    while(1)
9
    {
10
        //TODO:: Please write your application code 
11
    }
12
}

ASM File:
1
#include <avr/io.h>
2
3
.global SPI_PUT_WORD
4
5
SPI_PUT_WORD:  sbi (PORTB-0x20),4  ;funktioniert
6
                sbi PORTB,4         ;Fehler
7
8
    nop
9
          ret

Könnte mir jemand bitte helfen

von holger (Gast)


Lesenswert?

Versuchs mal so:
1
#define __ASSEMBLER__ 1
2
#define __SFR_OFFSET 0
3
4
#include <avr/io.h>
5
...
6
...

von Spess53 (Gast)


Lesenswert?

Hi

>Bei meinem Projekt sind die IO Adressen im .S file um 0x20 höher als im
>Datasheet also meistens außer Range.

Weil das nicht die IO-Adressen sondern die Speicher-Adressen der 
Register sind. Und die sind 0x20 größer als die IO-Adressen.

MfG Spess

von Neo (Gast)


Lesenswert?

Super funktioniert. Woran liegt das jetzt genau?

von Hmm (Gast)


Lesenswert?

>Woran liegt das jetzt genau?

Spess war schon so freundlich:

>Weil das nicht die IO-Adressen sondern die Speicher-Adressen der
>Register sind. Und die sind 0x20 größer als die IO-Adressen.

Wenn Du das Datenblatt schon vor Dir hast, dann guck noch mal nach.

von Neo (Gast)


Lesenswert?

Entschuldige, ich habe den Post von Spess übersehen. Im Datenblatt sind 
im Register Summary für jedes Register zwei Adressen aufgeführt. D.h. 
die eine ist die Speicheradresse und die andere die IO Adresse.
Vielen Dank für die Hilfe

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.