معرّف 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
، يجب أن يستدعي تنفيذ برنامج التشغيل الرقابي للنظام الأساسي استدعاء عملية المعاملة (الذي تم ضبطه في aProcessCallback
) في otPlatSpiSlaveEnable()
، ويجب أن يتم طلب هذا على عكس سياق نظام التشغيل نفسه الذي يتم فيه طلب أي واجهة برمجة تطبيقات OpenThread/رد اتصال آخر.
التفاصيل | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
المَعلمات |
|
||||||||||||
المرتجعات |
صحيح. بعد عرض هذه الاستدعاءات، يجب أن يستدعي النظام الأساسي استدعاء العملية
aProcessCallback ، وتكون القيمة FALSE في حال لم تكن هناك حاجة إلى المعالجة ولا تحتاج إلى استدعاء استدعاء العملية. |
otPlatSpiSlaveTransactionProcessCallback
void(* otPlatSpiSlaveTransactionProcessCallback)(void *aContext)
ويتم استدعاء هذا الإجراء بعد استدعاء ردّ الأموال وإكمال المعاملة وإرجاع TRUE
لتنفيذ أي معالجة إضافية مطلوبة.
على عكس otPlatSpiSlaveTransactionCompleteCallback
التي يمكن طلبها من أي سياق لنظام التشغيل (على سبيل المثال، يجب أن يتم طلب معاودة الاتصال هذه من سياق نظام التشغيل نفسه مثل أي واجهة برمجة تطبيقات OpenThread أو استدعاء آخر.
التفاصيل | |||
---|---|---|---|
المَعلمات |
|
الدوال
otPlatSpiSlaveإيقاف
void otPlatSpiSlaveDisable( void )
يجب إيقاف واجهة التابع لـ SPI.
otPlatSpiSlaveتفعيل
otError otPlatSpiSlaveEnable( otPlatSpiSlaveTransactionCompleteCallback aCompleteCallback, otPlatSpiSlaveTransactionProcessCallback aProcessCallback, void *aContext )
إعداد واجهة الخدمة التابعة لـ SPI
تجدر الإشارة إلى أنّ خادم 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
بايت من aOutputBuf
، يجب ضبط رقم التعريف الشخصي (MISO) بشكل مرتفع حتى ينهي الشريحة الرئيسية معاملة SPI. هذه هي القيمة المكافئة للعمل المتروكة في نهاية aOutputBuf
مع استخدام 0xFF
بايت في طول المعاملة.
بعد تسجيل 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
.
التفاصيل | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
المَعلمات |
|
||||||||||
قيم الإرجاع |
|
الموارد
تبدأ مواضيع مراجع واجهة برمجة تطبيقات OpenThread من رمز المصدر، وهو متاح على GitHub. للحصول على مزيد من المعلومات أو للمساهمة في المستندات، يمكنك الاطّلاع على المراجع.