עבד SPI
מודול זה כולל את הפשטת הפלטפורמה עבור תקשורת עם עבדים ב-SPI.
סיכום
סוג Dedef |
|
---|---|
otPlatSpiSlaveTransactionCompleteCallback)(void *aContext, uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, uint16_t aTransactionLength)
|
Typedefbool(*
מציין שעסקה של SPI הושלמה עם האורך הנתון. |
otPlatSpiSlaveTransactionProcessCallback)(void *aContext)
|
Typedefvoid(*
הפעולה מתבצעת לאחר ביצוע שיחה חוזרת (callback) ומחזירה את 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.
|
סוג Dedef
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
מוחזרת, הטמעה של נהג spia Platform בפלטפורמה חייבת להיות מופעלת ב-callback של תהליך העסקה (aProcessCallback
המוגדר ב-otPlatSpiSlaveEnable()
), בניגוד לקריאה החוזרת (callback) הזו, המערכת צריכה להתקשר מאותו הקשר של מערכת ההפעלה שמפעילה OpenOpen API/callback אחר.
פרטים | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||||||||
החזרות |
TRUE אם לאחר השיחה הזו הפלטפורמה צריכה להפעיל את הקריאה החוזרת (callback)
aProcessCallback , FALSE אם אין צורך לעבד דבר ולא צריך להפעיל את הקריאה החוזרת (callback). |
otPlatSpiSlaveTransactionProcessCallback
void(* otPlatSpiSlaveTransactionProcessCallback)(void *aContext)
הפעולה מתבצעת לאחר ביצוע שיחה חוזרת (callback) ומחזירה את TRUE
לצורך עיבוד נוסף.
בניגוד ל-otPlatSpiSlaveTransactionCompleteCallback
שניתן להתקשר אליו מכל הקשר שהוא (למשל, ISR), יש להתקשר אל הקריאה החוזרת הזו מאותו הקשר של מערכת ההפעלה כמו כל ממשק API אחר/callback אחר.
פרטים | |||
---|---|---|---|
פרמטרים |
|
פונקציות
otPlatSpiveDisable
void otPlatSpiSlaveDisable( void )
כיבוי והשבתת ממשק העבד SPI.
otPlatSpiveEnable
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` בייטים ומוחקים את כל הבייטים שהתקבלו.
פרטים | |||||||
---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||
ערכי החזרה |
|
otPlatSpisla להכין עסקה
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 יסיים עסקה, עדיין צריך לעקוב אחר הגודל הנוכחי של העסקה כדי להעביר אותה לקריאה חוזרת (callback) מלאה של העסקה. למשל, אם הערך של aInputBufLen
הוא 10 ו-aOutputBufLen
שווה ל-20 והמאסטר הראשי של SPI מכפיל ב-30 בייטים, הערך 30 מועבר לקריאה חוזרת (callback) של העסקה במלואה.
אם מצביע NULL
מועבר כ-aOutputBuf
או aInputBuf
, המשמעות היא שסמן המאגר לא אמור להשתנות מהערך הקודם/הנוכחי. במקרה כזה, יש להתעלם מארגומנט האורך המתאים. לדוגמה, otPlatSpiSlavePrepareTransaction(NULL, 0, aInputBuf, aInputLen, false)
משנה את מצביע הנתונים הזמני עבור מאגר הקלט ואת אורכו, אבל משאירה את הסמן של מאגר הפלט כמו קודם.
כל קריאה לפונקציה הזו במהלך ביצוע עסקה תגרום להתעלם מכל הארגומנטים וערך ההחזרה יהיה OT_ERROR_BUSY
.
פרטים | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||||||
ערכי החזרה |
|
מקורות מידע
נושאי עזר של OpenThread API מגיעים מקוד המקור, שזמין ב-GitHub. למידע נוסף או כדי להוסיף מידע למסמכים שלנו, יש לעיין במשאבים.