Budak SPI
Modul ini mencakup abstraksi platform untuk komunikasi budak SPI.
Ringkasan
Typedefs | |
---|---|
otPlatSpiSlaveTransactionCompleteCallback )(void *aContext, uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, uint16_t aTransactionLength) | typedefbool(* Menunjukkan bahwa transaksi SPI telah selesai dengan panjang yang diberikan. |
otPlatSpiSlaveTransactionProcessCallback )(void *aContext) | typedefvoid(* Dipanggil setelah panggilan balik lengkap transaksi dipanggil dan mengembalikan TRUE untuk melakukan pemrosesan lebih lanjut yang diperlukan. |
Fungsi | |
---|---|
otPlatSpiSlaveDisable (void) | void Matikan dan nonaktifkan antarmuka budak SPI. |
otPlatSpiSlaveEnable (otPlatSpiSlaveTransactionCompleteCallback aCompleteCallback,otPlatSpiSlaveTransactionProcessCallback aProcessCallback, void *aContext) | Inisialisasi antarmuka budak SPI. |
otPlatSpiSlavePrepareTransaction (uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, bool aRequestTransactionFlag) | Siapkan data untuk transaksi SPI selanjutnya. |
Typedefs
otPlatSpiSlaveTransactionCompleteCallback
bool(* otPlatSpiSlaveTransactionCompleteCallback)(void *aContext, uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, uint16_t aTransactionLength)
Menunjukkan bahwa transaksi SPI telah selesai dengan panjang yang diberikan.
Data yang ditulis ke slave telah ditulis ke pointer yang ditunjukkan oleh argumen aInputBuf
ke panggilan sebelumnya ke otPlatSpiSlavePrepareTransaction()
.
Setelah fungsi ini dipanggil, otPlatSpiSlavePrepareTransaction()
tidak valid dan harus dipanggil lagi agar transaksi berikutnya valid.
Perhatikan bahwa fungsi ini selalu dipanggil di akhir transaksi, meskipun otPlatSpiSlavePrepareTransaction()
belum dipanggil. Dalam kasus seperti itu, aOutputBufLen
dan aInputBufLen
akan menjadi nol.
Callback ini bisa dipanggil dari konteks ISR. Nilai yang dikembalikan dari fungsi ini menunjukkan jika diperlukan pemrosesan lebih lanjut. Jika TRUE
dikembalikan, implementasi driver spi-slave platform harus menjalankan proses transaksi callback ( aProcessCallback
disetel di otPlatSpiSlaveEnable()
) yang tidak seperti callback ini harus dipanggil dari konteks OS yang sama dengan yang dipanggil oleh API / callback OpenThread lainnya.
Detail | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
| ||||||||||||
Kembali | TRUE jika setelah panggilan ini kembali, platform harus memanggil proses callback aProcessCallback , FALSE jika tidak ada yang diproses dan tidak perlu memanggil proses callback. |
otPlatSpiSlaveTransactionProcessCallback
void(* otPlatSpiSlaveTransactionProcessCallback)(void *aContext)
Dipanggil setelah panggilan balik lengkap transaksi dipanggil dan mengembalikan TRUE
untuk melakukan pemrosesan lebih lanjut yang diperlukan.
Tidak seperti otPlatSpiSlaveTransactionCompleteCallback
yang dapat dipanggil dari konteks OS apa pun (misalnya, ISR), callback ini HARUS dipanggil dari konteks OS yang sama seperti API / callback OpenThread lainnya.
Detail | |||
---|---|---|---|
Parameter |
|
Fungsi
otPlatSpiSlaveDisable
void otPlatSpiSlaveDisable( void )
Matikan dan nonaktifkan antarmuka budak SPI.
otPlatSpiSlaveEnable
otError otPlatSpiSlaveEnable( otPlatSpiSlaveTransactionCompleteCallback aCompleteCallback, otPlatSpiSlaveTransactionProcessCallback aProcessCallback, void *aContext )
Inisialisasi antarmuka budak SPI.
Perhatikan bahwa SPI slave tidak sepenuhnya siap hingga transaksi disiapkan menggunakan otPlatSPISlavePrepareTransaction()
.
Jika otPlatSPISlavePrepareTransaction() is not called before the master begins a transaction, the resulting SPI transaction will send all
byte 0xFF` dan membuang semua byte yang diterima.
Detail | |||||||
---|---|---|---|---|---|---|---|
Parameter |
| ||||||
Kembalikan Nilai |
|
otPlatSpiSlavePrepareTransaction
otError otPlatSpiSlavePrepareTransaction( uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, bool aRequestTransactionFlag )
Siapkan data untuk transaksi SPI selanjutnya.
Pointer data HARUS tetap valid hingga panggilan balik lengkap transaksi dipanggil oleh driver slave SPI, atau hingga panggilan berikutnya ke otPlatSpiSlavePrepareTransaction()
.
Fungsi ini dapat dipanggil lebih dari sekali sebelum master SPI memulai transaksi. Setiap panggilan yang berhasil ke fungsi ini akan menyebabkan nilai sebelumnya dari panggilan sebelumnya akan dibuang.
Tidak memanggil fungsi ini setelah transaksi selesai sama seperti jika fungsi ini sebelumnya dipanggil dengan panjang buffer disetel ke nol dan aRequestTransactionFlag
disetel ke false
.
Setelah aOutputBufLen
byte dari aOutputBuf
telah dihitung, pin MISO harus disetel tinggi sampai master menyelesaikan transaksi SPI. Ini adalah padding fungsional yang setara dengan akhir aOutputBuf
dengan 0xFF
byte keluar sepanjang transaksi.
Setelah byte aInputBufLen
dari aInputBuf dicatat dari MOSI, semua nilai berikutnya dari pin MOSI akan diabaikan hingga master SPI menyelesaikan transaksi.
Perhatikan bahwa meskipun aInputBufLen
atau aOutputBufLen
(atau keduanya) habis sebelum master SPI menyelesaikan transaksi, ukuran transaksi yang sedang berlangsung harus tetap dilacak untuk diteruskan ke transaksi callback lengkap. Misalnya, jika aInputBufLen
sama dengan 10 dan aOutputBufLen
sama dengan 20 dan master SPI menghabiskan waktu 30 byte, nilai 30 diteruskan ke callback penyelesaian transaksi.
Jika pointer NULL
dilewatkan sebagai aOutputBuf
atau aInputBuf
itu berarti bahwa pointer buffer tidak boleh berubah dari nilai sebelumnya / saat ini. Dalam kasus ini, argumen panjang yang sesuai harus diabaikan. Misalnya, otPlatSpiSlavePrepareTransaction(NULL, 0, aInputBuf, aInputLen, false)
mengubah penunjuk buffer masukan dan panjangnya tetapi mempertahankan penunjuk buffer keluaran sama seperti sebelumnya.
Setiap panggilan ke fungsi ini saat transaksi sedang berlangsung akan menyebabkan semua argumen diabaikan dan nilai yang dikembalikan menjadi OT_ERROR_BUSY
.
Detail | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
| ||||||||||
Kembalikan Nilai |
|