Unterschied zwischen SMPEND und SMPMID

Ich verbinde einen SPI-Chip mit einem PIC18-Gerät, das mit einem C-Programm programmiert ist, das mit dem XC8-Compiler kompiliert wurde, und Bibliotheken von plib.h. In der Doku habe ich gelesen:

void OpenSPI( unsigned char sync_mode,
              unsigned char bus_mode,
              unsigned char smp_phase);

smp_phase
Einer der folgenden Werte, definiert in spi.h:
SMPEND: Eingabedaten-Sample am Ende der Datenausgabe
SMPMID: Eingabedaten-Sample in der Mitte der Datenausgabe

Was ändert dieser Parameter?

Ich schließe den ENC28J60 an und habe herausgefunden, dass beide Werte für smp_phasezu einer funktionierenden Verbindung führen. Gibt es Chips, die mit beiden Werten nicht funktionieren würden, und wenn nicht, was nützt die Einstellung?

Antworten (1)

Wie bei all diesen Problemen auf niedriger Ebene müssen Sie das Datenblatt lesen. Es ist in Ordnung, Bibliotheksroutinen aufzurufen, aber auf diesen kleinen Systemen mit begrenzten Ressourcen, wo Sie immer in der Nähe der Hardware sind, müssen Sie wissen, was auf der unteren Ebene vor sich geht, ob dies in einer Bibliotheksroutine oder in Ihrem eigenen Code geschieht.

Lesen Sie den SPI-Teil des Kapitels für das MSSP-Peripheriegerät. Das geht ins Detail über diese Modi und beinhaltet Timing-Diagramme für die verschiedenen Kombinationen. Ich könnte etwas davon hier kopieren, aber das wäre sinnlos, da Sie sowieso das Datenblatt lesen müssen.

Dies ist ein gutes Beispiel, bei dem es tatsächlich einfacher gewesen wäre, den Code selbst zu schreiben, als eine Bibliotheksroutine aufzurufen. Das liegt nicht daran, dass der Aufruf schwierig ist, sondern um zu überprüfen, ob die Bibliothek eines anderen genau das tut, was Sie benötigen, dauert es länger, als nur die Hardware überhaupt erst so einzurichten. Es müssen nur 2 8-Bit-Register eingerichtet werden, um das MSSP zu verwenden, was zu 4 Anweisungen führen sollte.