Wie erfährt MSP430 als SPI-Master, wann ein Zeichen vom Slave fertig gelesen wurde?

Gast #1635809
Lesenswert?
• ▲
▼
Hallo,

hab einen MSP430 als SPI-Master. Die Daten vom SPI-Slave werden ja so 
gelesen:

- Slave stellt ein Zeichen in seinem Schieberegister bereit und wartet 
auf Takt
- Master zieht SS auf low ( wenn 4-Wire-Mode )
- In Tx-Buffer des Masters wird ein Dummy-Byte geschrieben
- Master erzeugt Takt und liest das Zeichen vom Slave
- Wenn Zeichen vollständig gelesen, Master liest das nächste Zeichen 
oder zieht SS auf high


Nun meine Frage:

Wie erfährt der MSP430, wann er das Zeichen vollständig empfangen hat? 
Mit dem Auswerten des TxFlags klappt es leider nicht, weil es nur 
signalisiert, wann der Tx-Buffer zur Annahme des nächsten zu sendende 
Zeichens bereit ist und nicht wann das aktuell zu sendende Zeichen 
vollständig aus dem ensprechenden Shift-Register rausgeschoben wurde.
Gast #1635876
Lesenswert?
• ▲
▼
Hallo Rainer,

danke für die Antwort! Mit dem Abfragen des Tx-Register-empty-Flags 
(heißt beim MSP430 einfach TXIFG - Tx-Interrupt Flag) geht es eben 
nicht, wie ich oben geschrieben habe. Das Problem ist, dass das 
SPI-Sendemodul des MSP430 zum Senden zwei Register hat, einen 
Buffer-Register und einen Shift-Register. Zum Senden müssen Zeichen in 
den Buffer-Register geschrieben werden. Wenn Schieberegister leer ist, 
wird das Zeichen aus dem Buffer in Shift-Reg. geschrieben und dann im 
Takt rausgeschiftet. Das TXIFG-Bit signalisiert, wann das Buffer-Reg. 
leer ist, damit man das nächste Zeichen dort hineinschreiben kann. 
Shift-Reg. ist aber noch eine ganze Weile nicht leer, auch wenn Buffer 
schon leer ist und TXIFG-Bit gesetzt wurde. Wenn man also SS sofort 
deaktiviert, gleich nach dem TXIFG gesetzt wurde, wird das letzte 
Zeichen vom Slave nicht empfangen.
Gast #1635993
Lesenswert?
• ▲
▼
Danke für die Antworten! Ich glaube, ich habe eine Lösung. Das SPI-Modul 
des Controllers hat im SPI-Statusregister ein BUSY-Bit. Es zeigt, wann 
eine Übertragung aktiv ist. Ich habe es vorher nie benutzt und kannte es 
nicht, aber es scheint genau für einen Fall wie meinen da zu sein.
Gast #1636469
Lesenswert?
• ▲
▼
>Wie erfährt der MSP430, wann er das Zeichen vollständig empfangen hat?
>Mit dem Auswerten des TxFlags klappt es leider nicht

Ja wie wohl er empfängt ja das Byte.. Desshalb würd ich wohl die 
Rx-Flags auswerten.. Beim MSP430F169 währen dies wohl URXIFGO oder 
URXIFG1

Im MSP430xF1xx User Guide (SLAU049F.pdf) steht:

URXIFG0 Bit 6 USART0 receive interrupt flag. URXIFG0 is set when U0RXBUF
              has received a complete character.
              0 No interrupt pending
              1 Interrupt pending

Also wenn das Bit URXIFG0 gesetzt ist wurde das Byte empfangen.

cheers
Gast #1637556
Lesenswert?
• ▲
▼
Das Problem mit dem Empfangen von Zeichen ist jetzt dank euch gelöst! 
Jetzt habe ich noch folgende Frage:

Wenn der SPI-Master Zeichen lesen will, muss er ja ein Dummy-Zeichen 
schicken um Takt zu erzeugen. Wenn jetzt aber das SPI im Slave so 
funktioniert, dass beim Emfangen dieses Dummy-Zeichens im Slave ein 
Interrupt ausgelöst wird, so führt dieses Dummy ja möglicherweise zu 
Timing-Problemen im Slave. Wie kann ich auf der Seite des Masters dafür 
sorgen, dass so etwas vermieden wird?

Was mir da einfällt, ist die Möglichkeit, den MOSI-Pin des Masters für 
die Dauer des Lesevorganges per Software zu deaktivieren. Im MSP430 
müsste man dazu den Pin wieder als I/O-Pin konfigurieren. Ich weiß aber 
nicht, wie gut diese Lösung ist. Da vergeht ja auch Zeit beim 
Umkonfigurieren. Gibt es da übliche gute Lösungen dazu??

Danke schon mal!!!

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.