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

Драйвер последовательной шины для соединения цифровых аудиоустройств Подробнее...

Файлы

файл  hal_i2s.h
 Интерфейс драйвера модуля I2S.
 

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

struct  _i2s_config
 Структура конфигурации контроллера I2S. Подробнее...
 
struct  _i2s_transfer
 Структура для передачи данных I2S в неблокирующем режиме (по прерыванию) Подробнее...
 
struct  _i2s_handle
 Структура обработчика драйвера I2S. Подробнее...
 

Макросы

#define HAL_I2S_DRIVER_VERSION   (MAKE_VERSION(0, 1, 0))
 Версия драйвера I2S.
 

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

typedef enum _i2s_status i2s_status_t
 Коды возврата функций драйвера I2S.
 
typedef enum _i2s_flag i2s_flag_t
 Флаги прерываний I2S.
 
typedef enum _i2s_sclk_per_sample i2s_sclk_per_sample_t
 Перечисление возможных значений числа синхроимпульсов sclk на левый и правый поток
 
typedef enum _i2s_sclk_gating i2s_sclk_gating_t
 Перечисление возможных значений обрезания числа синхроимпульсов sclk.
 
typedef enum _i2s_resolution i2s_resolution_t
 Разрядность данных I2S.
 
typedef enum _i2s_interrupt_level i2s_interrupt_level_t
 Уровни срабатывания прерывания по опустошению очереди I2S.
 
typedef struct _i2s_config i2s_config_t
 Структура конфигурации контроллера I2S.
 
typedef struct _i2s_transfer i2s_transfer_t
 Структура для передачи данных I2S в неблокирующем режиме (по прерыванию)
 
typedef struct _i2s_handle i2s_handle_t
 Сокращённое название типа для структуры обработчика драйвера I2S.
 
typedef void(* i2s_transfer_callback_t) (I2S_Type *base, i2s_handle_t *handle, i2s_flag_t interrupt_flag, void *user_data)
 Функция обратного вызова I2S.
 

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

enum  _i2s_status
 Коды возврата функций драйвера I2S. Подробнее...
 
enum  _i2s_flag
 Флаги прерываний I2S. Подробнее...
 
enum  _i2s_sclk_per_sample
 Перечисление возможных значений числа синхроимпульсов sclk на левый и правый поток Подробнее...
 
enum  _i2s_sclk_gating
 Перечисление возможных значений обрезания числа синхроимпульсов sclk. Подробнее...
 
enum  _i2s_resolution
 Разрядность данных I2S. Подробнее...
 
enum  _i2s_interrupt_level
 Уровни срабатывания прерывания по опустошению очереди I2S. Подробнее...
 

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

i2s_status_t I2S_Init (I2S_Type *base, const i2s_config_t *config, uint32_t source_clock_hz)
 Инициализация драйвера I2S.
 
void I2S_Deinit (I2S_Type *base)
 Деинициализация драйвера I2S.
 
void I2S_GetDefaultConfig (i2s_config_t *config)
 Получение параметров драйвера I2S по умолчанию
 

Управление прерываниями

static void I2S_EnableInterrupt (I2S_Type *base, i2s_flag_t idx)
 Разрешение прерывания
 
static void I2S_EnableInterruptMask (I2S_Type *base, uint32_t mask)
 Разрешение прерываний по маске
 
static bool I2S_IsInterruptEnabled (I2S_Type *base, i2s_flag_t idx)
 Запрос - разрешено ли прерывание I2S.
 
static uint32_t I2S_GetEnabledInterruptMask (I2S_Type *base)
 Запрос маски разрешенных прерываний I2S.
 
static void I2S_DisableInterrupt (I2S_Type *base, i2s_flag_t idx)
 Запрет прерывания
 
static void I2S_DisableInterruptMask (I2S_Type *base, uint32_t mask)
 Запрет прерываний по маске
 
static bool I2S_GetInterruptStatus (I2S_Type *base, i2s_flag_t idx)
 Получение состояния флага прерывания
 
static uint32_t I2S_GetInterruptStatusMask (I2S_Type *base)
 Получение маски активных прерываний
 
static void I2S_ClearDataOverrunFlag (I2S_Type *base)
 Сброс флага переполнения очереди выдачи
 

Прямое управление выдачей

void I2S_WriteLeftFifo (I2S_Type *base, uint32_t sample)
 Запись сэмпла в левый канал I2S.
 
void I2S_WriteRightFifo (I2S_Type *base, uint32_t sample)
 Запись сэмпла в правый канал I2S.
 
static void I2S_AbortTx (I2S_Type *base)
 Отмена выдачи по I2S.
 
static void I2S_EnableTx (I2S_Type *base)
 Включение передатчика I2S.
 
static void I2S_DisableTx (I2S_Type *base)
 Выключение передатчика I2S.
 

Неблокирующая выдача по I2S

i2s_status_t I2S_TransferCreateHandle (I2S_Type *base, i2s_handle_t *handle, i2s_transfer_callback_t callback, void *user_data)
 Инициализация обработчика событий I2S.
 
i2s_status_t I2S_TransferNonBlocking (I2S_Type *base, i2s_handle_t *handle, i2s_transfer_t *xfer)
 Неблокирующая выдача через высокоприоритетный буфер
 
void I2S_TransferAbort (I2S_Type *base, i2s_handle_t *handle)
 Отмена выдачи из высокоприоритетного буфера
 
void I2S_TransferHandleIRQ (I2S_Type *base, i2s_handle_t *handle)
 Установка обработчика на прерывания от I2S, не связанных с приемом/выдачей
 

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

Драйвер последовательной шины для соединения цифровых аудиоустройств

Драйвер содержит функции управления контроллером I2S микросхемы ELIOT1. Контроллер интерфейса собран со следующими параметрами:

Типы

◆ i2s_sclk_gating_t

Перечисление возможных значений обрезания числа синхроимпульсов sclk.

Если разрешение канала I2S меньше, чем размер слова, то часть импульсов sclk может быть обрезана на выходе с помощью установки значения из этого перечисления в параметре драйвер i2s_config_t::sclk_gating.

◆ i2s_transfer_callback_t

typedef void(* i2s_transfer_callback_t) (I2S_Type *base, i2s_handle_t *handle, i2s_flag_t interrupt_flag, void *user_data)

Функция обратного вызова I2S.

Аргументы
baseБазовый адрес контроллера
handleУказатель на обработчик
interrupt_flagПричина вызова
user_dataДанные пользователя

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

◆ _i2s_flag

enum _i2s_flag

Флаги прерываний I2S.

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

Опустошение очереди выдачи

I2S_FlagTxFifoOverrun 

Переполнение очереди выдачи

◆ _i2s_interrupt_level

Уровни срабатывания прерывания по опустошению очереди I2S.

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

Прерывание при 1-м оставшемся слове в очереди

I2S_InterruptTriggerLevel_2 

Прерывание при 2-х оставшихся словах в очереди

I2S_InterruptTriggerLevel_3 

Прерывание при 3-х оставшихся словах в очереди

I2S_InterruptTriggerLevel_4 

Прерывание при 4-х оставшихся словах в очереди

I2S_InterruptTriggerLevel_5 

Прерывание при 5-и оставшихся словах в очереди

I2S_InterruptTriggerLevel_6 

Прерывание при 6-и оставшихся словах в очереди

I2S_InterruptTriggerLevel_7 

Прерывание при 7-и оставшихся словах в очереди

I2S_InterruptTriggerLevel_8 

Прерывание при 8-и оставшихся словах в очереди

I2S_InterruptTriggerLevel_9 

Прерывание при 9-и оставшихся словах в очереди

I2S_InterruptTriggerLevel_10 

Прерывание при 10-и оставшихся словах в очереди

I2S_InterruptTriggerLevel_11 

Прерывание при 11-и оставшихся словах в очереди

I2S_InterruptTriggerLevel_12 

Прерывание при 12-и оставшихся словах в очереди

I2S_InterruptTriggerLevel_13 

Прерывание при 13-и оставшихся словах в очереди

I2S_InterruptTriggerLevel_14 

Прерывание при 14-и оставшихся словах в очереди

I2S_InterruptTriggerLevel_15 

Прерывание при 15-и оставшихся словах в очереди

I2S_InterruptTriggerLevel_16 

Прерывание при 16-и оставшихся словах в очереди

◆ _i2s_resolution

Разрядность данных I2S.

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

По умолчанию (32 бита)

I2S_Resolution_12 

12 бит

I2S_Resolution_16 

16 бит

I2S_Resolution_20 

20 бит

I2S_Resolution_24 

24 бита

I2S_Resolution_32 

32 бита

◆ _i2s_sclk_gating

Перечисление возможных значений обрезания числа синхроимпульсов sclk.

Если разрешение канала I2S меньше, чем размер слова, то часть импульсов sclk может быть обрезана на выходе с помощью установки значения из этого перечисления в параметре драйвер i2s_config_t::sclk_gating.

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

Нет обрезания sclk

I2S_SclkGatingCycles_12 

Обрезание после 12 импульсов sclk

I2S_SclkGatingCycles_16 

Обрезание после 16 импульсов sclk

I2S_SclkGatingCycles_20 

Обрезание после 20 импульсов sclk

I2S_SclkGatingCycles_24 

Обрезание после 24 импульсов sclk

◆ _i2s_sclk_per_sample

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

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

16 синхроимпульсов на значение (левое/правое)

I2S_SclkCycles_24 

24 синхроимпульсов на значение (левое/правое)

I2S_SclkCycles_32 

32 синхроимпульсов на значение (левое/правое)

◆ _i2s_status

Коды возврата функций драйвера I2S.

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

Успешно

I2S_Status_Fail 

Провал

I2S_Status_InvalidArgument 

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

I2S_Status_TxBusy 

Передатчик занят

I2S_Status_UnsupportedBitRate 

Комбинация параметров задана так, что невозможно установить правильную битовую частоту

Функции

◆ I2S_AbortTx()

static void I2S_AbortTx ( I2S_Type * base)
inlinestatic

Отмена выдачи по I2S.

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

◆ I2S_ClearDataOverrunFlag()

static void I2S_ClearDataOverrunFlag ( I2S_Type * base)
inlinestatic

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

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

◆ I2S_Deinit()

void I2S_Deinit ( I2S_Type * base)

Деинициализация драйвера I2S.

Функция деинициализирует контроллер I2S.

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

◆ I2S_DisableInterrupt()

static void I2S_DisableInterrupt ( I2S_Type * base,
i2s_flag_t idx )
inlinestatic

Запрет прерывания

Аргументы
baseБазовый адрес контроллера
idxНомер флага состояния/прерывания

◆ I2S_DisableInterruptMask()

static void I2S_DisableInterruptMask ( I2S_Type * base,
uint32_t mask )
inlinestatic

Запрет прерываний по маске

Аргументы
baseБазовый адрес контроллера
maskМаска флагов прерываний

◆ I2S_DisableTx()

static void I2S_DisableTx ( I2S_Type * base)
inlinestatic

Выключение передатчика I2S.

Аргументы
baseI2S Базовый адрес контроллера

◆ I2S_EnableInterrupt()

static void I2S_EnableInterrupt ( I2S_Type * base,
i2s_flag_t idx )
inlinestatic

Разрешение прерывания

Аргументы
baseБазовый адрес контроллера
idxНомер флага состояния/прерывания

◆ I2S_EnableInterruptMask()

static void I2S_EnableInterruptMask ( I2S_Type * base,
uint32_t mask )
inlinestatic

Разрешение прерываний по маске

Аргументы
baseБазовый адрес контроллера
maskМаска флагов прерываний

◆ I2S_EnableTx()

static void I2S_EnableTx ( I2S_Type * base)
inlinestatic

Включение передатчика I2S.

Аргументы
baseI2S Базовый адрес контроллера

◆ I2S_GetDefaultConfig()

void I2S_GetDefaultConfig ( i2s_config_t * config)

Получение параметров драйвера I2S по умолчанию

Аргументы
configСтруктура с параметрами конфигурации

◆ I2S_GetEnabledInterruptMask()

static uint32_t I2S_GetEnabledInterruptMask ( I2S_Type * base)
inlinestatic

Запрос маски разрешенных прерываний I2S.

Запрос маски разрешенных прерываний I2S, единицы в соответствующих разрядах соответствуют включенным прерываниям.

Аргументы
baseБазовый адрес I2S
Возвращает
Маска разрешенных прерываний

◆ I2S_GetInterruptStatus()

static bool I2S_GetInterruptStatus ( I2S_Type * base,
i2s_flag_t idx )
inlinestatic

Получение состояния флага прерывания

Аргументы
baseБазовый адрес контроллера
idxНомер флага состояния/прерывания
Возвращаемые значения
trueФлаг прерывания установлен
falseФлаг прерывания сброшен

◆ I2S_GetInterruptStatusMask()

static uint32_t I2S_GetInterruptStatusMask ( I2S_Type * base)
inlinestatic

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

Аргументы
baseБазовый адрес контроллера
Возвращает
Маска активных прерываний

◆ I2S_Init()

i2s_status_t I2S_Init ( I2S_Type * base,
const i2s_config_t * config,
uint32_t source_clock_hz )

Инициализация драйвера I2S.

Функция инициализирует модуль I2S в соответствии с заданными пользовательскими параметрами.

Аргументы
baseБазовый адрес контроллера
configСтруктура с параметрами конфигурации
source_clock_hzОпорная частота в Гц
Возвращаемые значения
I2S_Status_Ok
I2S_Status_UnsupportedBitRate

◆ I2S_IsInterruptEnabled()

static bool I2S_IsInterruptEnabled ( I2S_Type * base,
i2s_flag_t idx )
inlinestatic

Запрос - разрешено ли прерывание I2S.

Аргументы
baseБазовый адрес I2S
idxНомер флага состояния/прерывания
Возвращаемые значения
trueПрерывание разрешено
falseПрерывание запрещено

◆ I2S_TransferAbort()

void I2S_TransferAbort ( I2S_Type * base,
i2s_handle_t * handle )

Отмена выдачи из высокоприоритетного буфера

Аргументы
baseБазовый адрес контроллера
handleОбработчик

◆ I2S_TransferCreateHandle()

i2s_status_t I2S_TransferCreateHandle ( I2S_Type * base,
i2s_handle_t * handle,
i2s_transfer_callback_t callback,
void * user_data )

Инициализация обработчика событий I2S.

Аргументы
baseБазовый адрес контроллера
handleОбработчик
callbackФункция обратного вызова
user_dataДанные пользователя
Возвращаемые значения
I2S_Status_Ok
I2S_Status_Fail

◆ I2S_TransferHandleIRQ()

void I2S_TransferHandleIRQ ( I2S_Type * base,
i2s_handle_t * handle )

Установка обработчика на прерывания от I2S, не связанных с приемом/выдачей

Аргументы
baseБазовый адрес контроллера
handleОбработчик

◆ I2S_TransferNonBlocking()

i2s_status_t I2S_TransferNonBlocking ( I2S_Type * base,
i2s_handle_t * handle,
i2s_transfer_t * xfer )

Неблокирующая выдача через высокоприоритетный буфер

Функция выдает кадр I2S по прерыванию. Это неблокирующая функция, она возвращает управление сразу. По выдачи кадра в шину вызывает функция обратного вызова.

Аргументы
baseБазовый адрес контроллера
handleОбработчик
xferСтруктура для передачи кадра в неблокирующем режиме
Возвращаемые значения
I2S_Status_Ok
I2S_Status_Fail
I2S_Status_TxBusy

◆ I2S_WriteLeftFifo()

void I2S_WriteLeftFifo ( I2S_Type * base,
uint32_t sample )

Запись сэмпла в левый канал I2S.

Аргументы
baseБазовый адрес контроллера
sampleЗначение сэмпла

◆ I2S_WriteRightFifo()

void I2S_WriteRightFifo ( I2S_Type * base,
uint32_t sample )

Запись сэмпла в правый канал I2S.

Аргументы
baseБазовый адрес контроллера
sampleЗначение сэмпла