IO Adressen in .S file um 0x20 höher als in .CPP

Gast #3257327
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
Gast #3257334
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
Gast #3257341
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.
Gast #3258339
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

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