Forum: Mikrocontroller und Digitale Elektronik SPI Schieberegister und RX_Buffer TI-Controller TMS320F28035


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Mark J. (markjo)


Lesenswert?

Hallo Leute,

ich habe 2 Microcontroller über SPI verbunden, der eine agiert als 
Master und der andere als Slave. Ich verwende die Controller von TI 
TMS320F28035. Das Senden der Daten funktioniert sie kommen erfolgreich 
im SPIDAT Register an das ist das Schieberegister, danach sollte das 
Schieberegister die Daten an dem Buffer SPIRXBUF weiterleiten. Mein 
Problem ist jetzt dass das Schieberegister immer die Daten empfängt aber 
nicht immer an dem Buffer weiterleitet von 4-5 senden funktioniert es 
ca. 4 mal und dann leitet er die Daten nicht richtig weiter sondern nur 
halb oder keine erkennbaren Daten. Kann mir jemand vielleicht 
weiterhelfen warum die Daten nicht immer an dem RXBuffer weitergeleitet 
werden, was ja eigentlich sein müsste.

Danke für eure Hilfe im Vorraus.

Mfg
Mark

von Walter T. (nicolas)


Lesenswert?

Welches Protokoll hast Du denn für EOT (end of transmission) definiert? 
timeout oder deselect?

Du musst halt irgendwie sicherstellen, dass bei jedem sendeseitige 
Byte-Ende auch empfangsseitig 8 Bit durchgelaufen sind.

Edit: Tippfehler. Es war ein langer Tag.

: Bearbeitet durch User
von Mark J. (markjo)


Lesenswert?

was meinst du genau mit end of transmission ich habe jetzt nicht gesehen 
das man das genau festlegen kann. Ich verwende aufjedenfall keinen FIFO. 
Der RX Buffer hat aufjedenfall 16 bit und ich sende zweimal 
hintereinander 8 Bit also im SPIDAT kommen die aufjedenfall immer an nur 
er überträgt die wie gesagt nicht immer vollständig in dem RX-Buffer. 
Weißt du welches Register für das End of Transmission bei TI zuständig 
ist? ;)

von Mark J. (markjo)


Angehängte Dateien:

Lesenswert?

hier habe ich mal eine Tabelle erstellt für das Schieberegister und die 
Buffer vom Slave und Master. Als Beispiel daten habe ich die 0x1234 
gesendet beim ersten senden klappt es aber beim 2ten und 3ten dann nicht 
mehr wie man sieht landen dann die daten vom Schieberegister nicht mehr 
in dem Buffer. nach dem 6ten senden ist wieder alles Inordnung.

von Peter D. (peda)


Lesenswert?

MCs sind oftmals nur schlecht als SPI-Slave geeignet. Das Problem ist, 
daß SPI kein Handshake kennt, d.h. keinerlei Flußkontrolle besitzt.
Man kann sich behelfen, indem man dem SPI-Interrupt die absolut höchste 
Priorität gibt, so daß keine andere Task ihn verzögern kann.
Oder der Master legt nach jedem Byte eine ausreichende Pause ein, was 
das SPI aber erheblich ausbremst.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.