SPI subordinado
Este módulo inclui a abstração da plataforma para comunicação escravo do SPI.
Resumo
Typedefs |
|
---|---|
otPlatSpiSlaveTransactionCompleteCallback)(void *aContext, uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, uint16_t aTransactionLength)
|
typedefbool(*
Indica que uma transação SPI foi concluída com o tamanho especificado. |
otPlatSpiSlaveTransactionProcessCallback)(void *aContext)
|
typedefvoid(*
Invocado após um callback de conclusão de transação sendo chamado e retorna TRUE para fazer qualquer processamento adicional necessário. |
remotas |
|
---|---|
otPlatSpiSlaveDisable(void)
|
void
Encerre e desative a interface subordinada do SPI.
|
otPlatSpiSlaveEnable(otPlatSpiSlaveTransactionCompleteCallback aCompleteCallback, otPlatSpiSlaveTransactionProcessCallback aProcessCallback, void *aContext)
|
Inicializar a interface subordinada do SPI.
|
otPlatSpiSlavePrepareTransaction(uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, bool aRequestTransactionFlag)
|
Preparar dados para a próxima transação do SPI.
|
Typedefs
otPlatSpiSlaveTransactionCompleteCallback
bool(* otPlatSpiSlaveTransactionCompleteCallback)(void *aContext, uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, uint16_t aTransactionLength)
Indica que uma transação SPI foi concluída com o tamanho especificado.
Os dados gravados no escravo foram gravados no ponteiro indicado pelo argumento aInputBuf
na chamada anterior para otPlatSpiSlavePrepareTransaction()
.
Depois que essa função é chamada, otPlatSpiSlavePrepareTransaction()
é inválido e precisa ser chamado novamente para que a próxima transação seja válida.
Observe que essa função é sempre chamada no final de uma transação, mesmo que otPlatSpiSlavePrepareTransaction()
ainda não tenha sido chamado. Nesses casos, aOutputBufLen
e aInputBufLen
serão zero.
É possível chamar esse callback no contexto de ISR. O valor de retorno dessa função indica se algum processamento adicional é necessário. Se TRUE
for retornado, a implementação do driver escravo da plataforma precisará invocar o callback do processo de transação (aProcessCallback
definido em otPlatSpiSlaveEnable()
). Ao contrário desse callback, ele precisará ser chamado no mesmo contexto do SO que qualquer outra API/callback OpenThread é chamado.
Detalhes | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parâmetros |
|
||||||||||||
Retorna |
TRUE se, depois da chamada, a plataforma retornar o callback do processo
aProcessCallback , e FALSE se não houver nada a ser processado e a necessidade de invocar o callback do processo. |
otPlatSpiSlaveTransactionProcessCallback
void(* otPlatSpiSlaveTransactionProcessCallback)(void *aContext)
Invocado após um callback de conclusão de transação sendo chamado e retorna TRUE
para fazer qualquer processamento adicional necessário.
Ao contrário de otPlatSpiSlaveTransactionCompleteCallback
, que pode ser chamado em qualquer contexto do SO (por exemplo, ISR), esse callback PRECISA ser chamado no mesmo contexto do SO que qualquer outra API/callback OpenThread.
Detalhes | |||
---|---|---|---|
Parâmetros |
|
remotas
otPlatSpiSlaveDisable
void otPlatSpiSlaveDisable( void )
Encerre e desative a interface subordinada do SPI.
otPlatSpiSlaveEnable
otError otPlatSpiSlaveEnable( otPlatSpiSlaveTransactionCompleteCallback aCompleteCallback, otPlatSpiSlaveTransactionProcessCallback aProcessCallback, void *aContext )
Inicializar a interface subordinada do SPI.
O SPI subordinado não estará totalmente pronto até que uma transação seja preparada usando otPlatSPISlavePrepareTransaction()
.
Se otPlatSPISlavePrepareTransaction() is not called before the master begins a transaction, the resulting SPI transaction will send all
0xFF` bytes e descartar todos os bytes recebidos.
Detalhes | |||||||
---|---|---|---|---|---|---|---|
Parâmetros |
|
||||||
Valores de retorno |
|
otPlatSpiSlavePrepareTransaction
otError otPlatSpiSlavePrepareTransaction( uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, bool aRequestTransactionFlag )
Preparar dados para a próxima transação do SPI.
Os ponteiros de dados PRECISAM permanecer válidos até que o callback de conclusão da transação seja chamado pelo driver escravo do SPI ou até a próxima chamada para otPlatSpiSlavePrepareTransaction()
.
Pode ser chamado mais de uma vez antes de o mestre do SPI iniciar a transação. Cada chamada bem-sucedida para essa função fará com que os valores anteriores das chamadas anteriores sejam descartados.
Não chamar essa função após a conclusão de uma transação é o mesmo que se ela tivesse sido chamada anteriormente com os comprimentos de buffer definidos como zero e aRequestTransactionFlag
definido como false
.
Depois que o tempo limite de aOutputBufLen
bytes de aOutputBuf
for atingido, o alfinete do MISO será definido como alto até que o mestre conclua a transação do SPI. Esse é o equivalente funcional ao preenchimento do final de aOutputBuf
com 0xFF
bytes até a duração da transação.
Depois que aInputBufLen
bytes de aInputBuf tiverem sido processados usando o MOSI, todos os valores subsequentes do pino MOSI serão ignorados até que o SPI mestre conclua a transação.
Mesmo que aInputBufLen
, aOutputBufLen
(ou ambos) sejam esgotados antes que o mestre do SPI conclua uma transação, o tamanho em andamento da transação ainda precisa ser mantido para ser transmitido para o retorno de chamada de conclusão da transação. Por exemplo, se aInputBufLen
for igual a 10 e aOutputBufLen
for igual a 20 e o mestre do SPI atingir 30 bytes, o valor 30 será transmitido para o callback de conclusão da transação.
Se um ponteiro NULL
for transmitido como aOutputBuf
ou aInputBuf
, isso significa que esse ponteiro de buffer não vai mudar do valor anterior/atual. Nesse caso, o argumento de comprimento correspondente deve ser ignorado. Por exemplo, otPlatSpiSlavePrepareTransaction(NULL, 0, aInputBuf, aInputLen, false)
muda o ponteiro do buffer de entrada e o comprimento dele, mas mantém o ponteiro do buffer de saída como antes.
Qualquer chamada para essa função enquanto uma transação estiver em andamento vai fazer com que todos os argumentos sejam ignorados e o valor de retorno seja OT_ERROR_BUSY
.
Detalhes | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Parâmetros |
|
||||||||||
Valores de retorno |
|
Recursos
Os tópicos de Referência da API OpenThread são originados do código-fonte, disponível no GitHub. Para mais informações ou para contribuir com nossa documentação, consulte Recursos.