Schiavo SPI
Questo modulo include l'astrazione della piattaforma per la comunicazione SPI slave.
Riepilogo
Typedef |
|
---|---|
otPlatSpiSlaveTransactionCompleteCallback)(void *aContext, uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, uint16_t aTransactionLength)
|
typedefbool(*
Indica che una transazione SPI è stata completata con la lunghezza specificata. |
otPlatSpiSlaveTransactionProcessCallback)(void *aContext)
|
typedefvoid(*
Richiamato dopo la chiamata di un callback di completamento della transazione e restituisce TRUE per eseguire eventuali ulteriori elaborazioni. |
Funzioni |
|
---|---|
otPlatSpiSlaveDisable(void)
|
void
Arresta e disabilita l'interfaccia SPI slave.
|
otPlatSpiSlaveEnable(otPlatSpiSlaveTransactionCompleteCallback aCompleteCallback, otPlatSpiSlaveTransactionProcessCallback aProcessCallback, void *aContext)
|
Inizializzare l'interfaccia slave SPI.
|
otPlatSpiSlavePrepareTransaction(uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, bool aRequestTransactionFlag)
|
Prepara i dati per la prossima transazione SPI.
|
Typedef
otPlatSpiSlaveTransactionCompleteCallback
bool(* otPlatSpiSlaveTransactionCompleteCallback)(void *aContext, uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, uint16_t aTransactionLength)
Indica che una transazione SPI è stata completata con la lunghezza specificata.
I dati scritti nello slave sono stati scritti nel puntatore indicato dall'argomento aInputBuf
alla chiamata precedente a otPlatSpiSlavePrepareTransaction()
.
Una volta chiamata questa funzione, otPlatSpiSlavePrepareTransaction()
non è valido e deve essere richiamato affinché la transazione successiva sia valida.
Tieni presente che questa funzione viene sempre chiamata al termine di una transazione, anche se otPlatSpiSlavePrepareTransaction()
non è stato ancora chiamato. In questi casi, aOutputBufLen
e aInputBufLen
saranno pari a zero.
Questo callback può essere chiamato dal contesto ISR. Il valore restituito da questa funzione indica se è necessaria un'ulteriore elaborazione. Se viene restituito TRUE
, l'implementazione del driver spi-slave della piattaforma deve richiamare il callback del processo di transazione (aProcessCallback
impostato in otPlatSpiSlaveEnable()
), che, a differenza di questo callback, deve essere chiamato dallo stesso contesto del sistema operativo che viene chiamato da qualsiasi altra API/callback OpenThread.
Dettagli | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parametri |
|
||||||||||||
Restituisce |
TRUE se, dopo la restituzione di questa chiamata, la piattaforma deve richiamare il callback di processo
aProcessCallback , FALSE se non c'è nulla da elaborare e non è necessario richiamare il callback del processo. |
otPlatSpiSlaveTransactionProcessCallback
void(* otPlatSpiSlaveTransactionProcessCallback)(void *aContext)
Richiamato dopo la chiamata di un callback di completamento della transazione e restituisce TRUE
per eseguire eventuali ulteriori elaborazioni.
A differenza di otPlatSpiSlaveTransactionCompleteCallback
, che può essere chiamata da qualsiasi contesto del sistema operativo (ad es. ISR), questo callback DEVE essere chiamato dallo stesso contesto del sistema operativo di qualsiasi altra API/callback OpenThread.
Dettagli | |||
---|---|---|---|
Parametri |
|
Funzioni
otPlatSpiSlaveDisable
void otPlatSpiSlaveDisable( void )
Arresta e disabilita l'interfaccia SPI slave.
otPlatSpiSlaveEnable
otError otPlatSpiSlaveEnable( otPlatSpiSlaveTransactionCompleteCallback aCompleteCallback, otPlatSpiSlaveTransactionProcessCallback aProcessCallback, void *aContext )
Inizializzare l'interfaccia slave SPI.
Tieni presente che lo slave SPI non è completamente pronto finché non viene preparata una transazione utilizzando otPlatSPISlavePrepareTransaction()
.
Se otPlatSPISlavePrepareTransaction() is not called before the master begins a transaction, the resulting SPI transaction will send all
0xFF" byte ed elimina tutti i byte ricevuti.
Dettagli | |||||||
---|---|---|---|---|---|---|---|
Parametri |
|
||||||
Valori restituiti |
|
otPlatSpiSlavePrepareTransaction
otError otPlatSpiSlavePrepareTransaction( uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, bool aRequestTransactionFlag )
Prepara i dati per la prossima transazione SPI.
I puntatori ai dati DEVONO rimanere validi fino a quando il callback di completamento della transazione non viene chiamato dal driver slave SPI o fino alla successiva chiamata a otPlatSpiSlavePrepareTransaction()
.
Può essere chiamato più di una volta prima che il master SPI avvii la transazione. Ogni chiamata successiva a questa funzione causerà l'eliminazione dei valori precedenti delle chiamate precedenti.
Non chiamare questa funzione dopo una transazione completata è come se questa funzione fosse stata chiamata in precedenza con entrambe le lunghezze del buffer impostate su zero e aRequestTransactionFlag
impostata su false
.
Una volta terminati aOutputBufLen
byte di aOutputBuf
, il pin MISO deve essere impostato su un valore superiore fino al completamento della transazione SPI da parte del master. Questo è l'equivalente funzionale della spaziatura interna alla fine di aOutputBuf
con 0xFF
byte fino alla lunghezza della transazione.
Una volta che i aInputBufLen
byte di aInputBuf sono stati sincronizzati da MOSI, tutti i valori successivi dal pin MOSI vengono ignorati fino a quando il master SPI non completa la transazione.
Tieni presente che, anche se aInputBufLen
o aOutputBufLen
(o entrambi) vengono esauriti prima che l'SPI master termini una transazione, è necessario tenere traccia della dimensione in corso della transazione per poter passare al callback di completamento della transazione. Ad esempio, se aInputBufLen
è uguale a 10 e aOutputBufLen
è uguale a 20 e il master SPI effettua il clock di 30 byte, il valore 30 viene passato al callback di completamento della transazione.
Se un puntatore NULL
viene passato come aOutputBuf
o aInputBuf
, significa che il puntatore del buffer non dovrebbe cambiare rispetto al suo valore precedente/attuale. In questo caso, l'argomento length corrispondente deve essere ignorato. Ad esempio, otPlatSpiSlavePrepareTransaction(NULL, 0, aInputBuf, aInputLen, false)
modifica il puntatore del buffer di input e la sua lunghezza, ma mantiene il puntatore del buffer di output uguale a prima.
Qualsiasi chiamata a questa funzione mentre è in corso una transazione farà sì che tutti gli argomenti vengano ignorati e il valore restituito sia OT_ERROR_BUSY
.
Dettagli | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Parametri |
|
||||||||||
Valori restituiti |
|
Risorse
Gli argomenti di riferimento dell'API OpenThread provengono dal codice sorgente, disponibile su GitHub. Per saperne di più o per contribuire alla nostra documentazione, consulta la sezione Risorse.