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 Slave را خاموش و غیرفعال کنید. |
otPlatSpiSlaveEnable ( otPlatSpiSlaveTransactionCompleteCallback aCompleteCallback, otPlatSpiSlaveTransactionProcessCallback aProcessCallback, void *aContext) | رابط SPI Slave را راه اندازی کنید. |
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 با طول داده شده کامل شده است.
دادههای نوشته شده در Slave روی اشارهگر نوشته شده توسط آرگومان aInputBuf
برای فراخوانی قبلی otPlatSpiSlavePrepareTransaction()
نوشته شده است.
هنگامی که این تابع فراخوانی شد، otPlatSpiSlavePrepareTransaction()
نامعتبر است و باید دوباره فراخوانی شود تا تراکنش بعدی معتبر باشد.
توجه داشته باشید که این تابع همیشه در پایان تراکنش فراخوانی می شود، حتی اگر otPlatSpiSlavePrepareTransaction()
هنوز فراخوانی نشده باشد. در چنین مواردی، aOutputBufLen
و aInputBufLen
صفر خواهند بود.
این callback را می توان از زمینه ISR فراخوانی کرد. مقدار بازگشتی از این تابع نشان می دهد که آیا پردازش بیشتری لازم است یا خیر. اگر TRUE
برگردانده شود، پیادهسازی درایور spi-slave پلتفرم باید فراخوانی فرآیند تراکنش را فراخوانی کند ( aProcessCallback
مجموعهای در otPlatSpiSlaveEnable()
) که برخلاف این callback باید از همان زمینه سیستمعامل فراخوانی شود که هر OpenThread API/callback دیگری فراخوانی میشود.
جزئیات | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
مولفه های |
| ||||||||||||
برمی گرداند | درست است اگر پس از این فراخوانی، پلتفرم باید فراخوانی فرآیند را فراخوانی کند aProcessCallback ، اگر چیزی برای پردازش وجود نداشته باشد و نیازی به فراخوانی فراخوانی فرآیند نباشد، نادرست است. |
otPlatSpiSlaveTransactionProcessCallback
void(* otPlatSpiSlaveTransactionProcessCallback)(void *aContext)
پس از فراخوانی کامل یک تراکنش فراخوانی می شود و برای انجام هر گونه پردازش بیشتر مورد نیاز، TRUE
را برمی گرداند.
برخلاف otPlatSpiSlaveTransactionCompleteCallback
که میتواند از هر زمینه سیستمعاملی (مثلاً ISR) فراخوانی شود، این فراخوانی باید از همان زمینه سیستمعامل مانند هر OpenThread API/callback دیگر فراخوانی شود.
جزئیات | |||
---|---|---|---|
مولفه های |
|
کارکرد
otPlatSpiSlaveDisable
void otPlatSpiSlaveDisable( void )
رابط SPI Slave را خاموش و غیرفعال کنید.
otPlatSpiSlaveEnable
otError otPlatSpiSlaveEnable( otPlatSpiSlaveTransactionCompleteCallback aCompleteCallback, otPlatSpiSlaveTransactionProcessCallback aProcessCallback, void *aContext )
رابط SPI Slave را راه اندازی کنید.
توجه داشته باشید که SPI Slave به طور کامل آماده نیست تا زمانی که تراکنش با استفاده از otPlatSPISlavePrepareTransaction()
آماده شود.
اگر otPlatSPISlavePrepareTransaction() is not called before the master begins a transaction, the resulting SPI transaction will send all
بایت های دریافتی را دور می زند.
جزئیات | |||||||
---|---|---|---|---|---|---|---|
مولفه های |
| ||||||
ارزش های بازگشتی |
|
otPlatSpiSlavePrepareTransaction
otError otPlatSpiSlavePrepareTransaction( uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, bool aRequestTransactionFlag )
داده ها را برای تراکنش بعدی SPI آماده کنید.
نشانگرهای داده باید تا زمانی که تراکنش کامل فراخوانی شده توسط درایور برده SPI فراخوانی نشود، یا تا پس از فراخوانی بعدی به otPlatSpiSlavePrepareTransaction()
معتبر باقی بمانند.
این تابع ممکن است بیش از یک بار قبل از شروع تراکنش توسط SPI Master فراخوانی شود. هر فراخوانی موفق به این تابع باعث می شود که مقادیر قبلی از تماس های قبلی حذف شوند.
فراخوانی نکردن این تابع پس از یک تراکنش کامل، مانند این است که این تابع قبلاً با هر دو طول بافر صفر و aRequestTransactionFlag
روی false
فراخوانی شده بود.
هنگامی که بایت های aOutputBufLen
از aOutputBuf
کلاک شد، پین MISO باید بالا تنظیم شود تا زمانی که Master تراکنش SPI را به پایان برساند. این معادل عملکردی پر کردن انتهای aOutputBuf
با بایت 0xFF
به طول تراکنش است.
هنگامی که بایت های aInputBufLen
از aInputBuf از MOSI کلاک شد، تمام مقادیر بعدی از پین MOSI نادیده گرفته می شوند تا زمانی که SPI master تراکنش را به پایان برساند.
توجه داشته باشید که حتی اگر aInputBufLen
یا aOutputBufLen
(یا هر دو) قبل از اینکه SPI Master یک تراکنش را به پایان برساند، تمام شود، اندازه جاری تراکنش همچنان باید ردیابی شود تا به تراکنش تماس کامل داده شود. به عنوان مثال، اگر aInputBufLen
برابر با 10 و aOutputBufLen
برابر با 20 باشد و کلاک اصلی SPI 30 بایت باشد، مقدار 30 به بازخوانی کامل تراکنش ارسال می شود.
اگر یک اشاره گر NULL
به عنوان aOutputBuf
یا aInputBuf
شود، به این معنی است که نشانگر بافر نباید از مقدار قبلی/جاری خود تغییر کند. در این مورد، آرگومان طول مربوطه باید نادیده گرفته شود. به عنوان مثال، otPlatSpiSlavePrepareTransaction(NULL, 0, aInputBuf, aInputLen, false)
نشانگر بافر ورودی و طول آن را تغییر می دهد، اما نشانگر بافر خروجی را مانند قبل نگه می دارد.
هر فراخوانی به این تابع در حالی که تراکنش در حال انجام است باعث می شود همه آرگومان ها نادیده گرفته شوند و مقدار بازگشتی OT_ERROR_BUSY
شود.
جزئیات | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
مولفه های |
| ||||||||||
ارزش های بازگشتی |
|
منابع
موضوعات مرجع OpenThread API از کد منبع موجود در GitHub سرچشمه می گیرند. برای اطلاعات بیشتر، یا مشارکت در اسناد ما، به منابع مراجعه کنید.