SPI 從屬處
這個模組包含 SPI 從屬通訊的平台抽象化機制。
摘要
Typedefs |
|
---|---|
otPlatSpiSlaveTransactionCompleteCallback)(void *aContext, uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, uint16_t aTransactionLength)
|
typedefbool(*
表示 SPI 交易已完成指定時間長度。 |
otPlatSpiSlaveTransactionProcessCallback)(void *aContext)
|
typedefvoid(*
呼叫交易完成回呼後叫用,並傳回 TRUE ,以進行所需的進一步處理。 |
函式 |
|
---|---|
otPlatSpiSlaveDisable(void)
|
void
關閉並停用 SPI 從屬介面。
|
otPlatSpiSlaveEnable(otPlatSpiSlaveTransactionCompleteCallback aCompleteCallback, otPlatSpiSlaveTransactionProcessCallback aProcessCallback, void *aContext)
|
初始化 SPI 從屬介面。
|
otPlatSpiSlavePrepareTransaction(uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, bool aRequestTransactionFlag)
|
為下一次 SPI 交易準備資料。
|
Typedefs
otPlatSpiSlaveTransactionCompleteCallback
bool(* otPlatSpiSlaveTransactionCompleteCallback)(void *aContext, uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, uint16_t aTransactionLength)
表示 SPI 交易已完成指定時間長度。
寫入斜線的資料已寫入至先前呼叫 otPlatSpiSlavePrepareTransaction()
的 aInputBuf
引數所指示的指標。
呼叫這個函式後,otPlatSpiSlavePrepareTransaction()
無效,必須再次呼叫,下一筆交易才會生效。
請注意,即使尚未呼叫 otPlatSpiSlavePrepareTransaction()
,系統一律會在交易結束時呼叫這個函式。在這種情況下,aOutputBufLen
和 aInputBufLen
將為零。
您可以從 ISR 內容呼叫此回呼。此函式的傳回值會指出是否需要進一步處理。如果傳回 TRUE
,平台螺旋驅動程式實作必須叫用交易程序回呼 (在 otPlatSpiSlaveEnable()
中設定 aProcessCallback
),與此回呼不同,必須從呼叫任何其他 OpenThread API/回呼的 OS 環境相同的 OS 環境中呼叫。
詳細說明 | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
參數 |
|
||||||||||||
傳回 |
如果此呼叫之後傳回平台應叫用程序回呼
aProcessCallback ,則為 TRUE;如果沒有可處理且無須叫用程序回呼,則為 FALSE。 |
otPlatSpiSlaveTransactionProcessCallback
void(* otPlatSpiSlaveTransactionProcessCallback)(void *aContext)
呼叫交易完成回呼後叫用,並傳回 TRUE
,以進行所需的進一步處理。
與可從任何 OS 結構定義呼叫的 otPlatSpiSlaveTransactionCompleteCallback
不同 (例如ISR),此回呼「必須」從與其他 OpenThread API/回呼相同的 OS 環境進行呼叫。
詳細說明 | |||
---|---|---|---|
參數 |
|
函式
otPlatSpiSlaveDisable
void otPlatSpiSlaveDisable( void )
關閉並停用 SPI 從屬介面。
otPlatSpiSlaveEnable
otError otPlatSpiSlaveEnable( otPlatSpiSlaveTransactionCompleteCallback aCompleteCallback, otPlatSpiSlaveTransactionProcessCallback aProcessCallback, void *aContext )
初始化 SPI 從屬介面。
請注意,在使用 otPlatSPISlavePrepareTransaction()
交易準備交易之前,SPI 從屬問題尚未準備就緒。
如果 otPlatSPISlavePrepareTransaction() is not called before the master begins a transaction, the resulting SPI transaction will send all
0xFF` 位元組,並捨棄所有收到的位元組。
詳細說明 | |||||||
---|---|---|---|---|---|---|---|
參數 |
|
||||||
傳回值 |
|
otPlatSpiSlavePrepareTransaction
otError otPlatSpiSlavePrepareTransaction( uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, bool aRequestTransactionFlag )
為下一次 SPI 交易準備資料。
資料指標必須保持有效,直到 SPI 從屬驅動程式呼叫交易完成回呼,或直到下次呼叫 otPlatSpiSlavePrepareTransaction()
為止。
可能在 SPI 主要主啟動交易之前多次呼叫。每次對此函式發出成功呼叫都會導致系統捨棄先前呼叫中過去的值。
完成交易後沒有呼叫此函式的方式,與之前在緩衝區長度設為 0 且 aRequestTransactionFlag
設為 false
的情況下呼叫此函式的方式相同。
將 aOutputBuf
的 aOutputBufLen
位元組處理完畢後,MISO 圖釘將設為較高的金額,直到主要節點完成 SPI 交易為止。這相當於在交易期間與 aOutputBuf
結尾填補的 0xFF
個位元組。
當 MOSI 中將 aInputBuf 的 aInputBufLen
位元組加上時,系統會忽略 MOSI PIN 碼的所有後續值,直到 SPI 主要程序完成交易為止。
請注意,即使 aInputBufLen
或 aOutputBufLen
(或兩者) 在 SPI 主要完成交易前已用盡,仍必須追蹤交易的持續大小,以便傳送至交易完成回呼。舉例來說,如果 aInputBufLen
等於 10,而 aOutputBufLen
等於 20,而 SPI 主影格為 30 個位元組,則值 30 會傳遞至交易完成回呼。
如果 NULL
指標是以 aOutputBuf
或 aInputBuf
的形式傳入,代表緩衝區指標不應從先前的值/目前值變更。在這種情況下,應該忽略對應的長度引數。例如,otPlatSpiSlavePrepareTransaction(NULL, 0, aInputBuf, aInputLen, false)
會變更輸入緩衝區指標及其長度,但輸出緩衝區指標則與之前相同。
若在交易進行期間呼叫這個函式,將會造成所有引數遭到忽略,而且傳回值會是 OT_ERROR_BUSY
。
詳細說明 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
參數 |
|
||||||||||
傳回值 |
|
資源
OpenThread API 參考資料主題源自原始碼,請前往 GitHub 取得。如要瞭解詳情或對說明文件做出貢獻,請參閱資源。