Forum: Compiler & IDEs Funktionsaufruf


von Jörg B. (joerg-sh)


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

von Antwort (Gast)


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,

von Jörg B. (joerg-sh)


Lesenswert?

Das ich den Inhalt des DR Registers zurück bekomme war mir klar. Nur wie 
bekomme ich den Anhand dieser Funktion in meine Variable.

x = SPI0_WriteReadByte();

Funktioniert nicht.

von Jörg B. (joerg-sh)


Lesenswert?

ich nehme alles zurück, es geht doch, ich muss nur einen Wert hinein 
schreiben, also so

x = SPI0_WriteReadByte(y);


vielen Dank

von Jörg B. (joerg-sh)


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

von Rufus Τ. F. (rufus) Benutzerseite


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.

von Jörg B. (joerg-sh)


Lesenswert?

Rat angenommen und unsigned Int genommen. Vielen Dank.

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.