SPI-ведомый
Этот модуль включает абстракцию платформы для связи подчиненных устройств SPI.
Краткое содержание
Определения типов | |
---|---|
otPlatSpiSlaveTransactionCompleteCallback )(void *aContext, uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, uint16_t aTransactionLength) | определение типаbool(* Указывает, что транзакция SPI завершилась заданной длины. |
otPlatSpiSlaveTransactionProcessCallback )(void *aContext) | определение типаvoid(* Вызывается после завершения транзакции и возвращает 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
реализация драйвера spi-slave платформы должна вызвать обратный вызов процесса транзакции ( aProcessCallback
установленный в otPlatSpiSlaveEnable()
), который, в отличие от этого обратного вызова, должен вызываться из того же контекста ОС, что и любой другой API/обратный вызов OpenThread.
Подробности | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Параметры |
| ||||||||||||
Возврат | TRUE, если после возврата этого вызова платформа должна вызвать обратный вызов процесса aProcessCallback , FALSE, если обрабатывать нечего и нет необходимости вызывать обратный вызов процесса. |
otPlatSpiSlaveTransactionProcessCallback
void(* otPlatSpiSlaveTransactionProcessCallback)(void *aContext)
Вызывается после завершения транзакции и возвращает TRUE
для выполнения любой необходимой дальнейшей обработки.
В отличие от otPlatSpiSlaveTransactionCompleteCallback
, который можно вызвать из любого контекста ОС (например, ISR), этот обратный вызов ДОЛЖЕН вызываться из того же контекста ОС, что и любой другой API/обратный вызов OpenThread.
Подробности | |||
---|---|---|---|
Параметры |
|
Функции
отПлатСпиСлавеДисабле
void otPlatSpiSlaveDisable( void )
Выключите и отключите подчиненный интерфейс SPI.
отПлатСпиСлавеEnable
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
.
Подробности | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Параметры |
| ||||||||||
Возвращаемые значения |
|
Ресурсы
Справочные разделы API OpenThread взяты из исходного кода, доступного на GitHub . Для получения дополнительной информации или внесения вклада в нашу документацию обратитесь к Ресурсам .