Forum: Mikrocontroller und Digitale Elektronik SPI Pseudocode/Ablaufdiagramm für Daten senden UND empfangen


von Alex (Gast)


Lesenswert?

Hi

SPI und ich sind gewiss keine Freunde. Ich stelle mir momentan die 
Frage, wie der Code grundsätzlich aussehen soll, wenn ich als Master 
Datenpakete (z.B. uint8_t txData[] = "Alex" und uint8_t rxData[5]) 
sowohl Senden (MOSI) als auch Empfangen (MISO) möchte. Es wird kein 
Interrupt verwendet, sondern eine Blocking Schleife. Das Datenpaket und 
Paketgröße etc. sind gegeben. Es geht mir um den Ablauf, auf was man 
warten muss, und was zuerst kommt. Vielen Dank.

So stelle ich es mir vor:
1
- SPI enable
2
while (index < length):
3
     Wait until TX buffer empty
4
     Send from txData[index] to TX buffer
5
     Wait until RX buffer full
6
     Read from TX buffer into rxData[index]
7
     index++
8
- Wait until line is not busy
9
- SPI disable

Ist dieses Vorgehen richtig oder liege ich komplett falsch?

von c-hater (Gast)


Lesenswert?

Alex schrieb:

> SPI und ich sind gewiss keine Freunde.

Weil du das Prinzip wohl nicht verstanden hast...

> Ich stelle mir momentan die
> Frage, wie der Code grundsätzlich aussehen soll, wenn ich als Master
> Datenpakete (z.B. uint8_t txData[] = "Alex" und uint8_t rxData[5])
> sowohl Senden (MOSI) als auch Empfangen (MISO) möchte.

Das hängt ganz klar vom Peer ab. Du mußt deinen Code entsprechend des 
Verhaltens des Peer schreiben.

> Es geht mir um den Ablauf, auf was man
> warten muss

Du kannst/brauchst nur auf eine einzige Sache warten: dass der 
Austausch(!!!) eines Bytes erfolgt ist. Welches der beiden Flags du dazu 
benutzt, ist im Prinzip völlig huppse. Da es sich um einen 
Austausch(!!!) handelt, ist immer dann, wenn was empfangen wurde auch 
was gesendet worden...

von Alex (Gast)


Lesenswert?

Aaah, okay. Ich glaube, ich muss mir mal einen Slave besorgen, um das 
ganze auszutesten.

Vielen Dank für die Richtigstellung.

Gruß,

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.