26#include "hal_common.h"
31#define HAL_SPI_DRIVER_VERSION (MAKE_VERSION(1, 1, 0))
39#define SPI_DUMMYDATA (0xA5U)
42#ifndef SPI_RETRY_TIMES
43#define SPI_RETRY_TIMES 0U
452#if defined(__cplusplus)
514 uint32_t src_clock_hz);
577 SET_VAL_MSK(base->SSIENR, SPI_SSIENR_SSI_EN_Msk, SPI_SSIENR_SSI_EN_Pos,
592 return (
bool)GET_VAL_MSK(base->SSIENR, SPI_SSIENR_SSI_EN_Msk,
593 SPI_SSIENR_SSI_EN_Pos);
607 SET_VAL_MSK(base->SSIENR, SPI_SSIENR_SSI_EN_Msk, SPI_SSIENR_SSI_EN_Pos, 0U);
610 SET_VAL_MSK(base->SSIENR, SPI_SSIENR_SSI_EN_Msk, SPI_SSIENR_SSI_EN_Pos, 1U);
634 assert(NULL != base);
665 assert(NULL != base);
692 assert(NULL != base);
711 assert(NULL != base);
732 assert(NULL != base);
736 volatile uint32_t temp = 0;
746 temp = GET_VAL_MSK(base->ICR, SPI_ICR_ICR_Msk, SPI_ICR_ICR_Pos);
752 temp = GET_VAL_MSK(base->MSTICR, SPI_MSTICR_MSTICR_Msk, SPI_MSTICR_MSTICR_Pos);
757 temp = GET_VAL_MSK(base->RXOICR, SPI_RXOICR_RXOICR_Msk, SPI_RXOICR_RXOICR_Pos);
762 temp = GET_VAL_MSK(base->RXUICR, SPI_RXUICR_RXUICR_Msk, SPI_RXUICR_RXUICR_Pos);
767 temp = GET_VAL_MSK(base->TXOICR, SPI_TXOICR_TXOICR_Msk, SPI_TXOICR_TXOICR_Pos);
829 uint32_t src_clock_hz);
1059static inline status_t SPI_SlaveHalfDuplexTransferNonBlocking(SPI_Type *base,
1106#if defined(__cplusplus)
#define UNUSED(x)
Definition hal_common.h:45
int32_t status_t
Тип, используемый для всех возвращаемых значений статуса и ошибок
Definition hal_common.h:61
spi_interrupt_enable
Источники прерываний SPI.
Definition hal_spi.h:342
spi_trans_status
Состояния приемо-передачи SPI.
Definition hal_spi.h:324
spi_motorola_cap_data_t
Выбор фронта для захвата данных для формата кадра передачи данных Motorola SPI.
Definition hal_spi.h:255
void SPI_SetDummyData(SPI_Type *base, uint8_t dummy_data)
Запись фиктивных данных для передачи
microwire_ctrlword_len_t
Выбор длины управляющего слова для формата кадра передачи данных National Semiconductor Micorwire.
Definition hal_spi.h:174
static void SPI_Reset(SPI_Type *base)
Останов всех операций SPI.
Definition hal_spi.h:604
enum spi_status SPI_MasterTransferBlocking(SPI_Type *base, spi_transfer_t *xfer)
Блокирующая дуплексная передача данных (с ожиданием завершения операции)
status_t SPI_MasterTransferGetTotalByte(spi_master_handle_t *handle, size_t *count)
Получение общего количества байт на передачу и прием
spi_motorola_clk_pol_t
Выбор полярности тактового сигнала при отсутствия передаваемых данных в режиме Master для формата кад...
Definition hal_spi.h:246
void SPI_MasterGetDefaultConfig(spi_config_t *config)
Инициализация конфигурации SPI значениями по умолчанию
enum spi_status SPI_MasterSetBaud(SPI_Type *base, uint32_t baudrate_bps, uint32_t src_clock_hz)
Установка скорости передачи для SPI Master.
enum spi_status SPI_MasterTransferCreateHandle(SPI_Type *base, spi_master_handle_t *handle, spi_master_callback_t callback, void *user_data)
Инициализация дескриптора SPI Master.
status_t SPI_MasterTransferGetRemainingByte(spi_master_handle_t *handle, size_t *count)
Получение количества оставшихся байт для передачи и приема
spi_frame_format_t
Формат кадра передачи данных
Definition hal_spi.h:159
enum spi_status SPI_SlaveInit(SPI_Type *base, const spi_config_t *config)
Инициализация SPI заданной конфигурацией
static void SPI_DisableInterrupts(SPI_Type *base, uint32_t irqs)
Отключение прерываний SPI.
Definition hal_spi.h:690
void SPI_WriteData(SPI_Type *base, uint32_t data)
Запись данных в регистр данных SPI.
void SPI_MasterTransferHandleIRQ(SPI_Type *base, spi_master_handle_t *handle)
status_t SPI_MasterTransferGetByte(spi_master_handle_t *handle, size_t *count)
Получение количества переданных и принятых байт
static bool SPI_IsEnable(SPI_Type *base)
Получение статуса модуля SPI включено/выключено
Definition hal_spi.h:589
void SPI_EnableRxDMA(SPI_Type *base, bool enable)
Включение или отключение запроса DMA от SPI RxFIFO.
static void SPI_Enable(SPI_Type *base, bool enable)
Включение или отключение модуль SPI Master или Slave.
Definition hal_spi.h:574
void SPI_EnableTxDMA(SPI_Type *base, bool enable)
Включение или отключение запроса DMA от SPI TxFIFO.
static status_t SPI_SlaveTransferGetByte(spi_slave_handle_t *handle, size_t *count)
Получение количества байт для обмена
Definition hal_spi.h:1073
spi_rxfifo_watermark_t
Триггер уровня заполнения RxFIFO.
Definition hal_spi.h:92
spi_status
Статусы возврата из функций для драйвера SPI.
Definition hal_spi.h:49
spi_config_internal_t * SPI_GetConfig(SPI_Type *base)
Получение внутренней конфигурации
spi_txfifo_watermark_t
Триггер уровня заполнения TxFIFO.
Definition hal_spi.h:78
static uint32_t SPI_GetStatusFlags(SPI_Type *base)
Получение флага состояния SPI.
Definition hal_spi.h:632
void SPI_SlaveGetDefaultConfig(spi_config_t *config)
Заполнение структуры конфигурации SPI Slave-устройства значениями по умолчанию
spi_shift_direction_t
Формат передачи данных (MSB или LSB)
Definition hal_spi.h:70
void SPI_Deinit(SPI_Type *base)
Деинициализация SPI.
uint32_t SPI_ReadData(SPI_Type *base)
Получение данных из регистра данных SPI.
void(* spi_master_callback_t)(SPI_Type *base, spi_master_handle_t *handle, uint32_t status, void *user_data)
Прототип пользовательской функции обратного вызова Master SPI для вызова по окончанию обмена
Definition hal_spi.h:420
microwire_single_serial_t
Выбор типа передачи (одиночная или последовательная) для формата кадра передачи данных National Semic...
Definition hal_spi.h:218
static status_t SPI_SlaveTransferCreateHandle(SPI_Type *base, spi_slave_handle_t *handle, spi_slave_callback_t callback, void *userData)
Инициализация slave SPI дескриптор
Definition hal_spi.h:1033
static void SPI_EnableInterrupts(SPI_Type *base, uint32_t irqs)
Включение прерываний SPI.
Definition hal_spi.h:663
static void SPI_TakeDownInterrupts(SPI_Type *base, uint32_t irqs)
Сброс флагов прерывания
Definition hal_spi.h:730
enum spi_status SPI_MasterInit(SPI_Type *base, const spi_config_t *config, uint32_t src_clock_hz)
Инициализация SPI модуля как Master с заданной конфигурацией
static void SPI_SlaveTransferHandleIRQ(SPI_Type *base, spi_slave_handle_t *handle)
Обработчик прерываний для SPI.
Definition hal_spi.h:1096
spi_mode_t
Режим передачи (CTRLR0.TMOD)
Definition hal_spi.h:299
uint8_t SPI_GetInstance(SPI_Type *base)
Получение индекса модуля SPI.
enum spi_status SPI_MasterTransferNonBlocking(SPI_Type *base, spi_master_handle_t *handle, spi_transfer_t *xfer)
Неблокирующий SPI обмен по прерыванию
static uint32_t SPI_CurrentStatusInterrupts(SPI_Type *base)
Получение статуса прерываний
Definition hal_spi.h:708
static status_t SPI_SlaveTransferNonBlocking(SPI_Type *base, spi_slave_handle_t *handle, spi_transfer_t *xfer)
Неблокирующая дуплексная передача данных (без ожидания завершения операции)
Definition hal_spi.h:1053
static void SPI_SlaveTransferAbort(SPI_Type *base, spi_slave_handle_t *handle)
Останов передачи для режима Slave по прерыванию.
Definition hal_spi.h:1085
void SPI_MasterTransferAbort(SPI_Type *base, spi_master_handle_t *handle)
Останов передачи для мастер режима
spi_status_flags
SPI флаги статусов
Definition hal_spi.h:275
enum spi_status SPI_MasterHalfDuplexTransferBlocking(SPI_Type *base, spi_half_duplex_transfer_t *xfer)
Блокирующая полудуплексная передача данных (с ожиданием завершения операции)
microwire_busy_ready_check_t
Включить/отключить проверку busy/ready флага (регистр SR) для формата кадра передачи данных National ...
Definition hal_spi.h:200
void(* spi_slave_callback_t)(SPI_Type *base, spi_slave_handle_t *handle, uint32_t status, void *user_data)
Прототип пользовательской функции обратного вызова Slave SPI для вызова по окончанию обмена
Definition hal_spi.h:426
spi_frame_width_t
Размер кадра данных в 32-х битном режиме передачи данных (CTRLR0.DFS_32)
Definition hal_spi.h:107
status_t SPI_MasterHalfDuplexTransferNonBlocking(SPI_Type *base, spi_master_handle_t *handle, spi_half_duplex_transfer_t *xfer)
Выполнение неблокирующего SPI обмена по прерыванию
microwire_tx_rx_t
Направление передачи слова данных для формата кадра передачи данных National Semiconductor Microwire.
Definition hal_spi.h:209
@ SPI_IRQ_MultiMaster
Definition hal_spi.h:343
@ SPI_IRQ_TxFifoOverflow
Definition hal_spi.h:347
@ SPI_IRQ_RxFifoOverflow
Definition hal_spi.h:345
@ SPI_IRQ_RxFifoUnderflow
Definition hal_spi.h:346
@ SPI_IRQ_RxOnly
Definition hal_spi.h:355
@ SPI_IRQ_TxFifoTrigger
Definition hal_spi.h:348
@ SPI_IRQ_TxOnly
Definition hal_spi.h:350
@ SPI_IRQ_All
Definition hal_spi.h:361
@ SPI_IRQ_RxFifoTrigger
Definition hal_spi.h:344
@ SPI_TransStatus_Error_2
Definition hal_spi.h:329
@ SPI_TransStatus_Idle
Definition hal_spi.h:326
@ SPI_TransStatus_Error_3
Definition hal_spi.h:330
@ SPI_TransStatus_Busy
Definition hal_spi.h:325
@ SPI_TransStatus_Error_4
Definition hal_spi.h:331
@ SPI_TransStatus_Error_1
Definition hal_spi.h:328
@ SPI_TransStatus_Error
Definition hal_spi.h:327
@ SPI_MotorolaCapDataFalling
Definition hal_spi.h:257
@ SPI_MotorolaCapDataRising
Definition hal_spi.h:256
@ SPI_MicrowireCtrlWordLen7Bit
Definition hal_spi.h:181
@ SPI_MicrowireCtrlWordLen8Bit
Definition hal_spi.h:182
@ SPI_MicrowireCtrlWordLen11Bit
Definition hal_spi.h:185
@ SPI_MicrowireCtrlWordLen9Bit
Definition hal_spi.h:183
@ SPI_MicrowireCtrlWordLen2Bit
Definition hal_spi.h:176
@ SPI_MicrowireCtrlWordLen3Bit
Definition hal_spi.h:177
@ SPI_MicrowireCtrlWordLen5Bit
Definition hal_spi.h:179
@ SPI_MicrowireCtrlWordLen12Bit
Definition hal_spi.h:186
@ SPI_MicrowireCtrlWordLen4Bit
Definition hal_spi.h:178
@ SPI_MicrowireCtrlWordLen13Bit
Definition hal_spi.h:187
@ SPI_MicrowireCtrlWordLen6Bit
Definition hal_spi.h:180
@ SPI_MicrowireCtrlWordLen16Bit
Definition hal_spi.h:190
@ SPI_MicrowireCtrlWordLen14Bit
Definition hal_spi.h:188
@ SPI_MicrowireCtrlWordLen10Bit
Definition hal_spi.h:184
@ SPI_MicrowireCtrlWordLen1Bit
Definition hal_spi.h:175
@ SPI_MicrowireCtrlWordLen15Bit
Definition hal_spi.h:189
@ SPI_MotorolaClkPolHi
Definition hal_spi.h:248
@ SPI_MotorolaClkPolLow
Definition hal_spi.h:247
@ SPI_FfTexas
Definition hal_spi.h:161
@ SPI_FfMicrowire
Definition hal_spi.h:162
@ SPI_FfMotorola
Definition hal_spi.h:160
@ SPI_RxFifoWatermark3
Definition hal_spi.h:95
@ SPI_RxFifoWatermark2
Definition hal_spi.h:94
@ SPI_RxFifoWatermark8
Definition hal_spi.h:100
@ SPI_RxFifoWatermark6
Definition hal_spi.h:98
@ SPI_RxFifoWatermark5
Definition hal_spi.h:97
@ SPI_RxFifoWatermark4
Definition hal_spi.h:96
@ SPI_RxFifoWatermark1
Definition hal_spi.h:93
@ SPI_RxFifoWatermark7
Definition hal_spi.h:99
@ SPI_Status_IncorrectCall
Definition hal_spi.h:63
@ SPI_Status_RxRingBufferOverrun
Definition hal_spi.h:60
@ SPI_Status_NoTransferInProgress
Definition hal_spi.h:62
@ SPI_Status_Busy
Definition hal_spi.h:56
@ SPI_Status_Timeout
Definition hal_spi.h:54
@ SPI_Status_RxError
Definition hal_spi.h:59
@ SPI_Status_UnexpectedState
Definition hal_spi.h:64
@ SPI_Status_TxError
Definition hal_spi.h:58
@ SPI_Status_ReadOnly
Definition hal_spi.h:52
@ SPI_Status_Ok
Definition hal_spi.h:50
@ SPI_Status_RxFifoBufferOverrun
Definition hal_spi.h:61
@ SPI_Status_Idle
Definition hal_spi.h:57
@ SPI_Status_BaudrateNotSupport
Definition hal_spi.h:55
@ SPI_Status_InvalidArgument
Definition hal_spi.h:53
@ SPI_Status_Fail
Definition hal_spi.h:51
@ SPI_TxFifoWatermark0
Definition hal_spi.h:79
@ SPI_TxFifoWatermark7
Definition hal_spi.h:86
@ SPI_TxFifoWatermark2
Definition hal_spi.h:81
@ SPI_TxFifoWatermark4
Definition hal_spi.h:83
@ SPI_TxFifoWatermark3
Definition hal_spi.h:82
@ SPI_TxFifoWatermark1
Definition hal_spi.h:80
@ SPI_TxFifoWatermark6
Definition hal_spi.h:85
@ SPI_TxFifoWatermark5
Definition hal_spi.h:84
@ SPI_ShiftDirLsbFirst
Definition hal_spi.h:72
@ SPI_ShiftDirMsbFirst
Definition hal_spi.h:71
@ SPI_MicrowireSingle
Definition hal_spi.h:219
@ SPI_MicrowireSerial
Definition hal_spi.h:220
@ SPI_ModeSimplexRx
Definition hal_spi.h:302
@ SPI_ModeSimplexTx
Definition hal_spi.h:301
@ SPI_ModeHalfDuplex
Definition hal_spi.h:303
@ SPI_ModeDuplex
Definition hal_spi.h:300
@ SPI_RxFullFlag
Definition hal_spi.h:279
@ SPI_TxEmptyFlag
Definition hal_spi.h:277
@ SPI_RxNotEmptyFlag
Definition hal_spi.h:278
@ SPI_TxNotFullFlag
Definition hal_spi.h:276
@ SPI_MicrowireBusyReadyCheckEnable
Definition hal_spi.h:202
@ SPI_MicrowireBusyReadyCheckDisable
Definition hal_spi.h:201
@ SPI_Data21Bits
Definition hal_spi.h:125
@ SPI_Data17Bits
Definition hal_spi.h:121
@ SPI_Data10Bits
Definition hal_spi.h:114
@ SPI_Data16Bits
Definition hal_spi.h:120
@ SPI_Data19Bits
Definition hal_spi.h:123
@ SPI_Data24Bits
Definition hal_spi.h:128
@ SPI_Data28Bits
Definition hal_spi.h:132
@ SPI_Data25Bits
Definition hal_spi.h:129
@ SPI_Data20Bits
Definition hal_spi.h:124
@ SPI_Data6Bits
Definition hal_spi.h:110
@ SPI_Data13Bits
Definition hal_spi.h:117
@ SPI_Data7Bits
Definition hal_spi.h:111
@ SPI_Data11Bits
Definition hal_spi.h:115
@ SPI_Data15Bits
Definition hal_spi.h:119
@ SPI_Data8Bits
Definition hal_spi.h:112
@ SPI_Data22Bits
Definition hal_spi.h:126
@ SPI_Data29Bits
Definition hal_spi.h:133
@ SPI_Data27Bits
Definition hal_spi.h:131
@ SPI_Data4Bits
Definition hal_spi.h:108
@ SPI_Data18Bits
Definition hal_spi.h:122
@ SPI_Data9Bits
Definition hal_spi.h:113
@ SPI_Data26Bits
Definition hal_spi.h:130
@ SPI_Data30Bits
Definition hal_spi.h:134
@ SPI_Data32Bits
Definition hal_spi.h:136
@ SPI_Data31Bits
Definition hal_spi.h:135
@ SPI_Data5Bits
Definition hal_spi.h:109
@ SPI_Data14Bits
Definition hal_spi.h:118
@ SPI_Data12Bits
Definition hal_spi.h:116
@ SPI_Data23Bits
Definition hal_spi.h:127
@ SPI_MicrowireTx
Definition hal_spi.h:210
@ SPI_MicrowireRx
Definition hal_spi.h:211
Внутренняя структура конфигурации модуля SPI.
Definition hal_spi.h:396
spi_shift_direction_t shift_dir
Definition hal_spi.h:397
uint8_t frame_width_bytes
Definition hal_spi.h:399
uint8_t frame_width_bits
Definition hal_spi.h:398
Структура конфигурации для Master SPI.
Definition hal_spi.h:309
uint32_t baud_rate_bps
Definition hal_spi.h:312
bool loopback_enable
Definition hal_spi.h:311
spi_frame_format_t frame_format
Definition hal_spi.h:316
spi_shift_direction_t direction
Definition hal_spi.h:315
spi_motorola_cfg_t motorola_cfg
Definition hal_spi.h:318
spi_frame_width_t data_width_bits
Definition hal_spi.h:314
spi_microwire_cfg_t microwire_cfg
Definition hal_spi.h:317
Структура SPI для полудуплексной приемо-передачи в режиме Master.
Definition hal_spi.h:386
size_t tx_data_size
Definition hal_spi.h:389
uint8_t * tx_data
Definition hal_spi.h:387
size_t rx_data_size
Definition hal_spi.h:390
uint8_t * rx_data
Definition hal_spi.h:388
SPI структура дескриптора для работы по прерыванию
Definition hal_spi.h:437
uint8_t frame_width_bits
Definition hal_spi.h:447
volatile uint8_t * tx_data
Definition hal_spi.h:438
spi_master_callback_t callback
Definition hal_spi.h:445
volatile uint8_t * rx_data
Definition hal_spi.h:439
size_t total_byte_to_transfer
Definition hal_spi.h:443
volatile size_t rx_remaining_bytes
Definition hal_spi.h:441
volatile size_t tx_remaining_bytes
Definition hal_spi.h:440
int8_t instance
Definition hal_spi.h:442
spi_mode_t mode
Definition hal_spi.h:449
uint8_t frame_width_bytes
Definition hal_spi.h:448
void * user_data
Definition hal_spi.h:446
int32_t state
Definition hal_spi.h:444
Конфигурация для протокола Microwire National Semiconductor.
Definition hal_spi.h:226
microwire_busy_ready_check_t busy_ready_check
Definition hal_spi.h:228
microwire_tx_rx_t tx_rx
Definition hal_spi.h:229
microwire_single_serial_t single_serial
Definition hal_spi.h:230
microwire_ctrlword_len_t ctrl_word_len
Definition hal_spi.h:227
Конфигурация для протокола Motorola SPI.
Definition hal_spi.h:263
spi_motorola_clk_pol_t clk_pol
Definition hal_spi.h:264
spi_motorola_cap_data_t cap_data
Definition hal_spi.h:265
Структура SPI для приемо-передачи
Definition hal_spi.h:377
uint8_t * rx_data
Definition hal_spi.h:379
uint8_t * tx_data
Definition hal_spi.h:378
size_t data_size
Definition hal_spi.h:380