30#include "hal_common.h"
35#define HAL_I2S_DRIVER_VERSION (MAKE_VERSION(0, 1, 0))
187 uint32_t source_clock_hz);
222 base->IMR0 &= ~(1 << idx);
247 return !(base->IMR0 & (1 << idx));
274 base->IMR0 |= (1 << idx);
299 return base->ISR0 & (1 << idx);
356 base->TXFFR = (1 << I2S_TXFFR_TXFFR_Pos);
366 SET_VAL_MSK(base->ITER, I2S_ITER_TXEN_Msk, I2S_ITER_TXEN_Pos, 1U);
367 SET_VAL_MSK(base->CER, I2S_CER_CLKEN_Msk, I2S_CER_CLKEN_Pos, 1U);
377 SET_VAL_MSK(base->CER, I2S_CER_CLKEN_Msk, I2S_CER_CLKEN_Pos, 0U);
378 SET_VAL_MSK(base->ITER, I2S_ITER_TXEN_Msk, I2S_ITER_TXEN_Pos, 0U);
static void I2S_DisableTx(I2S_Type *base)
Выключение передатчика I2S.
Definition hal_i2s.h:375
static void I2S_DisableInterrupt(I2S_Type *base, i2s_flag_t idx)
Запрет прерывания
Definition hal_i2s.h:272
static void I2S_EnableInterrupt(I2S_Type *base, i2s_flag_t idx)
Разрешение прерывания
Definition hal_i2s.h:220
static void I2S_DisableInterruptMask(I2S_Type *base, uint32_t mask)
Запрет прерываний по маске
Definition hal_i2s.h:283
i2s_status_t I2S_Init(I2S_Type *base, const i2s_config_t *config, uint32_t source_clock_hz)
Инициализация драйвера I2S.
static void I2S_EnableTx(I2S_Type *base)
Включение передатчика I2S.
Definition hal_i2s.h:364
static uint32_t I2S_GetEnabledInterruptMask(I2S_Type *base)
Запрос маски разрешенных прерываний I2S.
Definition hal_i2s.h:261
enum _i2s_resolution i2s_resolution_t
Разрядность данных I2S.
i2s_status_t I2S_TransferNonBlocking(I2S_Type *base, i2s_handle_t *handle, i2s_transfer_t *xfer)
Неблокирующая выдача через высокоприоритетный буфер
static void I2S_AbortTx(I2S_Type *base)
Отмена выдачи по I2S.
Definition hal_i2s.h:354
struct _i2s_config i2s_config_t
Структура конфигурации контроллера I2S.
static bool I2S_GetInterruptStatus(I2S_Type *base, i2s_flag_t idx)
Получение состояния флага прерывания
Definition hal_i2s.h:297
enum _i2s_flag i2s_flag_t
Флаги прерываний I2S.
_i2s_flag
Флаги прерываний I2S.
Definition hal_i2s.h:51
struct _i2s_transfer i2s_transfer_t
Структура для передачи данных I2S в неблокирующем режиме (по прерыванию)
void I2S_Deinit(I2S_Type *base)
Деинициализация драйвера I2S.
_i2s_status
Коды возврата функций драйвера I2S.
Definition hal_i2s.h:40
enum _i2s_interrupt_level i2s_interrupt_level_t
Уровни срабатывания прерывания по опустошению очереди I2S.
_i2s_sclk_per_sample
Перечисление возможных значений числа синхроимпульсов sclk на левый и правый поток
Definition hal_i2s.h:64
void I2S_WriteRightFifo(I2S_Type *base, uint32_t sample)
Запись сэмпла в правый канал I2S.
static bool I2S_IsInterruptEnabled(I2S_Type *base, i2s_flag_t idx)
Запрос - разрешено ли прерывание I2S.
Definition hal_i2s.h:245
enum _i2s_sclk_per_sample i2s_sclk_per_sample_t
Перечисление возможных значений числа синхроимпульсов sclk на левый и правый поток
i2s_status_t I2S_TransferCreateHandle(I2S_Type *base, i2s_handle_t *handle, i2s_transfer_callback_t callback, void *user_data)
Инициализация обработчика событий I2S.
enum _i2s_sclk_gating i2s_sclk_gating_t
Перечисление возможных значений обрезания числа синхроимпульсов sclk.
static void I2S_ClearDataOverrunFlag(I2S_Type *base)
Сброс флага переполнения очереди выдачи
Definition hal_i2s.h:319
static uint32_t I2S_GetInterruptStatusMask(I2S_Type *base)
Получение маски активных прерываний
Definition hal_i2s.h:309
static void I2S_EnableInterruptMask(I2S_Type *base, uint32_t mask)
Разрешение прерываний по маске
Definition hal_i2s.h:231
void I2S_WriteLeftFifo(I2S_Type *base, uint32_t sample)
Запись сэмпла в левый канал I2S.
void I2S_GetDefaultConfig(i2s_config_t *config)
Получение параметров драйвера I2S по умолчанию
_i2s_sclk_gating
Перечисление возможных значений обрезания числа синхроимпульсов sclk.
Definition hal_i2s.h:77
_i2s_resolution
Разрядность данных I2S.
Definition hal_i2s.h:88
_i2s_interrupt_level
Уровни срабатывания прерывания по опустошению очереди I2S.
Definition hal_i2s.h:100
void I2S_TransferHandleIRQ(I2S_Type *base, i2s_handle_t *handle)
Установка обработчика на прерывания от I2S, не связанных с приемом/выдачей
void I2S_TransferAbort(I2S_Type *base, i2s_handle_t *handle)
Отмена выдачи из высокоприоритетного буфера
void(* i2s_transfer_callback_t)(I2S_Type *base, i2s_handle_t *handle, i2s_flag_t interrupt_flag, void *user_data)
Функция обратного вызова I2S.
Definition hal_i2s.h:153
enum _i2s_status i2s_status_t
Коды возврата функций драйвера I2S.
@ I2S_FlagTxFifoOverrun
Definition hal_i2s.h:53
@ I2S_FlagTxFifoEmpty
Definition hal_i2s.h:52
@ I2S_Status_Ok
Definition hal_i2s.h:41
@ I2S_Status_Fail
Definition hal_i2s.h:42
@ I2S_Status_UnsupportedBitRate
Definition hal_i2s.h:45
@ I2S_Status_TxBusy
Definition hal_i2s.h:44
@ I2S_Status_InvalidArgument
Definition hal_i2s.h:43
@ I2S_SclkCycles_16
Definition hal_i2s.h:65
@ I2S_SclkCycles_24
Definition hal_i2s.h:66
@ I2S_SclkCycles_32
Definition hal_i2s.h:67
@ I2S_SclkGatingCycles_12
Definition hal_i2s.h:79
@ I2S_NoSclkGating
Definition hal_i2s.h:78
@ I2S_SclkGatingCycles_20
Definition hal_i2s.h:81
@ I2S_SclkGatingCycles_16
Definition hal_i2s.h:80
@ I2S_SclkGatingCycles_24
Definition hal_i2s.h:82
@ I2S_Resolution_24
Definition hal_i2s.h:93
@ I2S_Resolution_32
Definition hal_i2s.h:94
@ I2S_Resolution_20
Definition hal_i2s.h:92
@ I2S_Resolution_12
Definition hal_i2s.h:90
@ I2S_ResolutionDefault
Definition hal_i2s.h:89
@ I2S_Resolution_16
Definition hal_i2s.h:91
@ I2S_InterruptTriggerLevel_11
Definition hal_i2s.h:111
@ I2S_InterruptTriggerLevel_16
Definition hal_i2s.h:116
@ I2S_InterruptTriggerLevel_13
Definition hal_i2s.h:113
@ I2S_InterruptTriggerLevel_14
Definition hal_i2s.h:114
@ I2S_InterruptTriggerLevel_15
Definition hal_i2s.h:115
@ I2S_InterruptTriggerLevel_2
Definition hal_i2s.h:102
@ I2S_InterruptTriggerLevel_6
Definition hal_i2s.h:106
@ I2S_InterruptTriggerLevel_5
Definition hal_i2s.h:105
@ I2S_InterruptTriggerLevel_12
Definition hal_i2s.h:112
@ I2S_InterruptTriggerLevel_8
Definition hal_i2s.h:108
@ I2S_InterruptTriggerLevel_10
Definition hal_i2s.h:110
@ I2S_InterruptTriggerLevel_4
Definition hal_i2s.h:104
@ I2S_InterruptTriggerLevel_9
Definition hal_i2s.h:109
@ I2S_InterruptTriggerLevel_7
Definition hal_i2s.h:107
@ I2S_InterruptTriggerLevel_1
Definition hal_i2s.h:101
@ I2S_InterruptTriggerLevel_3
Definition hal_i2s.h:103
Структура конфигурации контроллера I2S.
Definition hal_i2s.h:122
i2s_resolution_t resolution
Definition hal_i2s.h:126
i2s_interrupt_level_t interrupt_level
Definition hal_i2s.h:127
i2s_sclk_per_sample_t sclk_per_sample
Definition hal_i2s.h:124
i2s_sclk_gating_t sclk_gating
Definition hal_i2s.h:125
uint32_t sample_rate
Definition hal_i2s.h:123
Структура обработчика драйвера I2S.
Definition hal_i2s.h:159
size_t nb_samples
Definition hal_i2s.h:165
i2s_transfer_callback_t callback
Definition hal_i2s.h:160
void * user_data
Definition hal_i2s.h:161
uint32_t * left_samples
Definition hal_i2s.h:163
uint32_t * right_samples
Definition hal_i2s.h:164
Структура для передачи данных I2S в неблокирующем режиме (по прерыванию)
Definition hal_i2s.h:134
uint32_t * right_samples
Definition hal_i2s.h:136
uint32_t * left_samples
Definition hal_i2s.h:135
size_t nb_samples
Definition hal_i2s.h:137