Nô lệ SPI
Mô-đun này bao gồm mô-đun trừu tượng nền tảng cho giao tiếp nô lệ SPI.
Tóm tắt
Typedef |
|
---|---|
otPlatSpiSlaveTransactionCompleteCallback)(void *aContext, uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, uint16_t aTransactionLength)
|
typedefbool(*
Cho biết rằng giao dịch SPI đã hoàn tất với độ dài đã cho. |
otPlatSpiSlaveTransactionProcessCallback)(void *aContext)
|
typedefvoid(*
Được gọi sau khi một lệnh gọi lại hoàn tất giao dịch được gọi và trả về TRUE để thực hiện thêm mọi yêu cầu xử lý cần thiết. |
Hàm |
|
---|---|
otPlatSpiSlaveDisable(void)
|
void
Tắt và vô hiệu hoá giao diện nô lệ SPI.
|
otPlatSpiSlaveEnable(otPlatSpiSlaveTransactionCompleteCallback aCompleteCallback, otPlatSpiSlaveTransactionProcessCallback aProcessCallback, void *aContext)
|
Khởi động giao diện nô lệ SPI.
|
otPlatSpiSlavePrepareTransaction(uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, bool aRequestTransactionFlag)
|
Chuẩn bị dữ liệu cho giao dịch SPI tiếp theo.
|
Typedef
otPlatSpiSlaveTransactionCompleteCallback
bool(* otPlatSpiSlaveTransactionCompleteCallback)(void *aContext, uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, uint16_t aTransactionLength)
Cho biết rằng giao dịch SPI đã hoàn tất với độ dài đã cho.
Dữ liệu được ghi vào nô lệ đã được ghi vào con trỏ mà đối số aInputBuf
biểu thị tới lệnh gọi trước đó đến otPlatSpiSlavePrepareTransaction()
.
Sau khi hàm này được gọi, otPlatSpiSlavePrepareTransaction()
sẽ không hợp lệ và phải được gọi lại để giao dịch tiếp theo hợp lệ.
Lưu ý rằng hàm này luôn được gọi ở cuối giao dịch, ngay cả khi otPlatSpiSlavePrepareTransaction()
chưa được gọi. Trong những trường hợp như vậy, aOutputBufLen
và aInputBufLen
sẽ bằng 0.
Hệ thống có thể gọi lệnh gọi lại này từ ngữ cảnh ISR. Giá trị trả về của hàm này cho biết liệu bạn có cần xử lý thêm hay không. Nếu TRUE
được trả về, quá trình triển khai trình điều khiển spi-slave của nền tảng phải gọi lệnh gọi lại quy trình giao dịch (aProcessCallback
đặt trong otPlatSpiSlaveEnable()
). Khác với lệnh gọi lại này, lệnh gọi lại này phải được gọi từ cùng ngữ cảnh hệ điều hành mà mọi API/lệnh gọi lại OpenThread khác được gọi.
Thông tin chi tiết | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Các tham số |
|
||||||||||||
Trả về |
TRUE nếu sau khi lệnh gọi này trả về, nền tảng sẽ gọi lệnh gọi lại quy trình
aProcessCallback , FALSE nếu không có gì để xử lý và không cần gọi lệnh gọi lại quy trình. |
otPlatSpiSlaveTransactionProcessCallback
void(* otPlatSpiSlaveTransactionProcessCallback)(void *aContext)
Được gọi sau khi một lệnh gọi lại hoàn tất giao dịch được gọi và trả về TRUE
để thực hiện thêm mọi yêu cầu xử lý cần thiết.
Không giống như otPlatSpiSlaveTransactionCompleteCallback
có thể được gọi từ bất kỳ ngữ cảnh hệ điều hành nào (ví dụ: ISR), lệnh gọi lại này PHẢI được gọi từ cùng ngữ cảnh hệ điều hành như mọi API/lệnh gọi lại OpenThread khác.
Thông tin chi tiết | |||
---|---|---|---|
Các tham số |
|
Hàm
otPlatSpiSlaveDisable
void otPlatSpiSlaveDisable( void )
Tắt và vô hiệu hoá giao diện nô lệ SPI.
otPlatSpiSlaveEnable
otError otPlatSpiSlaveEnable( otPlatSpiSlaveTransactionCompleteCallback aCompleteCallback, otPlatSpiSlaveTransactionProcessCallback aProcessCallback, void *aContext )
Khởi động giao diện nô lệ SPI.
Lưu ý rằng nô lệ SPI chưa hoàn toàn sẵn sàng cho đến khi giao dịch được chuẩn bị bằng otPlatSPISlavePrepareTransaction()
.
Nếu các byte otPlatSPISlavePrepareTransaction() is not called before the master begins a transaction, the resulting SPI transaction will send all
0xFF` và loại bỏ tất cả các byte đã nhận.
Thông tin chi tiết | |||||||
---|---|---|---|---|---|---|---|
Các tham số |
|
||||||
Giá trị trả về |
|
otPlatSpiSlavePrepareTransaction
otError otPlatSpiSlavePrepareTransaction( uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, bool aRequestTransactionFlag )
Chuẩn bị dữ liệu cho giao dịch SPI tiếp theo.
Con trỏ dữ liệu PHẢI vẫn hợp lệ cho đến khi lệnh gọi lại hoàn tất giao dịch được trình điều khiển phụ kiện SPI gọi, hoặc cho đến sau lần gọi tiếp theo đến otPlatSpiSlavePrepareTransaction()
.
Có thể được gọi nhiều lần trước khi chủ SPI bắt đầu giao dịch. Mỗi lệnh gọi thành công đến hàm này sẽ khiến các giá trị trước đó của các lệnh gọi trước đó bị loại bỏ.
Việc không gọi hàm này sau khi giao dịch đã hoàn tất giống như khi hàm này được gọi trước đó với cả độ dài vùng đệm được đặt thành 0 và aRequestTransactionFlag
được đặt thành false
.
Khi aOutputBufLen
byte của aOutputBuf
đã được hết giờ, chân MISO sẽ được đặt ở mức cao cho đến khi máy chủ hoàn tất giao dịch SPI. Chức năng này tương đương với việc khoảng đệm phần cuối của aOutputBuf
với 0xFF
byte vào chiều dài giao dịch.
Sau khi các byte aInputBufLen
của aInputBuf được tăng tốc độ từ MOSI, tất cả các giá trị tiếp theo từ chân MOSI sẽ bị bỏ qua cho đến khi tín hiệu chính SPI hoàn tất giao dịch.
Lưu ý rằng ngay cả khi aInputBufLen
hoặc aOutputBufLen
(hoặc cả hai) bị hết trước khi bản chính SPI hoàn tất giao dịch, bạn vẫn phải theo dõi kích thước giao dịch đang diễn ra để được truyền đến lệnh gọi lại hoàn tất giao dịch. Ví dụ: nếu aInputBufLen
bằng 10 và aOutputBufLen
bằng 20 và đồng hồ chủ SPI hết 30 byte, thì giá trị 30 sẽ được truyền đến lệnh gọi lại hoàn tất giao dịch.
Nếu một con trỏ NULL
được truyền vào dưới dạng aOutputBuf
hoặc aInputBuf
, thì con trỏ vùng đệm đó sẽ không thay đổi so với giá trị trước đó/hiện tại. Trong trường hợp này, đối số độ dài tương ứng nên được bỏ qua. Ví dụ: otPlatSpiSlavePrepareTransaction(NULL, 0, aInputBuf, aInputLen, false)
thay đổi con trỏ vùng đệm đầu vào và độ dài nhưng vẫn giữ nguyên con trỏ vùng đệm đầu ra như trước đây.
Bất kỳ lệnh gọi nào đến hàm này trong khi giao dịch đang diễn ra đều sẽ khiến tất cả đối số bị bỏ qua và giá trị trả về là OT_ERROR_BUSY
.
Thông tin chi tiết | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Các tham số |
|
||||||||||
Giá trị trả về |
|
Tài nguyên
Các chủ đề tham khảo API OpenThread bắt nguồn từ mã nguồn, có trên GitHub. Để biết thêm thông tin hoặc để đóng góp cho tài liệu của chúng tôi, hãy tham khảo Tài nguyên.