الرقيق SPI
تتضمن هذه الوحدة تجريد النظام الأساسي لاتصالات الرقيق SPI.
ملخص
النوع | |
---|---|
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 التالية. |
النوع
otPlatSpiSlaveTransactionCompleteCallback
bool(* otPlatSpiSlaveTransactionCompleteCallback)(void *aContext, uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, uint16_t aTransactionLength)
يشير إلى اكتمال معاملة SPI بالطول المحدد.
تمت كتابة البيانات المكتوبة إلى التابع إلى المؤشر المشار إليه بواسطة وسيطة aInputBuf
السابق لـ otPlatSpiSlavePrepareTransaction()
.
بمجرد استدعاء هذه الوظيفة ، otPlatSpiSlavePrepareTransaction()
غير صالح ويجب استدعاؤه مرة أخرى حتى تكون المعاملة التالية صالحة.
لاحظ أنه يتم استدعاء هذه الوظيفة دائمًا في نهاية المعاملة ، حتى إذا لم يتم استدعاء otPlatSpiSlavePrepareTransaction()
. في مثل هذه الحالات، aOutputBufLen
و aInputBufLen
سوف يكون صفرا.
يمكن استدعاء رد الاتصال هذا من سياق ISR. تشير قيمة الإرجاع من هذه الوظيفة إلى ما إذا كانت هناك حاجة إلى معالجة أخرى. إذا تم إرجاع TRUE
يجب أن يقوم تنفيذ برنامج تشغيل spi-slave للنظام الأساسي باستدعاء رد اتصال عملية المعاملة ( aProcessCallback
تعيينه في otPlatSpiSlaveEnable()
) والذي على عكس رد الاتصال هذا يجب أن يتم استدعاؤه من نفس سياق نظام التشغيل الذي يسمى أي OpenThread API / رد اتصال آخر.
تفاصيل | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
المعلمات |
| ||||||||||||
عائدات | TRUE إذا كان بعد هذا الاستدعاء يعود النظام الأساسي يجب أن يستدعي عملية رد الاتصال aProcessCallback ، FALSE إذا لم يكن هناك شيء aProcessCallback ولا حاجة لاستدعاء رد الاتصال بالعملية. |
otPlatSpiSlaveTransactionProcess رد الاتصال
void(* otPlatSpiSlaveTransactionProcessCallback)(void *aContext)
يتم استدعاؤه بعد استدعاء رد الاتصال الكامل للمعاملة وإرجاع TRUE
للقيام بأي معالجة أخرى مطلوبة.
على عكس otPlatSpiSlaveTransactionCompleteCallback
الذي يمكن استدعاؤه من أي سياق نظام تشغيل (مثل ISR) ، يجب استدعاء رد الاتصال هذا من نفس سياق نظام التشغيل مثل أي واجهة برمجة تطبيقات OpenThread / رد اتصال أخرى.
تفاصيل | |||
---|---|---|---|
المعلمات |
|
المهام
otPlatSpiSlaveDisable
void otPlatSpiSlaveDisable( void )
اغلاق وتعطيل واجهة SPI التابعة.
otPlatSpiSlaveEnable
otError otPlatSpiSlaveEnable( otPlatSpiSlaveTransactionCompleteCallback aCompleteCallback, otPlatSpiSlaveTransactionProcessCallback aProcessCallback, void *aContext )
تهيئة واجهة SPI التابعة.
لاحظ أن otPlatSPISlavePrepareTransaction()
SPI ليس جاهزًا تمامًا حتى يتم إعداد معاملة باستخدام otPlatSPISlavePrepareTransaction()
.
إذا 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 المعاملة. ستؤدي كل مكالمة ناجحة لهذه الوظيفة إلى تجاهل القيم السابقة من المكالمات السابقة.
عدم استدعاء هذه الوظيفة بعد إجراء معاملة مكتملة هو نفسه كما لو تم استدعاء هذه الوظيفة مسبقًا مع ضبط أطوال المخزن المؤقت على الصفر وتعيين aRequestTransactionFlag
على false
.
بمجرد أن يتم aOutputBufLen
بايت aOutputBufLen
من aOutputBuf
، يجب تعيين دبوس MISO عالياً حتى ينتهي الرئيسي من معاملة SPI. هذا هو المكافئ الوظيفي لحشو نهاية aOutputBuf
مع بايتات 0xFF
إلى طول المعاملة.
بمجرد aInputBufLen
بايت aInputBufLen
من aInputBuf من MOSI ، يتم تجاهل جميع القيم اللاحقة من دبوس MOSI حتى ينتهي SPI الرئيسي من المعاملة.
لاحظ أنه حتى إذا تم aInputBufLen
أو aOutputBufLen
(أو كليهما) قبل أن ينهي مدير SPI المعاملة ، فلا يزال يتعين تتبع الحجم المستمر للمعاملة ليتم تمريره إلى رد الاتصال الكامل للمعاملة. على سبيل المثال ، إذا كانت aInputBufLen
تساوي 10 و aOutputBufLen
تساوي 20 وكان مؤشر SPI الرئيسي يخرج 30 بايت ، يتم تمرير القيمة 30 إلى المعاملة الكاملة لرد الاتصال.
إذا تم تمرير مؤشر NULL
كـ aOutputBuf
أو aInputBuf
فهذا يعني أن مؤشر المخزن المؤقت يجب ألا يتغير عن قيمته السابقة / الحالية. في هذه الحالة ، يجب تجاهل وسيطة الطول المقابلة. على سبيل المثال ، otPlatSpiSlavePrepareTransaction(NULL, 0, aInputBuf, aInputLen, false)
مؤشر المخزن المؤقت للإدخال وطوله ولكنه يحافظ على مؤشر المخزن المؤقت للإخراج كما كان من قبل.
سيؤدي أي استدعاء لهذه الوظيفة أثناء إجراء المعاملة إلى تجاهل جميع الوسائط وتكون القيمة OT_ERROR_BUSY
.
تفاصيل | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
المعلمات |
| ||||||||||
إرجاع القيم |
|