SPI Slave'i
Bu modülde SPI yardımcı iletişimi için platform soyutlaması yer alır.
Özet
Türdefler |
|
---|---|
otPlatSpiSlaveTransactionCompleteCallback)(void *aContext, uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, uint16_t aTransactionLength)
|
typedefbool(*
Bir SPI işleminin belirtilen sürede tamamlandığını belirtir. |
otPlatSpiSlaveTransactionProcessCallback)(void *aContext)
|
typedefvoid(*
Bir işlemden sonra yapılan tam geri çağırma çağrılır ve gerekli diğer işlemlerin yapılması için TRUE döndürülür. |
İşlevler |
|
---|---|
otPlatSpiSlaveDisable(void)
|
void
SPI yardımcı arayüzünü kapatın ve devre dışı bırakın.
|
otPlatSpiSlaveEnable(otPlatSpiSlaveTransactionCompleteCallback aCompleteCallback, otPlatSpiSlaveTransactionProcessCallback aProcessCallback, void *aContext)
|
SPI yardımcı arayüzünü başlatın.
|
otPlatSpiSlavePrepareTransaction(uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, bool aRequestTransactionFlag)
|
Bir sonraki SPI işlemi için verileri hazırlayın.
|
Türdefler
otPlatSpiSlaveTransactionCompleteCallback
bool(* otPlatSpiSlaveTransactionCompleteCallback)(void *aContext, uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, uint16_t aTransactionLength)
Bir SPI işleminin belirtilen sürede tamamlandığını belirtir.
Yardımcı sunucuya yazılan veriler, otPlatSpiSlavePrepareTransaction()
için yapılan önceki çağrıya aInputBuf
bağımsız değişkeni tarafından belirtilen işaretçiye yazılmıştır.
Bu işlev çağrıldıktan sonra, otPlatSpiSlavePrepareTransaction()
geçersiz olur ve sonraki işlemin geçerli olması için tekrar çağrılmalıdır.
Bu işlevin, otPlatSpiSlavePrepareTransaction()
henüz çağrılmamış olsa bile her zaman bir işlemin sonunda çağrıldığını unutmayın. Bu gibi durumlarda aOutputBufLen
ve aInputBufLen
sıfır olur.
Bu geri çağırma, ISR bağlamından çağrılabilir. Bu işlevin döndürdüğü değer, başka bir işleme gerek olup olmadığını gösterir. TRUE
döndürülürse platform spi-slave sürücüsü uygulaması, işlem işlemi geri çağırmasını (otPlatSpiSlaveEnable()
içinde ayarlanan aProcessCallback
) çağırmalıdır. Ancak bu geri çağırma, diğer OpenThread API'leri/geri çağırma işlevleriyle aynı işletim sistemi bağlamından çağrılmalıdır.
Ayrıntılar | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Parametreler |
|
||||||||||||
İadeler |
Bu çağrıdan sonra platformun işlem geri çağırma işlemini (
aProcessCallback ) çağırması gerekiyorsa TRUE, işlenecek hiçbir şey yoksa ve işlem geri çağırmasını çağırmanız gerekmiyorsa FALSE (yanlış) değerini döndürür. |
otPlatSpiSlaveTransactionProcessCallback
void(* otPlatSpiSlaveTransactionProcessCallback)(void *aContext)
Bir işlemden sonra yapılan tam geri çağırma çağrılır ve gerekli diğer işlemlerin yapılması için TRUE
döndürülür.
otPlatSpiSlaveTransactionCompleteCallback
Ancak herhangi bir işletim sistemi bağlamından (ör. ISR) bu geri çağırma, diğer herhangi bir OpenThread API/geri çağırma ile aynı işletim sistemi bağlamından çağrılmalıdır.
Ayrıntılar | |||
---|---|---|---|
Parametreler |
|
İşlevler
otPlatSpiSlaveDisable
void otPlatSpiSlaveDisable( void )
SPI yardımcı arayüzünü kapatın ve devre dışı bırakın.
otPlatSpiSlaveEnable
otError otPlatSpiSlaveEnable( otPlatSpiSlaveTransactionCompleteCallback aCompleteCallback, otPlatSpiSlaveTransactionProcessCallback aProcessCallback, void *aContext )
SPI yardımcı arayüzünü başlatın.
otPlatSPISlavePrepareTransaction()
kullanılarak bir işlem hazırlanana kadar SPI yardımcısının tam olarak hazır olmadığını unutmayın.
otPlatSPISlavePrepareTransaction() is not called before the master begins a transaction, the resulting SPI transaction will send all
0xFF" baytsa ve alınan tüm baytları silin.
Ayrıntılar | |||||||
---|---|---|---|---|---|---|---|
Parametreler |
|
||||||
Döndürülen Değerler |
|
otPlatSpiSlavePrepareTransaction
otError otPlatSpiSlavePrepareTransaction( uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, bool aRequestTransactionFlag )
Bir sonraki SPI işlemi için verileri hazırlayın.
İşlemin tamamlandı geri çağırması SPI yardımcı sürücüsü tarafından çağrılana veya bir sonraki otPlatSpiSlavePrepareTransaction()
çağrısına kadar veri işaretçileri geçerli kalmalıdır.
SPI ana kopyası işlemi başlatmadan önce birden çok kez çağrılabilir. Bu işleve yapılan her başarılı çağrı, önceki çağrılarda bulunan önceki değerlerin silinmesine neden olur.
Tamamlanan bir işlemden sonra bu işlevin çağrılmaması, eskiden hem arabellek uzunluğu sıfır hem de aRequestTransactionFlag
false
olarak ayarlanmış şekilde çağrılmasıyla aynıdır.
aOutputBuf
için aOutputBufLen
bayt zaman aşımına uğradığında, ana makine SPI işlemini tamamlayana kadar MISO PIN'i yüksek olarak ayarlanacaktır. Bu, aOutputBuf
işleminin sonunu, işlem uzunluğu kadar 0xFF
baytla doldurmaya ilişkin işlevsel eşdeğerdir.
MOSI'dan aInputBufLen
baytlık aInputBuf saatlendikten sonra, SPI ana makinesi işlemi tamamlayana kadar MOSI pinden sonraki tüm değerler yoksayılır.
SPI ana öğesi bir işlemi tamamlamadan önce aInputBufLen
veya aOutputBufLen
(ya da her ikisi) tüketilse bile, işlemin devam eden boyutunun işlem tam geri çağırmaya aktarılması için işlemin devam eden boyutunun izlenmesi gerektiğini unutmayın. Örneğin, aInputBufLen
değeri 10'a, aOutputBufLen
de 20'ye eşitse ve SPI ana kopyası 30 bayta eşitse, işlem tam geri çağırmaya 30 değeri iletilir.
NULL
işaretçisi aOutputBuf
veya aInputBuf
olarak aktarılırsa arabellek işaretçisinin önceki/mevcut değerinden değişmemesi gerektiği anlamına gelir. Bu durumda, ilgili uzunluk bağımsız değişkeni yoksayılmalıdır. Örneğin otPlatSpiSlavePrepareTransaction(NULL, 0, aInputBuf, aInputLen, false)
, giriş arabelleği işaretçisini ve uzunluğunu değiştirir, ancak çıkış arabelleği işaretçisini öncekiyle aynı tutar.
Bir işlem devam ederken bu işleve yapılan tüm çağrılar, tüm bağımsız değişkenlerin yoksayılmasına ve döndürülen değerin OT_ERROR_BUSY
olmasına neden olur.
Ayrıntılar | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Parametreler |
|
||||||||||
Döndürülen Değerler |
|
Kaynaklar
OpenThread API Referans konuları, GitHub'da bulunan kaynak koddan gelir. Daha fazla bilgi edinmek veya dokümanlarımıza katkıda bulunmak için Kaynaklar bölümüne bakın.