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
1 | 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.
1 | 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.
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.
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
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 :)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.