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 فراخوانی شود. هر فراخوانی موفق به این تابع باعث می شود که مقادیر قبلی از تماس های قبلی حذف شوند.
فراخوانی نکردن این تابع پس از یک تراکنش کامل مانند این است که این تابع قبلاً با هر دو طول بافر صفر و 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 سرچشمه می گیرند. برای اطلاعات بیشتر، یا مشارکت در اسناد ما، به منابع مراجعه کنید.