In pic18f45k20 muss ich 4-Byte-Daten auf einmal ohne Setup-SCK-Verzögerung über SPI schreiben. Gibt es eine Möglichkeit, die SCK-Verzögerung aufzuheben, während 4 Bytes zusammen gesendet werden? (wie Assembly) Ich verwende MPLAB-XC8 und Hitech c. In 10 MHz SPI habe ich eine SCK-Verzögerung von 460 ns zwischen zwei Bytes. Ich möchte diese Verzögerung jedoch aufheben, um 4-Byte-Daten auf einmal zu schreiben.
Zitieren Sie aus dem 18F4550-Datenblatt, das in Bezug auf SPI gleich sein sollte:
Bei Empfangsoperationen erzeugen SSPSR und SSPBUF zusammen einen doppelt gepufferten Empfänger. Wenn SSPSR ein vollständiges Byte empfängt, wird es an SSPBUF übertragen und der SSPIF-Interrupt wird gesetzt.
Während der Übertragung wird der SSPBUF nicht doppelt gepuffert. Ein Schreiben in SSPBUF wird sowohl in SSPBUF als auch in SSPSR schreiben.
SSPBUF
ist ein 1-Byte-Puffer und SSPSR
ist ein Schieberegister, das tatsächlich mit den IO-Pins verbunden ist.
Das bedeutet, dass der Master praktisch keinen Puffer zum Senden von Daten hat. Nach dem Senden eines Bytes muss ein neues Byte in die geschrieben SSPBUF
und ein neuer Sendevorgang angestoßen werden. Dies nimmt immer Zeit in Anspruch, die sich als Verzögerung zwischen Byteübertragungen bemerkbar macht.
Wenn die Reduzierung der SPI-Geschwindigkeit, bis die Verzögerung vernachlässigbar ist, nicht in Ordnung ist, müssen Sie die SPI-Übertragung in Software implementieren. Dies ist langsamer als die schnelleren SPI-Hardwaremodi!
Beachten Sie die unterschiedlichen Taktzyklen, die die Anweisungen benötigen. Sie benötigen mehrere NOP
Sekunden, um ein gut definiertes SPI-Signal mit einem Taktverhältnis von 50 % zu erhalten. Ich habe das vor einigen Jahren gemacht und kann es Ende dieser Woche zeigen, da ich gerade im Urlaub bin.
Die Mikrochip-Bibliotheken bieten auch Software-SPI an. Aber ich bezweifle, dass sie Multi-Byte-Übertragungen nahtlos durchführen können.
Wladimir Cravero