ทาส SPI
โมดูลนี้ประกอบด้วยกระบวนการ Abstraction ของแพลตฟอร์มสำหรับการสื่อสารลูกข่าย SPI
สรุป
Typedef |
|
---|---|
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 ครั้งถัดไป
|
Typedef
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
จะเป็น 0
โค้ดเรียกกลับนี้สามารถเรียกจากบริบทของ ISR ค่าการแสดงผลจากฟังก์ชันนี้จะระบุว่าต้องมีการประมวลผลเพิ่มเติมหรือไม่ หากแสดงผล TRUE
การติดตั้งใช้งานไดรเวอร์ Spi-slave ของแพลตฟอร์มจะต้องเรียกใช้การเรียกกลับกระบวนการธุรกรรม (aProcessCallback
ที่ตั้งค่าไว้ใน otPlatSpiSlaveEnable()
) ซึ่งแตกต่างจากการเรียกกลับนี้จากบริบทระบบปฏิบัติการเดียวกับที่มีการเรียก API/การเรียกกลับ OpenThread อื่นๆ
รายละเอียด | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
พารามิเตอร์ |
|
||||||||||||
การส่งคืน |
TRUE ถ้าหลังจากการเรียกใช้นี้แสดงผลแพลตฟอร์มควรเรียกใช้โค้ดเรียกกลับกระบวนการ
aProcessCallback และเป็น FALSE หากไม่มีสิ่งที่จะต้องประมวลผลและไม่จำเป็นต้องเรียกใช้โค้ดเรียกกลับของกระบวนการ |
otPlatSpiSlaveTransactionProcessCallback
void(* otPlatSpiSlaveTransactionProcessCallback)(void *aContext)
เรียกใช้หลังจากมีการเรียกโค้ดเรียกกลับที่ทำธุรกรรมที่สมบูรณ์และส่งคืน TRUE
เพื่อดำเนินการตามที่จำเป็นต่อไป
ซึ่งแตกต่างจาก otPlatSpiSlaveTransactionCompleteCallback
ที่เรียกใช้จากบริบทของระบบปฏิบัติการใดก็ได้ (เช่น ISR) โค้ดเรียกกลับนี้ต้องเรียกจากบริบทของระบบปฏิบัติการเดียวกับ API/การเรียกกลับของ OpenThread/Callback อื่นๆ
รายละเอียด | |||
---|---|---|---|
พารามิเตอร์ |
|
ฟังก์ชัน
otPlatSpiSlaveDisable
void otPlatSpiSlaveDisable( void )
ปิดการทำงานและปิดใช้งานอินเทอร์เฟซลูกข่าย SPI
otPlatSpiSlaveEnable
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()
ครั้งถัดไป
อาจมีการเรียกใช้มากกว่า 1 ครั้งก่อนที่ต้นแบบ SPI จะเริ่มธุรกรรม การเรียกฟังก์ชันนี้สำเร็จแต่ละครั้งจะทำให้ระบบทิ้งค่าก่อนหน้าจากการเรียกก่อนหน้านี้
การไม่เรียกฟังก์ชันนี้หลังจากทำธุรกรรมเสร็จสมบูรณ์แล้วจะเหมือนกับการเรียกฟังก์ชันนี้ก่อนหน้านี้โดยที่ตั้งค่าความยาวบัฟเฟอร์เป็น 0 และตั้งค่า aRequestTransactionFlag
เป็น false
เมื่อหมดเวลา aOutputBufLen
ไบต์ของ aOutputBuf
แล้ว จะต้องตั้งค่า PIN ของ MISO ในระดับสูงจนกว่ารายการหลักจะทำธุรกรรม SPI เสร็จสิ้น นี่คือฟังก์ชันที่เทียบเท่ากับระยะห่างจากขอบของส่วนท้าย aOutputBuf
ที่มีขนาด 0xFF
ไบต์ออกจนถึงความยาวของธุรกรรม
เมื่อต่อนาฬิกาของ aInputBuf จำนวน aInputBufLen
ไบต์จาก MOSI แล้ว ระบบจะไม่สนใจค่าที่ตามมาทั้งหมดจาก PIN ของ MOSI จนกว่ารายการหลัก SPI จะทำธุรกรรมเสร็จสิ้น
โปรดทราบว่าแม้ว่า aInputBufLen
หรือ aOutputBufLen
(หรือทั้ง 2 อย่าง) จะหมดลงก่อนที่ต้นฉบับ SPI จะทำธุรกรรมจนเสร็จ แต่คุณยังคงต้องติดตามขนาดของธุรกรรมที่ดำเนินอยู่ต่อไปเพื่อส่งไปให้กับโค้ดเรียกกลับของธุรกรรม เช่น หาก aInputBufLen
เท่ากับ 10 และ aOutputBufLen
เท่ากับ 20 และต้นแบบ SPI จับเวลา 30 ไบต์ ระบบจะส่งค่า 30 ไปยังโค้ดเรียกกลับที่เสร็จสิ้นธุรกรรม
หากส่งผ่านตัวชี้ NULL
เป็น aOutputBuf
หรือ aInputBuf
หมายความว่าตัวชี้บัฟเฟอร์ไม่ควรเปลี่ยนจากค่าก่อนหน้า/ปัจจุบัน ในกรณีนี้ ควรละเว้นอาร์กิวเมนต์ความยาวที่เกี่ยวข้อง ตัวอย่างเช่น otPlatSpiSlavePrepareTransaction(NULL, 0, aInputBuf, aInputLen, false)
เปลี่ยนตัวชี้บัฟเฟอร์อินพุตและความยาวของตัวชี้ แต่คงตัวชี้บัฟเฟอร์เอาต์พุตไว้เหมือนเดิม
การเรียกใช้ฟังก์ชันนี้ขณะดำเนินธุรกรรม ระบบจะไม่สนใจอาร์กิวเมนต์ทั้งหมด และค่าที่ส่งกลับจะเป็น OT_ERROR_BUSY
รายละเอียด | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
พารามิเตอร์ |
|
||||||||||
แสดงผลค่า |
|
แหล่งข้อมูล
หัวข้ออ้างอิง API ของ OpenThread จะมาจากซอร์สโค้ดซึ่งพร้อมใช้งานใน GitHub ดูข้อมูลเพิ่มเติมหรือมีส่วนร่วมในเอกสารประกอบของเราได้ที่แหล่งข้อมูล