www.mikrocontroller.net

Forum: FPGA, VHDL & Co. sorry nochma ne Frage zur Datenübernahme SPI/Schieberegister


Autor: Steve (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo diese Frage geht an alle aber besonders auch an Lothar, weil ich 
ein Stück seiner Codepassage noch nicht ganz verstehe.

Ich versuche gerade eine SPI Slave in meinem FPGA zu implementieren, 
aber leider klappt es noch nicht so ganz. Ich hab mich bei meinem Code 
ziemlich an Falk Brunners Code orientiert.

Ich hab  dann nur einen Prozess in eine State Machine verändert, da ich 
für mein weiteres Programm noch ein Rxrdy usw. benötige.

Ich hab Verstanden, dass ich die Datenausgabe synchronisieren muss, 
jedoch verstehe ich nicht ganz wie dieser Codeabschnitt funktioniert:

SS_sr   <= SS_sr(0) & SS;      -- Slave-Select

if (SS_sr="10") then           -- fallende Flanke

Ich hab Ihn in einem anderen SPI Forumeintrag gefunden und Lothar hat 
ihn geposted. Ich versteh nicht, wie das als ein Schieberegister 
funktionieren soll. Ich dachte das SS wird immer nur auf das zweite Bit 
vom SS_sr geschrieben, also wie kann da jemals die Kombination 
SS_sr="10" zustandekommen?

Da mein SPI Master das SS bei Selektion des Slaves von 0 auf 1 geht und 
bei Deselektion von 1 auf 0 musste ich im Gegensatz zu Falks Code auf 
eine fallende Flanke schauen, um eine Synchronisation zu bewirken.

Vielleicht kannst Du mir ja nochmal helfen Lothar....wäre echt super.
Andere Kommentare sind nat. auch erwünscht.


mfg

Steve

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
SS_sr   <= SS_sr(0) & SS;
Hier wird über den concatenation-Operator & ein 2 Bit breiter Vektor aus 
dem "alten" SS_sr Bit 0 und dem "neuen" SS im SS_sr zusammengesetzt.
if (SS_sr="10") then ...
Und wenn der alte Wert "1" ist und der neue Wert "0", dann ist das SS_sr 
"10" und damit wird eine fallende Flanke erkannt.

Autor: Iulius (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mal ein Beispiel...

zu Beginn sei SS_sr = "00"

nun nehmen wir an SS wäre '1'.

Daraus ergibt sich : SS_sr   <= '0' & '1';
also SS_sr <= "01"

Die Null kommt in dem Fall von der "rechtesten" Stelle, also Position 0 
-> ganz recht im Bitstring von SS_sr.

im nächsten Takt mit SS = '0' dann entsprechend :

SS_sr   <= '1' & '0';
also SS_sr <= "01"

die '1' diesmal, weil vor der Operation ganz rechts eine 1 in SS_sr 
stand und diese nun ganz ganz links hin rutscht und an die rechte 
Position wieder SS wandert.

Autor: Steve (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ahh endlich hab ichs kapiert :)...Gott sei Dank....trotzdem kann es 
sein, dass Du Dich bei Deinem 2. Beispiel verschrieben hast?

müsste statt dem hier:

SS_sr   <= '1' & '0';
also SS_sr <= "01"

nicht

SS_sr   <= '1' & '0';
also SS_sr <= "10"

rauskommen?

mfg

Steve

Autor: Iulius (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gut aufgepasst, da hat copy und paste wohl zugeschlagen.

Na jedenfalls ist jetzt klar das du es verstanden hast und das war ja 
die Hauptsache :)

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [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.
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.

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