Funktionsaufruf

OP #2579042
Lesenswert?

Ich habe folgende Funktion gefunden welche wohl gleichzeitig SPI 
schreibt und liest.

1
unsigned char SPI0_WriteReadByte(unsigned char Data)
2
{
3
    while((SPI1->SR & SPI_I2S_FLAG_TXE) == RESET);
4

5
    SPI1->DR =  Data;
6
    while((SPI1->SR & SPI_I2S_FLAG_RXNE) == RESET);
7

8
    return (SPI1->DR);
9
}

Mit
1
SPI0_WriteReadByte(0x90);

übergebe ich einen  Wert. Wo/wie bekomme ich aber einen Wert zurück?


Gleich noch eine 2.Frage.

wie mache ich ich aus 2 unsigned Char Variablen eine int Variable?



Grüße

Jörg
Gast #2579048
Lesenswert?

>Wo/wie bekomme ich aber einen Wert zurück?

Als Funktionswert (return (SPI1->DR);)?

wie mache ich ich aus 2 unsigned Char Variablen eine int Variable?

unsigned char high;
unsigned char low;

int my_int;

my_int = high << 8 | low;

HDH,
OP #2586495
Lesenswert?

noch mal eine Frage zum Bitschieben.
1
unsigned char high;
2
unsigned char low;
3

4
int my_int;
5

6
my_int = high << 8 | low;


Ich habe aber im 1 Byte das high Byte und im 2. nur 4 bit.

Die 12 Bit kommen der Reihe nach angefangen mit bit 11 über den SPI bus. 
Die fehlenden 4 bit werden mit Nullen aufgefüllt.

Wie bekomme ich das jetzt in eine Variable?

Gruß und Danke

Jörg
Persönliche Seite #2586513
Lesenswert?

Na, so halt:
1
unsigned char high8bit;
2
unsigned char low4bit;
3

4
int my_int;
5

6
my_int = high8bit << 4 | (low4bit & 0x0f);

(die AND-Maskierung von low4bit kann entfallen, wenn sichergestellt ist, 
daß die ungenutzten oberen 4 Bit darin 0 sind)

Daß es nicht ratsam ist, so etwas mit einem int zu veranstalten -- 
Vorzeichen! -- sollte Dir allerdings klarsein. Nimm besser einen 
unsigned int als Ziel.

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