SPI Slave
這個模組包含 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
將為 0。
您可從 ISR 內容呼叫這個回呼。此函式的傳回值表示是否需要進一步處理。如果傳回 TRUE
,平台 spi-slave 驅動程式的實作必須叫用交易處理程序回呼 (在 otPlatSpiSlaveEnable()
中設定 aProcessCallback
),這點與呼叫其他 OpenThread API/callback 的 OS 結構定義不同。
詳細資料 | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
參數 |
|
||||||||||||
傳回 |
如果呼叫沒有任何結果,且不需叫用處理程序回呼,則在平台傳回此呼叫後,將為 TRUE。
|
otPlatSpiSlaveTransactionProcess 回呼
void(* otPlatSpiSlaveTransactionProcessCallback)(void *aContext)
在呼叫交易完成回呼後叫用,並傳回 TRUE
執行進一步的處理作業。
有別於 otPlatSpiSlaveTransactionCompleteCallback
,可從任何作業系統內容呼叫 (例如ISR) 所呼叫的回呼,就其必須和任何其他 OpenThread API/回呼
詳細資料 | |||
---|---|---|---|
參數 |
|
函式
otPlatSpiSlaveDisable
void otPlatSpiSlaveDisable( void )
關閉並停用 SPI 從屬介面。
otPlatSpiSlave 啟用
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 主要執行個體啟動交易之前,可能會多次呼叫這個函式。每次對這個函式執行 successful 呼叫都會導致先前呼叫的舊值遭到捨棄。
完成交易後並未呼叫此函式,就如同先前呼叫了此函式時,該緩衝區長度均設為 0 且 aRequestTransactionFlag
設為 false
。
aOutputBuf
的 aOutputBufLen
個位元組已逾時後,您必須在傳輸完成 SPI 交易前將 MISO 圖釘設為高。這個函式相當於將 aOutputBuf
結尾填充到交易長度的 0xFF
個位元組。
一旦 MOSI 完成 aInputBufLen
Input af 的 Input 時鐘,系統就會忽略 MOSI 圖釘的所有後續值,直到 SPI 主完成交易為止。
請注意,即使 SPI 主完成交易前已用盡 aInputBufLen
或 aOutputBufLen
(或兩者皆有),系統仍會持續追蹤交易進行中的大小,以便傳遞至交易完成回呼。舉例來說,如果 aInputBufLen
等於 10 且 aOutputBufLen
等於 20,且 SPI 主逾時 30 個位元組,值 30 就會傳送至交易完成回呼。
如果 NULL
指標是以 aOutputBuf
或 aInputBuf
的形式傳遞,表示緩衝區不應變更其先前的值/目前值。在這種情況下,系統會忽略相對應的長度引數。例如,otPlatSpiSlavePrepareTransaction(NULL, 0, aInputBuf, aInputLen, false)
會變更輸入緩衝區指標及其長度,但輸出輸出緩衝區則維持不變。
交易執行期間,如果對這個函式進行任何呼叫,系統就會忽略所有引數,傳回的值為 OT_ERROR_BUSY
。
詳細資料 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
參數 |
|
||||||||||
傳回值 |
|