Google cam kết thúc đẩy công bằng chủng tộc cho Cộng đồng người da đen. Xem cách thực hiện.

nô lệ SPI

Mô-đun này bao gồm bản tóm tắt 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) typedef
bool(*
Cho biết rằng một giao dịch SPI đã hoàn tất với độ dài đã cho.
otPlatSpiSlaveTransactionProcessCallback)(void *aContext) typedef
void(*
Được gọi sau khi lệnh gọi lại hoàn tất giao dịch được gọi và trả về TRUE để tiếp tục xử lý.

Hàm

otPlatSpiSlaveDisable(void)
void
Tắt và vô hiệu hóa giao diện nô lệ SPI.
otPlatSpiSlaveEnable(otPlatSpiSlaveTransactionCompleteCallback aCompleteCallback, otPlatSpiSlaveTransactionProcessCallback aProcessCallback, void *aContext)
Khởi tạo 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 một giao dịch SPI đã hoàn tất với độ dài đã cho.

Dữ liệu được ghi vào chế độ nô lệ đã được ghi vào con trỏ do đối số aInputBuf chỉ định cho lệnh gọi trước đó tới otPlatSpiSlavePrepareTransaction().

Sau khi hàm này được gọi, otPlatSpiSlavePrepareTransaction() không hợp lệ và phải được gọi lại để giao dịch tiếp theo hợp lệ.

Xin lưu ý rằng hàm này luôn được gọi khi kết thúc giao dịch, ngay cả khi otPlatSpiSlavePrepareTransaction() chưa được gọi. Trong những trường hợp như vậy, aOutputBufLenaInputBufLen sẽ bằng 0.

Lệnh gọi lại này có thể được gọi từ ngữ cảnh ISR. Giá trị trả về từ hàm này cho biết liệu 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 gián đoạn nền tảng phải gọi ra lệnh gọi lại quy trình giao dịch (aProcessCallback được đặt trong otPlatSpiSlaveEnable()). Không giống như lệnh gọi lại này phải được gọi từ cùng một ngữ cảnh hệ điều hành mà bất kỳ lệnh gọi/lệnh gọi lại OpenThread nào khác được gọi.

Thông tin chi tiết
Các thông số
[in] aContext
Đã đưa con trỏ ngữ cảnh vào otPlatSpiSlaveEnable().
[in] aOutputBuf
Giá trị của aOutputBuf từ cuộc gọi gần đây nhất đến otPlatSpiSlavePrepareTransaction().
[in] aOutputBufLen
Giá trị của aOutputBufLen từ cuộc gọi gần đây nhất đến otPlatSpiSlavePrepareTransaction().
[in] aInputBuf
Giá trị của aInputBuf từ cuộc gọi cuối cùng đến otPlatSpiSlavePrepareTransaction().
[in] aInputBufLen
Giá trị của aInputBufLen từ cuộc gọi gần đây nhất đến otPlatSpiSlavePrepareTransaction()
[in] aTransactionLength
Thời lượng của giao dịch đã hoàn tất, tính bằng byte.
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 phải gọi lệnh gọi lại quy trình.

otPlatSpiSlavetransactionProcessCallback

void(* otPlatSpiSlaveTransactionProcessCallback)(void *aContext)

Được gọi sau khi lệnh gọi lại hoàn tất giao dịch được gọi và trả về TRUE để tiếp tục xử lý.

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 một ngữ cảnh hệ điều hành như bất kỳ API/lệnh gọi lại OpenThread khác.

Thông tin chi tiết
Các thông số
[in] aContext
Đã đưa con trỏ ngữ cảnh vào otPlatSpiSlaveEnable().

Hàm

otPlatSpiSlavedisable

void otPlatSpiSlaveDisable(
  void
)

Tắt và vô hiệu hóa giao diện nô lệ SPI.

otPlatSpiSlaveEnable

otError otPlatSpiSlaveEnable(
  otPlatSpiSlaveTransactionCompleteCallback aCompleteCallback,
  otPlatSpiSlaveTransactionProcessCallback aProcessCallback,
  void *aContext
)

Khởi tạo giao diện nô lệ SPI.

Lưu ý rằng nô lệ SPI chưa sẵn sàng cho đến khi giao dịch được chuẩn bị bằng otPlatSPISlavePrepareTransaction().

Nếu otPlatSPISlavePrepareTransaction() is not called before the master begins a transaction, the resulting SPI transaction will send all0xFF` byte và loại bỏ tất cả các byte đã nhận.

Thông tin chi tiết
Các thông số
[in] aCompleteCallback
Trỏ tới giao dịch hoàn tất giao dịch.
[in] aProcessCallback
Con trỏ để xử lý cuộc gọi lại.
[in] aContext
Con trỏ ngữ cảnh cần chuyển đến các lệnh gọi lại.
Giá trị trả về
OT_ERROR_NONE
Đã bật thành công giao diện SPI nô lệ.
OT_ERROR_ALREADY
Giao diện SPI nô lệ đã được bật.
OT_ERROR_FAILED
Không bật được giao diện SPI nô lệ.

otPlatSpiSlave mạnhGiao dịch

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 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 nô lệ SPI gọi hoặc cho đến sau lệnh gọi tiếp theo tới otPlatSpiSlavePrepareTransaction().

Hàm này có thể được gọi nhiều lần trước khi lệnh chính 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 đó từ các lệnh gọi trước đó bị hủy.

Không gọi hàm này sau một 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 của bộ đệm được đặt là 0 và aRequestTransactionFlag được đặt thành false.

Khi aOutputBufLen byte của aOutputBuf đã được báo hết, ghim MISO sẽ được đặt ở mức cao cho đến khi giao dịch chính hoàn tất giao dịch SPI. Đây là hàm tương đương chức năng cho khoảng đệm của cuối aOutputBuf, có 0xFF byte trong chiều dài của giao dịch.

Sau khi aInputBufLen byte của đầu vào a

Xin lưu ý rằng ngay cả khi aInputBufLen hoặc aOutputBufLen (hoặc cả hai) đã hết trước khi trang chính SPI hoàn tất một giao dịch, thì kích thước hiện tại của giao dịch vẫn phải được theo dõi để được chuyể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à phiên bản chính SPI hết 30 byte, thì giá trị 30 được chuyển vào lệnh gọi lại hoàn tất giao dịch.

Nếu con trỏ NULL được chuyển vào dưới dạng aOutputBuf hoặc aInputBuf, thì nghĩa là con trỏ đệm không được thay đổi so với giá trị hiện tại/giá trị trước đó. Trong trường hợp này, đối số độ dài tương ứng sẽ được bỏ qua. Ví dụ: otPlatSpiSlavePrepareTransaction(NULL, 0, aInputBuf, aInputLen, false) sẽ thay đổi con trỏ vùng đệm đầu vào và độ dài của con trỏ nhưng vẫn giữ nguyên con trỏ đầu ra như trước đây.

Mọi lệnh gọi đến hàm này trong khi đang xử lý giao dịch 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 thông số
[in] aOutputBuf
Dữ liệu cần ghi vào ghim MISO
[in] aOutputBufLen
Kích thước của bộ đệm đầu ra, tính bằng byte
[in] aInputBuf
Dữ liệu cần đọc từ mã MOSI
[in] aInputBufLen
Kích thước của bộ đệm đầu vào, tính bằng byte
[in] aRequestTransactionFlag
Đặt thành true nếu ngắt máy chủ
Giá trị trả về
OT_ERROR_NONE
Đã chuẩn bị thành công giao dịch.
OT_ERROR_BUSY
Một giao dịch hiện đang diễn ra.
OT_ERROR_INVALID_STATE
otPlatSpiSlaveEnable() chưa được gọi.

Tài nguyên

Các chủ đề về Tham chiếu API OpenThread được tạo từ mã nguồn, có sẵn 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 phần Tài nguyên.