ELIOT1 HAL
Загрузка...
Поиск...
Не найдено
Драйвер модуля SPI

Последовательный синхронный стандарт передачи данных в режиме полного дуплекса, полудуплекса или симплекса Подробнее...

Файлы

файл  hal_spi.h
 Интерфейс драйвера модуля SPI.
 
файл  hal_spi_dma.h
 Дополнение драйвера SPI с пересылкой данных через DMA.
 

Структуры данных

struct  spi_microwire_cfg_t
 Конфигурация для протокола Microwire National Semiconductor. Подробнее...
 
struct  spi_motorola_cfg_t
 Конфигурация для протокола Motorola SPI. Подробнее...
 
struct  spi_config_t
 Структура конфигурации для Master SPI. Подробнее...
 
struct  spi_transfer_t
 Структура SPI для приемо-передачи Подробнее...
 
struct  spi_half_duplex_transfer_t
 Структура SPI для полудуплексной приемо-передачи в режиме Master. Подробнее...
 
struct  spi_config_internal_t
 Внутренняя структура конфигурации модуля SPI. Подробнее...
 
struct  spi_handle
 SPI структура дескриптора для работы по прерыванию Подробнее...
 
struct  _spi_dma_handle
 Дескриптор SPI-DMA. Подробнее...
 

Макросы

#define HAL_SPI_DRIVER_VERSION   (MAKE_VERSION(1, 1, 0))
 Версия драйвера SPI.
 
#define SPI_DUMMYDATA   (0xA5U)
 SPI фиктивные данные для передачи по умолчанию.
 
#define SPI_RETRY_TIMES   0U
 
#define HAL_SPI_DMA_DRIVER_VERSION   (MAKE_VERSION(1, 0, 0))
 Версия драйвера
 

Определения типов

typedef struct spi_handle spi_master_handle_t
 Дескриптор Master SPI для работы по прерыванию
 
typedef struct spi_handle spi_slave_handle_t
 Дескриптор Slave SPI для работы по прерыванию
 
typedef void(* spi_master_callback_t) (SPI_Type *base, spi_master_handle_t *handle, uint32_t status, void *user_data)
 Прототип пользовательской функции обратного вызова Master SPI для вызова по окончанию обмена
 
typedef void(* spi_slave_callback_t) (SPI_Type *base, spi_slave_handle_t *handle, uint32_t status, void *user_data)
 Прототип пользовательской функции обратного вызова Slave SPI для вызова по окончанию обмена
 
typedef struct _spi_dma_handle spi_dma_handle_t
 Дескриптор SPI-DMA.
 
typedef void(* spi_dma_callback_t) (SPI_Type *base, spi_dma_handle_t *handle, void *user_data, dma_irq_t inttype)
 Функция обратного вызова
 

Перечисления

enum  spi_status
 Статусы возврата из функций для драйвера SPI. Подробнее...
 
enum  spi_shift_direction_t
 Формат передачи данных (MSB или LSB) Подробнее...
 
enum  spi_txfifo_watermark_t
 Триггер уровня заполнения TxFIFO. Подробнее...
 
enum  spi_rxfifo_watermark_t
 Триггер уровня заполнения RxFIFO. Подробнее...
 
enum  spi_frame_width_t
 Размер кадра данных в 32-х битном режиме передачи данных (CTRLR0.DFS_32) Подробнее...
 
enum  spi_frame_format_t
 Формат кадра передачи данных Подробнее...
 
enum  spi_status_flags
 SPI флаги статусов Подробнее...
 
enum  spi_mode_t
 Режим передачи (CTRLR0.TMOD) Подробнее...
 
enum  spi_trans_status
 Состояния приемо-передачи SPI. Подробнее...
 
enum  spi_interrupt_enable
 Источники прерываний SPI. Подробнее...
 

Функции

uint8_t SPI_GetInstance (SPI_Type *base)
 Получение индекса модуля SPI.
 
enum spi_status SPI_MasterTransferCreateHandleDMA (SPI_Type *base, spi_dma_callback_t callback, void *user_data, spi_dma_handle_t *handle, dma_handle_t *tx_handle, dma_handle_t *rx_handle)
 Функция инициализации дескриптора SPI-DMA.
 
enum spi_status SPI_MasterTransferDMA (SPI_Type *base, spi_dma_handle_t *handle, spi_transfer_t *xfer)
 Функция для SPI master приема/передачи данных в полнодуплексном режиме через DMA каналы в порт SPI.
 
enum spi_status SPI_MasterHalfDuplexTransferDMA (SPI_Type *base, spi_dma_handle_t *handle, spi_half_duplex_transfer_t *xfer)
 Функция приема/передачи данных в полудуплексном режиме через DMA каналы в порт SPI.
 
static enum spi_status SPI_SlaveTransferCreateHandleDMA (SPI_Type *base, spi_dma_callback_t callback, void *user_data, spi_dma_handle_t *handle, dma_handle_t *tx_handle, dma_handle_t *rx_handle)
 Функция инициализации дескриптора SPI-DMA.
 
static enum spi_status SPI_SlaveTransferDMA (SPI_Type *base, spi_dma_handle_t *handle, spi_transfer_t *xfer)
 Функция для SPI slave приема/передачи данных в полнодуплексном режиме через DMA каналы в порт SPI.
 
void SPI_MasterTransferAbortDMA (spi_dma_handle_t *handle)
 Прекращение передачи SPI.
 
static void SPI_SlaveTransferAbortDMA (spi_dma_handle_t *handle)
 Прекращение передачи SPI.
 
static void SPI_DMADescriptorInitTX (SPI_Type *base, dma_descriptor_t *desc, uint32_t count, uint32_t data_size, uint8_t src_incr, uint32_t data_width, void *src_addr)
 Инициализация дескрипторов DMA для многоблочной передачи TX.
 
static void SPI_DMADescriptorInitRX (SPI_Type *base, dma_descriptor_t *desc, uint32_t count, uint32_t data_size, uint8_t dst_incr, uint32_t data_width, void *dst_addr)
 Инициализация дескрипторов DMA для многоблочной передачи RX.
 

National Semiconductor Microwire

enum  microwire_ctrlword_len_t
 Выбор длины управляющего слова для формата кадра передачи данных National Semiconductor Micorwire. Подробнее...
 
enum  microwire_busy_ready_check_t
 Включить/отключить проверку busy/ready флага (регистр SR) для формата кадра передачи данных National Semiconductor Microwire. Подробнее...
 
enum  microwire_tx_rx_t
 Направление передачи слова данных для формата кадра передачи данных National Semiconductor Microwire. Подробнее...
 
enum  microwire_single_serial_t
 Выбор типа передачи (одиночная или последовательная) для формата кадра передачи данных National Semiconductor Microwire. Подробнее...
 

Motorola SPI

enum  spi_motorola_clk_pol_t
 Выбор полярности тактового сигнала при отсутствия передаваемых данных в режиме Master для формата кадра передачи данных Motorola SPI. Подробнее...
 
enum  spi_motorola_cap_data_t
 Выбор фронта для захвата данных для формата кадра передачи данных Motorola SPI. Подробнее...
 

Инициализация и деинициализация

void SPI_MasterGetDefaultConfig (spi_config_t *config)
 Инициализация конфигурации SPI значениями по умолчанию
 
enum spi_status SPI_MasterInit (SPI_Type *base, const spi_config_t *config, uint32_t src_clock_hz)
 Инициализация SPI модуля как Master с заданной конфигурацией
 
void SPI_SlaveGetDefaultConfig (spi_config_t *config)
 Заполнение структуры конфигурации SPI Slave-устройства значениями по умолчанию
 
enum spi_status SPI_SlaveInit (SPI_Type *base, const spi_config_t *config)
 Инициализация SPI заданной конфигурацией
 
void SPI_Deinit (SPI_Type *base)
 Деинициализация SPI.
 
static void SPI_Enable (SPI_Type *base, bool enable)
 Включение или отключение модуль SPI Master или Slave.
 
static bool SPI_IsEnable (SPI_Type *base)
 Получение статуса модуля SPI включено/выключено
 
static void SPI_Reset (SPI_Type *base)
 Останов всех операций SPI.
 

Статусы

static uint32_t SPI_GetStatusFlags (SPI_Type *base)
 Получение флага состояния SPI.
 

Прерывания

static void SPI_EnableInterrupts (SPI_Type *base, uint32_t irqs)
 Включение прерываний SPI.
 
static void SPI_DisableInterrupts (SPI_Type *base, uint32_t irqs)
 Отключение прерываний SPI.
 
static uint32_t SPI_CurrentStatusInterrupts (SPI_Type *base)
 Получение статуса прерываний
 
static void SPI_TakeDownInterrupts (SPI_Type *base, uint32_t irqs)
 Сброс флагов прерывания
 

DMA управление

void SPI_EnableTxDMA (SPI_Type *base, bool enable)
 Включение или отключение запроса DMA от SPI TxFIFO.
 
void SPI_EnableRxDMA (SPI_Type *base, bool enable)
 Включение или отключение запроса DMA от SPI RxFIFO.
 

Операции на шине SPI

spi_config_internal_tSPI_GetConfig (SPI_Type *base)
 Получение внутренней конфигурации
 
enum spi_status SPI_MasterSetBaud (SPI_Type *base, uint32_t baudrate_bps, uint32_t src_clock_hz)
 Установка скорости передачи для SPI Master.
 
void SPI_WriteData (SPI_Type *base, uint32_t data)
 Запись данных в регистр данных SPI.
 
uint32_t SPI_ReadData (SPI_Type *base)
 Получение данных из регистра данных SPI.
 
void SPI_SetDummyData (SPI_Type *base, uint8_t dummy_data)
 Запись фиктивных данных для передачи
 

Приемо-передача

enum spi_status SPI_MasterTransferCreateHandle (SPI_Type *base, spi_master_handle_t *handle, spi_master_callback_t callback, void *user_data)
 Инициализация дескриптора SPI Master.
 
enum spi_status SPI_MasterTransferBlocking (SPI_Type *base, spi_transfer_t *xfer)
 Блокирующая дуплексная передача данных (с ожиданием завершения операции)
 
enum spi_status SPI_MasterTransferNonBlocking (SPI_Type *base, spi_master_handle_t *handle, spi_transfer_t *xfer)
 Неблокирующий SPI обмен по прерыванию
 
enum spi_status SPI_MasterHalfDuplexTransferBlocking (SPI_Type *base, spi_half_duplex_transfer_t *xfer)
 Блокирующая полудуплексная передача данных (с ожиданием завершения операции)
 
status_t SPI_MasterHalfDuplexTransferNonBlocking (SPI_Type *base, spi_master_handle_t *handle, spi_half_duplex_transfer_t *xfer)
 Выполнение неблокирующего SPI обмена по прерыванию
 
status_t SPI_MasterTransferGetByte (spi_master_handle_t *handle, size_t *count)
 Получение количества переданных и принятых байт
 
status_t SPI_MasterTransferGetRemainingByte (spi_master_handle_t *handle, size_t *count)
 Получение количества оставшихся байт для передачи и приема
 
status_t SPI_MasterTransferGetTotalByte (spi_master_handle_t *handle, size_t *count)
 Получение общего количества байт на передачу и прием
 
void SPI_MasterTransferAbort (SPI_Type *base, spi_master_handle_t *handle)
 Останов передачи для мастер режима
 
void SPI_MasterTransferHandleIRQ (SPI_Type *base, spi_master_handle_t *handle)
 
static status_t SPI_SlaveTransferCreateHandle (SPI_Type *base, spi_slave_handle_t *handle, spi_slave_callback_t callback, void *userData)
 Инициализация slave SPI дескриптор
 
static status_t SPI_SlaveTransferNonBlocking (SPI_Type *base, spi_slave_handle_t *handle, spi_transfer_t *xfer)
 Неблокирующая дуплексная передача данных (без ожидания завершения операции)
 
static status_t SPI_SlaveHalfDuplexTransferNonBlocking (SPI_Type *base, spi_slave_handle_t *handle, spi_half_duplex_transfer_t *xfer)
 
static status_t SPI_SlaveTransferGetByte (spi_slave_handle_t *handle, size_t *count)
 Получение количества байт для обмена
 
static void SPI_SlaveTransferAbort (SPI_Type *base, spi_slave_handle_t *handle)
 Останов передачи для режима Slave по прерыванию.
 
static void SPI_SlaveTransferHandleIRQ (SPI_Type *base, spi_slave_handle_t *handle)
 Обработчик прерываний для SPI.
 

Подробное описание

Последовательный синхронный стандарт передачи данных в режиме полного дуплекса, полудуплекса или симплекса

Заметки
Драйвер поддерживает обмены по интерфейсу SPI по прерыванию и в режиме опроса, ширину поля данных от 4 до 32 битов, форматы кадров: Motorola SPI, Texas Instruments, Synchronous Serial Protocol (SSP) и NS Microwire.

Макросы

◆ SPI_DUMMYDATA

#define SPI_DUMMYDATA   (0xA5U)

SPI фиктивные данные для передачи по умолчанию.

Заметки
Фиктивные данные передаются в @SPI_MasterTransferBlocking, когда буфер Tx пуст, но есть запрос на прием.

◆ SPI_RETRY_TIMES

#define SPI_RETRY_TIMES   0U

Время повтора для флага ожидания. Ноль означает продолжать ждать, пока флаг не будет установлен/снят

Перечисления

◆ microwire_busy_ready_check_t

Включить/отключить проверку busy/ready флага (регистр SR) для формата кадра передачи данных National Semiconductor Microwire.

Заметки
В активном состоянии модуль SPI проверяет готовность Slave после передачи последнего бита данных, для снятия busy статуса в регистре SR.
Элементы перечислений
SPI_MicrowireBusyReadyCheckDisable 

Отключить проверку

SPI_MicrowireBusyReadyCheckEnable 

Включить проверку

◆ microwire_ctrlword_len_t

Выбор длины управляющего слова для формата кадра передачи данных National Semiconductor Micorwire.

Элементы перечислений
SPI_MicrowireCtrlWordLen1Bit 

Длина - 1 бит

SPI_MicrowireCtrlWordLen2Bit 

Длина - 2 бита

SPI_MicrowireCtrlWordLen3Bit 

Длина - 3 бита

SPI_MicrowireCtrlWordLen4Bit 

Длина - 4 бита

SPI_MicrowireCtrlWordLen5Bit 

Длина - 5 бит

SPI_MicrowireCtrlWordLen6Bit 

Длина - 6 бит

SPI_MicrowireCtrlWordLen7Bit 

Длина - 7 бит

SPI_MicrowireCtrlWordLen8Bit 

Длина - 8 бит

SPI_MicrowireCtrlWordLen9Bit 

Длина - 9 бит

SPI_MicrowireCtrlWordLen10Bit 

Длина - 10 бит

SPI_MicrowireCtrlWordLen11Bit 

Длина - 11 бит

SPI_MicrowireCtrlWordLen12Bit 

Длина - 12 бит

SPI_MicrowireCtrlWordLen13Bit 

Длина - 13 бит

SPI_MicrowireCtrlWordLen14Bit 

Длина - 14 бит

SPI_MicrowireCtrlWordLen15Bit 

Длина - 15 бит

SPI_MicrowireCtrlWordLen16Bit 

Длина - 16 бит

◆ microwire_single_serial_t

Выбор типа передачи (одиночная или последовательная) для формата кадра передачи данных National Semiconductor Microwire.

Элементы перечислений
SPI_MicrowireSingle 

Одиночная передача

SPI_MicrowireSerial 

Последовательная передача

◆ microwire_tx_rx_t

Направление передачи слова данных для формата кадра передачи данных National Semiconductor Microwire.

Элементы перечислений
SPI_MicrowireTx 

SPI передает слово данных

SPI_MicrowireRx 

SPI принимает слово данных

◆ spi_frame_format_t

Формат кадра передачи данных

Заметки
Для Motorola SPI - режим Slave-Select выставляется на всю продолжительность обмена данными.

Для Texas Instruments Synchronous Serial Protocol (SSP):

  • Slave-Select выставляется на 1 такт до начала передачи;
  • Установка данных происходит по переднему фронту Clk, а выборка - по заднему;
  • Значение DFS должно быть кратно 2.

Для National Semiconductor Microwire:

  • Сигнал Slave-Select остается активно-низким на протяжении всей передачи и переходит в высокое состояние через полтакта после окончании передачи данных;
  • Данные устанавливаются по заднему фронту линии синхронизации, а выборка по переднему;
  • Значение DFS должно быть кратно 4.
Элементы перечислений
SPI_FfMotorola 

Motorola SPI

SPI_FfTexas 

Texas Instruments SSP

SPI_FfMicrowire 

National Semiconductor Microwire

◆ spi_frame_width_t

Размер кадра данных в 32-х битном режиме передачи данных (CTRLR0.DFS_32)

Элементы перечислений
SPI_Data4Bits 

4 бита

SPI_Data5Bits 

5 бит

SPI_Data6Bits 

6 бит

SPI_Data7Bits 

7 бит

SPI_Data8Bits 

8 бит

SPI_Data9Bits 

9 бит

SPI_Data10Bits 

10 бит

SPI_Data11Bits 

11 бит

SPI_Data12Bits 

12 бит

SPI_Data13Bits 

13 бит

SPI_Data14Bits 

14 бит

SPI_Data15Bits 

15 бит

SPI_Data16Bits 

16 бит

SPI_Data17Bits 

17 бит

SPI_Data18Bits 

18 бит

SPI_Data19Bits 

19 бит

SPI_Data20Bits 

20 бит

SPI_Data21Bits 

21 бит

SPI_Data22Bits 

22 бита

SPI_Data23Bits 

23 бита

SPI_Data24Bits 

24 бита

SPI_Data25Bits 

25 бит

SPI_Data26Bits 

26 бит

SPI_Data27Bits 

27 бит

SPI_Data28Bits 

28 бит

SPI_Data29Bits 

29 бит

SPI_Data30Bits 

30 бит

SPI_Data31Bits 

31 бит

SPI_Data32Bits 

32 бита

◆ spi_interrupt_enable

Источники прерываний SPI.

Заметки
Битовые маски подходят для работы с регистрами: IMR - регистр маскирования прерываний; ISR - регистр статуса прерываний после маскирования; RISR - регистр статуса прерываний до маскирования.
Элементы перечислений
SPI_IRQ_MultiMaster 

Бит 5: Мультимастер

SPI_IRQ_RxFifoTrigger 

Бит 4: Прерывание по триггеру уровня RxFIFO, если уровень RxFIFO больше или равен регистру RXFLTR

SPI_IRQ_RxFifoOverflow 

Бит 3: Переполнение RxFIFO

SPI_IRQ_RxFifoUnderflow 

Бит 2: Чтение из пустого RxFIFO

SPI_IRQ_TxFifoOverflow 

Бит 1: Переполнение TxFIFO

SPI_IRQ_TxFifoTrigger 

Бит 0: Прерывание по триггеру уровня TxFIFO, если уровень TxFIFO меньше или равен установленному значению регистра TXFTLR

SPI_IRQ_TxOnly 

Только передача

SPI_IRQ_RxOnly 

Только прием

SPI_IRQ_All 

Все прерывания включены

◆ spi_mode_t

enum spi_mode_t

Режим передачи (CTRLR0.TMOD)

Заметки
  • Дуплекс (Duplex) - передача продолжится до последнего слова в FIFO передатчика;
  • Симплекс, только передача (SimplexTx) - принимаемые данные не поступают в RxFIFO; при использовании этого режима необходимо маскировать прерывания от приемника;
  • Симплекс, только прием (SimplexRx) - передаваемые данные не валидны; при использовании этого режима необходимо маскировать прерывания от передатчика;
  • Полудуплекс (Halfduplex) - режим чтения EEPROM. Сначала передаются все данные из TxFIFO, принимаемые в этот момент данные игнорируются; когда все данные были отправлены, модуль принимает заданное в CTRLR1.NDF+1 количество кадров. Режим недоступен для протокола SSP.
Элементы перечислений
SPI_ModeDuplex 

Дуплекс (передача и прием идут одновременно)

SPI_ModeSimplexTx 

Симплекс (только передача)

SPI_ModeSimplexRx 

Симплекс (только прием)

SPI_ModeHalfDuplex 

Полудуплекс (сначала передача потом прием). Режим - чтение EEPROM

◆ spi_motorola_cap_data_t

Выбор фронта для захвата данных для формата кадра передачи данных Motorola SPI.

Элементы перечислений
SPI_MotorolaCapDataRising 

Захват данных происходит по переднему фронту тактового сигнала

SPI_MotorolaCapDataFalling 

Происходит пропуск одного периода тактового сигнала после установки Slave-Select, захват данных происходит по заднему фронту тактового сигнала

◆ spi_motorola_clk_pol_t

Выбор полярности тактового сигнала при отсутствия передаваемых данных в режиме Master для формата кадра передачи данных Motorola SPI.

Элементы перечислений
SPI_MotorolaClkPolLow 

Линия синхронизации до начала цикла передачи и после его окончания имеет низкий уровень

SPI_MotorolaClkPolHi 

Линия синхронизации до начала цикла передачи и после его окончания имеет высокий уровень

◆ spi_rxfifo_watermark_t

Триггер уровня заполнения RxFIFO.

Элементы перечислений
SPI_RxFifoWatermark1 

1 элемент в RxFIFO

SPI_RxFifoWatermark2 

2 элемента в RxFIFO

SPI_RxFifoWatermark3 

3 элемента в RxFIFO

SPI_RxFifoWatermark4 

4 элемента в RxFIFO

SPI_RxFifoWatermark5 

5 элементов в RxFIFO

SPI_RxFifoWatermark6 

6 элементов в RxFIFO

SPI_RxFifoWatermark7 

7 элементов в RxFIFO

SPI_RxFifoWatermark8 

8 элементов в RxFIFO

◆ spi_shift_direction_t

Формат передачи данных (MSB или LSB)

Элементы перечислений
SPI_ShiftDirMsbFirst 

Передача данных начинается со старшего бита

SPI_ShiftDirLsbFirst 

Передача данных начинается с младшего бита

◆ spi_status

enum spi_status

Статусы возврата из функций для драйвера SPI.

Элементы перечислений
SPI_Status_Ok 

Успешно

SPI_Status_Fail 

Провал

SPI_Status_ReadOnly 

Только чтение

SPI_Status_InvalidArgument 

Неверный аргумент

SPI_Status_Timeout 

Отказ по таймауту

SPI_Status_BaudrateNotSupport 

Частота не поддерживается

SPI_Status_Busy 

SPI модуль занят

SPI_Status_Idle 

SPI модуль простаивает

SPI_Status_TxError 

Ошибка в TxFIFO

SPI_Status_RxError 

Ошибка в RxFIFO

SPI_Status_RxRingBufferOverrun 

Ошибка в кольцевом буфере Rx

SPI_Status_RxFifoBufferOverrun 

Ошибка переполнения hw RxFIFO буферa

SPI_Status_NoTransferInProgress 

Нет текущего обмена

SPI_Status_IncorrectCall 

Некорректный вызов с текущими настройками модуля

SPI_Status_UnexpectedState 

Неожиданное состояние

◆ spi_status_flags

SPI флаги статусов

Элементы перечислений
SPI_TxNotFullFlag 

TxFIFO не полон

SPI_TxEmptyFlag 

TxFIFO пуст

SPI_RxNotEmptyFlag 

RxFIFO не пуст

SPI_RxFullFlag 

RxFIFO полон

◆ spi_trans_status

Состояния приемо-передачи SPI.

Элементы перечислений
SPI_TransStatus_Busy 

Модуль занят

SPI_TransStatus_Idle 

Модуль простаивает

SPI_TransStatus_Error 

Ошибка

SPI_TransStatus_Error_1 

Multi Master Конфликт

SPI_TransStatus_Error_2 

Внутренняя ошибка, TxFIFO Overflow

SPI_TransStatus_Error_3 

Внутренняя ошибка, RxFIFO Overflow

SPI_TransStatus_Error_4 

Внутренняя ошибка, RxFIFO Underflow

◆ spi_txfifo_watermark_t

Триггер уровня заполнения TxFIFO.

Элементы перечислений
SPI_TxFifoWatermark0 

TxFIFO пуст

SPI_TxFifoWatermark1 

1 элемент в TxFIFO

SPI_TxFifoWatermark2 

2 элемента в TxFIFO

SPI_TxFifoWatermark3 

3 элемента в TxFIFO

SPI_TxFifoWatermark4 

4 элемента в TxFIFO

SPI_TxFifoWatermark5 

5 элементов в TxFIFO

SPI_TxFifoWatermark6 

6 элементов в TxFIFO

SPI_TxFifoWatermark7 

7 элементов в TxFIFO

Функции

◆ SPI_CurrentStatusInterrupts()

static uint32_t SPI_CurrentStatusInterrupts ( SPI_Type * base)
inlinestatic

Получение статуса прерываний

Аргументы
baseБазовый адрес SPI
Возвращает
Статус прерываний

◆ SPI_Deinit()

void SPI_Deinit ( SPI_Type * base)

Деинициализация SPI.

Заметки
Вызов этого API сбрасывает модуль SPI. Модуль SPI не может работать без вызова функции SPI_MasterInit / SPI_SlaveInit для инициализации.
Аргументы
baseБазовый адрес SPI

◆ SPI_DisableInterrupts()

static void SPI_DisableInterrupts ( SPI_Type * base,
uint32_t irqs )
inlinestatic

Отключение прерываний SPI.

Заметки
В качестве источника прерывания может быть комбинация следующих значений: SPI_IRQ_MultiMaster SPI_IRQ_RxFifoTrigger SPI_IRQ_RxFifoOverflow SPI_IRQ_RxFifoUnderflow SPI_IRQ_TxFifoOverflow SPI_IRQ_TxFifoTrigger SPI_IRQ_All
Аргументы
baseБазовый адрес SPI
irqsИсточники прерываний

◆ SPI_DMADescriptorInitRX()

static void SPI_DMADescriptorInitRX ( SPI_Type * base,
dma_descriptor_t * desc,
uint32_t count,
uint32_t data_size,
uint8_t dst_incr,
uint32_t data_width,
void * dst_addr )
inlinestatic

Инициализация дескрипторов DMA для многоблочной передачи RX.

Аргументы
baseБазовый адрес SPI
descУказатель на массив дескрипторов
countКоличество DMA дескрипторов
data_sizeОбщее число передаваемых данных
data_widthШирина 1ого передаваемого слова
dst_addrАдрес Приемника

◆ SPI_DMADescriptorInitTX()

static void SPI_DMADescriptorInitTX ( SPI_Type * base,
dma_descriptor_t * desc,
uint32_t count,
uint32_t data_size,
uint8_t src_incr,
uint32_t data_width,
void * src_addr )
inlinestatic

Инициализация дескрипторов DMA для многоблочной передачи TX.

Аргументы
baseБазовый адрес SPI
descУказатель на массив дескрипторов
countКоличество DMA дескрипторов
data_sizeОбщее число передаваемых данных
data_widthШирина одного передаваемого слова
src_addrАдрес Источника

◆ SPI_Enable()

static void SPI_Enable ( SPI_Type * base,
bool enable )
inlinestatic

Включение или отключение модуль SPI Master или Slave.

Аргументы
baseБазовый адрес SPI
enableВключить (1) или выключить (0)

◆ SPI_EnableInterrupts()

static void SPI_EnableInterrupts ( SPI_Type * base,
uint32_t irqs )
inlinestatic

Включение прерываний SPI.

Заметки
В качестве источника прерывания может быть комбинация следующих значений: SPI_IRQ_MultiMaster SPI_IRQ_RxFifoTrigger SPI_IRQ_RxFifoOverflow SPI_IRQ_RxFifoUnderflow SPI_IRQ_TxFifoOverflow SPI_IRQ_TxFifoTrigger SPI_IRQ_All
Аргументы
baseБазовый адрес SPI
irqsИсточники прерываний

◆ SPI_EnableRxDMA()

void SPI_EnableRxDMA ( SPI_Type * base,
bool enable )

Включение или отключение запроса DMA от SPI RxFIFO.

Аргументы
baseБазовый адрес SPI
enableВключить (1) или выключить (0)

◆ SPI_EnableTxDMA()

void SPI_EnableTxDMA ( SPI_Type * base,
bool enable )

Включение или отключение запроса DMA от SPI TxFIFO.

Аргументы
baseБазовый адрес SPI
enableВключить (1) или выключить (0)

◆ SPI_GetConfig()

spi_config_internal_t * SPI_GetConfig ( SPI_Type * base)

Получение внутренней конфигурации

Аргументы
baseБазовый адрес SPI
Возвращает
Внутренняя структура конфигурации модуля SPI

◆ SPI_GetInstance()

uint8_t SPI_GetInstance ( SPI_Type * base)

Получение индекса модуля SPI.

Аргументы
baseБазовый адрес SPI
Возвращает
Индекс модуля

◆ SPI_GetStatusFlags()

static uint32_t SPI_GetStatusFlags ( SPI_Type * base)
inlinestatic

Получение флага состояния SPI.

Заметки
Для получения статуса, соответствующего состоянию SPI, необходимо использовать полученный флаг состояния и spi_status_flags.
Аргументы
baseБазовый адрес SPI
Возвращает
Состояние SPI

◆ SPI_IsEnable()

static bool SPI_IsEnable ( SPI_Type * base)
inlinestatic

Получение статуса модуля SPI включено/выключено

Аргументы
baseБазовый адрес SPI
Возвращаемые значения
1Включено
0Выключено

◆ SPI_MasterGetDefaultConfig()

void SPI_MasterGetDefaultConfig ( spi_config_t * config)

Инициализация конфигурации SPI значениями по умолчанию

Заметки
Инициализация структуры конфигурации SPI для использования в SPI_MasterInit. Инициализированную структуру можно использовать как без изменений, так и изменив какие-либо из полей структуры перед вызовом SPI_MasterInit.

Пример:

spi_config_t config;
void SPI_MasterGetDefaultConfig(spi_config_t *config)
Инициализация конфигурации SPI значениями по умолчанию
Структура конфигурации для Master SPI.
Definition hal_spi.h:309
Аргументы
configКонфигурация SPI

◆ SPI_MasterHalfDuplexTransferBlocking()

enum spi_status SPI_MasterHalfDuplexTransferBlocking ( SPI_Type * base,
spi_half_duplex_transfer_t * xfer )

Блокирующая полудуплексная передача данных (с ожиданием завершения операции)

Заметки
Функция не возвращает управление, пока все данные не будут переданы. Данные передаются в полудуплексном режиме. Пользователь может выбрать, что будет выполняться в первую очередь - передача или прием.
Аргументы
baseБазовый адрес SPI
xferСтруктура для полудуплексной приемо-передачи
Возвращаемые значения
SPI_Status_Ok
SPI_Status_InvalidArgument
SPI_Status_Timeout

◆ SPI_MasterHalfDuplexTransferDMA()

enum spi_status SPI_MasterHalfDuplexTransferDMA ( SPI_Type * base,
spi_dma_handle_t * handle,
spi_half_duplex_transfer_t * xfer )

Функция приема/передачи данных в полудуплексном режиме через DMA каналы в порт SPI.

Аргументы
baseБазовый адрес SPI master
handleДескриптор передачи
xferПараметры полудуплексной передачи
Возвращаемые значения
#SPI_DMA_Status_InvalidArgument
#SPI_DMA_Status_Busy
#SPI_DMA_Status_SPINotExist
#SPI_DMA_Status_Fail
#SPI_DMA_Status_Success

◆ SPI_MasterHalfDuplexTransferNonBlocking()

status_t SPI_MasterHalfDuplexTransferNonBlocking ( SPI_Type * base,
spi_master_handle_t * handle,
spi_half_duplex_transfer_t * xfer )

Выполнение неблокирующего SPI обмена по прерыванию

Заметки
Эта функция использует режим опроса для первый части обмена и использует прерывания для выполения второй части обмена. Режим обмена полудуплексный. Когда завершится первая часть обмена, сразу произойдет выход из функции, по завершении второй части обмена произойдет вызов callback-функции.
Аргументы
baseБазовый адрес SPI.
handleSPI структура дескриптора для работы по прерыванию.
xferСтруктура для полудуплексной приемо-передачи.
Возвращаемые значения
SPI_Status_Ok
SPI_Status_InvalidArgument

◆ SPI_MasterInit()

enum spi_status SPI_MasterInit ( SPI_Type * base,
const spi_config_t * config,
uint32_t src_clock_hz )

Инициализация SPI модуля как Master с заданной конфигурацией

Структура конфигурации может быть заполнена пользователем с нуля или установлена по умолчанию значения с помощью SPI_MasterGetDefaultConfig. После вызова этого API ведомое устройство готово к передаче.

Пример:

spi_config_t config = {
.frame_width_bits = SPI_Data8Bits;
.enable = false;
.master.baud_rate_bps = 50000;
...
};
SPI_MasterInit(SPI0, &config);
enum spi_status SPI_MasterInit(SPI_Type *base, const spi_config_t *config, uint32_t src_clock_hz)
Инициализация SPI модуля как Master с заданной конфигурацией
@ SPI_Data8Bits
Definition hal_spi.h:112
bool loopback_enable
Definition hal_spi.h:311
struct spi_config_t::@18 master
Аргументы
baseБазовый адрес SPI
configОсновная конфигурация SPI
src_clock_hzИсходная тактовая частота
Возвращаемые значения
SPI_Status_Ok
SPI_Status_InvalidArgument

◆ SPI_MasterSetBaud()

enum spi_status SPI_MasterSetBaud ( SPI_Type * base,
uint32_t baudrate_bps,
uint32_t src_clock_hz )

Установка скорости передачи для SPI Master.

Аргументы
baseБазовый адрес SPI
baudrate_bpsСкорость передачи в Hz
src_clock_hzSPI частота синхронизации в Hz
Возвращаемые значения
SPI_Status_Ok
SPI_Status_BaudrateNotSupport
SPI_Status_InvalidArgument

◆ SPI_MasterTransferAbort()

void SPI_MasterTransferAbort ( SPI_Type * base,
spi_master_handle_t * handle )

Останов передачи для мастер режима

Заметки
Функция останавливает передачу, происходящую по прерываниям.
Аргументы
baseБазовый адрес SPI.
handleSPI структура дескриптора для работы по прерыванию.

◆ SPI_MasterTransferAbortDMA()

void SPI_MasterTransferAbortDMA ( spi_dma_handle_t * handle)

Прекращение передачи SPI.

Аргументы
handleДескриптор SPI-DMA

◆ SPI_MasterTransferBlocking()

enum spi_status SPI_MasterTransferBlocking ( SPI_Type * base,
spi_transfer_t * xfer )

Блокирующая дуплексная передача данных (с ожиданием завершения операции)

Заметки
Функция не поддерживает симплексный режим обмена. Это значит, что в xfer должны быть переданы указатели на данные для передачи и буфер на прием с указанием длины, неравной нулю. Если требуется симплексный обмен, используйте @SPI_MasterHalfDuplexTransferBlocking
Аргументы
baseБазовый адрес SPI
xferСтруктура для приемо-передачи
Возвращаемые значения
SPI_Status_Ok
SPI_Status_InvalidArgument
SPI_Status_Timeout

◆ SPI_MasterTransferCreateHandle()

enum spi_status SPI_MasterTransferCreateHandle ( SPI_Type * base,
spi_master_handle_t * handle,
spi_master_callback_t callback,
void * user_data )

Инициализация дескриптора SPI Master.

Аргументы
baseБазовый адрес SPI
handleSPI дескриптор
callbackCallback-функция
user_dataДанные пользователя для callback-функции
Возвращаемые значения
SPI_Status_Ok
SPI_Status_InvalidArgument

◆ SPI_MasterTransferCreateHandleDMA()

enum spi_status SPI_MasterTransferCreateHandleDMA ( SPI_Type * base,
spi_dma_callback_t callback,
void * user_data,
spi_dma_handle_t * handle,
dma_handle_t * tx_handle,
dma_handle_t * rx_handle )

Функция инициализации дескриптора SPI-DMA.

Аргументы
baseБазовый адрес SPI master
handleДескриптор SPI-DMA
callbackФункция обратного вызова
user_dataПользовательские данные
tx_handleDMA дескриптор отправки
rx_handleDMA дескриптор приема
Возвращаемые значения
#SPI_DMA_Status_InvalidArgument
#SPI_DMA_Status_Success

◆ SPI_MasterTransferDMA()

enum spi_status SPI_MasterTransferDMA ( SPI_Type * base,
spi_dma_handle_t * handle,
spi_transfer_t * xfer )

Функция для SPI master приема/передачи данных в полнодуплексном режиме через DMA каналы в порт SPI.

Аргументы
baseБазовый адрес SPI master
handleДескриптор SPI-DMA
xferПараметры передачи SPI
Возвращаемые значения
#SPI_DMA_Status_InvalidArgument
#SPI_DMA_Status_Busy
#SPI_DMA_Status_SPINotExist
#SPI_DMA_Status_Success

◆ SPI_MasterTransferGetByte()

status_t SPI_MasterTransferGetByte ( spi_master_handle_t * handle,
size_t * count )

Получение количества переданных и принятых байт

Аргументы
handleSPI структура дескриптора для работы по прерыванию.
countКоличество байтов, переданных с помощью неблокирующей транзакции.
Возвращаемые значения
SPI_Status_Ok
SPI_Status_InvalidArgument

◆ SPI_MasterTransferGetRemainingByte()

status_t SPI_MasterTransferGetRemainingByte ( spi_master_handle_t * handle,
size_t * count )

Получение количества оставшихся байт для передачи и приема

Аргументы
handleSPI структура дескриптора для работы по прерыванию.
countКоличество байтов, оставшихся для передачи и приема c помощью неблокирующей транзакции.
Возвращаемые значения
SPI_Status_Ok
SPI_Status_InvalidArgument

◆ SPI_MasterTransferGetTotalByte()

status_t SPI_MasterTransferGetTotalByte ( spi_master_handle_t * handle,
size_t * count )

Получение общего количества байт на передачу и прием

Аргументы
handleSPI структура дескриптора для работы по прерыванию.
countОбщее количество байт на передачу и прием
Возвращаемые значения
SPI_Status_Ok
SPI_Status_InvalidArgument

◆ SPI_MasterTransferHandleIRQ()

void SPI_MasterTransferHandleIRQ ( SPI_Type * base,
spi_master_handle_t * handle )

brief Обработчик прерываний для SPI.

Аргументы
baseБазовый адрес SPI.
handleSPI структура дескриптора для работы по прерыванию.

◆ SPI_MasterTransferNonBlocking()

enum spi_status SPI_MasterTransferNonBlocking ( SPI_Type * base,
spi_master_handle_t * handle,
spi_transfer_t * xfer )

Неблокирующий SPI обмен по прерыванию

Заметки
Функция используется для разнесенной по времени передачи и приема, первым этапом происходит передача данных заданной ширины, вторым - прием данных. Весь обмен происходит в асинхронном режиме, т.е в прерываниях. По завершении второй части обмена произойдет вызов callback функции.

Функция не поддерживает симплексный режим обмена. Это значит, что в xfer должны быть переданы указатели на данные для передачи и буфер на прием с указанием длины, неравной нулю. Если требуется симплексный обмен, используйте @SPI_MasterHalfDuplexTransferNonBlocking

Аргументы
baseБазовый адрес SPI.
handleSPI структура дескриптора для работы по прерыванию.
xferСтруктура для полудуплексной приемо-передачи.
Возвращаемые значения
SPI_Status_Ok
SPI_Status_InvalidArgument
SPI_Status_IncorrectCall

◆ SPI_ReadData()

uint32_t SPI_ReadData ( SPI_Type * base)

Получение данных из регистра данных SPI.

Аргументы
baseБазовый адрес SPI
Возвращает
Данные регистра

◆ SPI_Reset()

static void SPI_Reset ( SPI_Type * base)
inlinestatic

Останов всех операций SPI.

Заметки
Любые операции передачи данных прерываются немедленно. FIFO буферы приемника и передатчика очищаются.
Аргументы
baseБазовый адрес SPI

◆ SPI_SetDummyData()

void SPI_SetDummyData ( SPI_Type * base,
uint8_t dummy_data )

Запись фиктивных данных для передачи

Заметки
Фиктивные данные передаются в @SPI_MasterTransferBlocking, когда буфер Tx пуст, но есть запрос на прием.
Аргументы
baseБазовый адрес SPI
dummy_dataФиктивные данные

◆ SPI_SlaveGetDefaultConfig()

void SPI_SlaveGetDefaultConfig ( spi_config_t * config)

Заполнение структуры конфигурации SPI Slave-устройства значениями по умолчанию

Заметки
Функция инициализирует структуру конфигурации для использования в SPI_SlaveInit. Пользователь может изменить некоторые поля структуры перед вызовом SPI_SlaveInit.

Пример:

spi_config_t config;
void SPI_SlaveGetDefaultConfig(spi_config_t *config)
Заполнение структуры конфигурации SPI Slave-устройства значениями по умолчанию
Аргументы
configСтруктура конфигурации Slave

◆ SPI_SlaveInit()

enum spi_status SPI_SlaveInit ( SPI_Type * base,
const spi_config_t * config )

Инициализация SPI заданной конфигурацией

Заметки
Структура конфигурации может быть заполнена пользователем или установлена функцией SPI_SlaveGetDefaultConfig() в значения по умолчанию. После вызова этой функции устройство готово к работе в режиме Slave.

Пример:

spi_config_t config = {
.direction = SPIMsbFirst;
...
};
SPI_SlaveInit(SPI0, &config);
enum spi_status SPI_SlaveInit(SPI_Type *base, const spi_config_t *config)
Инициализация SPI заданной конфигурацией
spi_shift_direction_t direction
Definition hal_spi.h:315
Аргументы
baseБазовый адрес SPI
configСтруктура конфигурации Slave
Возвращаемые значения
SPI_Status_Ok
SPI_Status_InvalidArgument

◆ SPI_SlaveTransferAbort()

static void SPI_SlaveTransferAbort ( SPI_Type * base,
spi_slave_handle_t * handle )
inlinestatic

Останов передачи для режима Slave по прерыванию.

Аргументы
baseБазовый адрес SPI.
handleСтруктура дескриптора для работы по прерыванию.

◆ SPI_SlaveTransferAbortDMA()

static void SPI_SlaveTransferAbortDMA ( spi_dma_handle_t * handle)
inlinestatic

Прекращение передачи SPI.

Аргументы
handleДескриптор SPI-DMA

◆ SPI_SlaveTransferCreateHandle()

static status_t SPI_SlaveTransferCreateHandle ( SPI_Type * base,
spi_slave_handle_t * handle,
spi_slave_callback_t callback,
void * userData )
inlinestatic

Инициализация slave SPI дескриптор

Заметки
Функция инициализирует дескриптор slave SPI. Для указанного модуля SPI достаточно вызвать один раз эту функцию, чтобы получить инициализированный дескриптор.
Аргументы
baseБазовый адрес SPI.
handleSPI структура дескриптора для работы по прерыванию.
callbackCallback-функция.
userDataДанные пользователя.
Возвращаемые значения
SPI_Status_UnexpectedState
SPI_Status_Ok

◆ SPI_SlaveTransferCreateHandleDMA()

static enum spi_status SPI_SlaveTransferCreateHandleDMA ( SPI_Type * base,
spi_dma_callback_t callback,
void * user_data,
spi_dma_handle_t * handle,
dma_handle_t * tx_handle,
dma_handle_t * rx_handle )
inlinestatic

Функция инициализации дескриптора SPI-DMA.

Аргументы
baseБазовый адрес SPI slave
handleДескриптор SPI-DMA
callbackФункция обратного вызова
user_dataПользовательские данные
tx_handleDMA дескриптор отправки
rx_handleDMA дескриптор приема
Возвращаемые значения
#SPI_DMA_Status_InvalidArgument
#SPI_DMA_Status_Success

◆ SPI_SlaveTransferDMA()

static enum spi_status SPI_SlaveTransferDMA ( SPI_Type * base,
spi_dma_handle_t * handle,
spi_transfer_t * xfer )
inlinestatic

Функция для SPI slave приема/передачи данных в полнодуплексном режиме через DMA каналы в порт SPI.

Аргументы
baseБазовый адрес SPI slave
handleДескриптор SPI-DMA
xferПараметры передачи SPI
Возвращаемые значения
#SPI_DMA_Status_InvalidArgument
#SPI_DMA_Status_Busy
#SPI_DMA_Status_SPINotExist
#SPI_DMA_Status_Success

◆ SPI_SlaveTransferGetByte()

static status_t SPI_SlaveTransferGetByte ( spi_slave_handle_t * handle,
size_t * count )
inlinestatic

Получение количества байт для обмена

Аргументы
handleSPI структура дескриптора для работы по прерыванию.
countКоличество байтов, переданных с помощью неблокирующей транзакции.
Возвращаемые значения
SPI_Status_Ok
SPI_Status_InvalidArgument

◆ SPI_SlaveTransferHandleIRQ()

static void SPI_SlaveTransferHandleIRQ ( SPI_Type * base,
spi_slave_handle_t * handle )
inlinestatic

Обработчик прерываний для SPI.

Аргументы
baseБазовый адрес SPI.
handleSPI структура дескриптора для работы по прерыванию.

◆ SPI_SlaveTransferNonBlocking()

static status_t SPI_SlaveTransferNonBlocking ( SPI_Type * base,
spi_slave_handle_t * handle,
spi_transfer_t * xfer )
inlinestatic

Неблокирующая дуплексная передача данных (без ожидания завершения операции)

Аргументы
baseБазовый адрес SPI.
handleСтруктура, сохраняющая состояние приемо-передачи.
xferСтруктура для приемо-передачи.
Возвращаемые значения
SPI_Status_Ok
SPI_Status_InvalidArgument
SPI_Status_Busy

◆ SPI_TakeDownInterrupts()

static void SPI_TakeDownInterrupts ( SPI_Type * base,
uint32_t irqs )
inlinestatic

Сброс флагов прерывания

Заметки
Флаги @SPI_IRQ_RxFifoTrigger и @SPI_IRQ_TxFifoTrigger таким образом сбросить нельзя, по этой причине использование @SPI_IRQ_All для сброса всех прерываний недопустимо.
Прерывания @SPI_IRQ_RxFifoTrigger и @SPI_IRQ_TxFifoTrigger можно сбросить, вычитав RxFifo и TxFifo соответственно.
Аргументы
baseБазовый адрес SPI
irqsИсточники прерываний

◆ SPI_WriteData()

void SPI_WriteData ( SPI_Type * base,
uint32_t data )

Запись данных в регистр данных SPI.

Аргументы
baseБазовый адрес SPI
dataДанные для записи