ELIOT1 HAL
Загрузка...
Поиск...
Не найдено

Интерфейс драйвера модуля I2C. Подробнее...

#include "hal_common.h"

См. исходные тексты.

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

struct  i2c_master_config_t
 Структура с настройками для инициализации Master-модуля I2C. Подробнее...
 
struct  i2c_master_transfer_t
 Структура дескриптора для неблокирующего обмена. Подробнее...
 
struct  _i2c_master_handle
 Дескриптор для работы по прерыванию. Подробнее...
 
struct  i2c_slave_config_t
 Структура с настройками для инициализации Slave-модуля I2C. Подробнее...
 
struct  i2c_slave_transfer_t
 I2C Slave структура обмена данными Подробнее...
 
struct  _i2c_slave_handle
 I2C Slave-дескриптор Подробнее...
 

Макросы

#define I2C_CFG_MASK   0x1f
 
#define HAL_I2C_DRIVER_VERSION   (MAKE_VERSION(1, 0, 0))
 Версия драйвера.
 
#define I2C_RETRY_TIMES   0U
 Количество повторов при ожидании флага.
 
#define I2C_MASTER_TRANSMIT_IGNORE_LAST_NACK   0U
 Игнорировать ли сигнал NACK последнего байта во время передачи Master.
 
#define I2C_STAT_MSTCODE_IDLE   (0U)
 
#define I2C_STAT_MSTCODE_RXREADY   (1U)
 
#define I2C_STAT_MSTCODE_TXREADY   (2U)
 
#define I2C_STAT_MSTCODE_NACKADR   (3U)
 
#define I2C_STAT_MSTCODE_NACKDAT   (4U)
 
#define I2C_STAT_SLVST_ADDR   (0)
 
#define I2C_STAT_SLVST_RX   (1)
 
#define I2C_STAT_SLVST_TX   (2)
 

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

typedef struct _i2c_master_handle i2c_master_handle_t
 Тип I2C Master дескриптор
 
typedef void(* i2c_master_transfer_callback_t) (I2C_Type *base, i2c_master_handle_t *handle, i2c_status_t completion_status, void *user_data)
 Указатель на функцию обратного вызова при завершении Master-передачи.
 
typedef struct _i2c_slave_handle i2c_slave_handle_t
 Тип I2C Slave дескриптор
 
typedef void(* i2c_slave_transfer_callback_t) (I2C_Type *base, volatile i2c_slave_transfer_t *transfer, void *user_data)
 Slave тип функции обратного вызова.
 

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

enum  i2c_status_t
 Коды возврата функций модуля I2C. Подробнее...
 
enum  i2c_status_flags
 Статусы модуля I2C (read-only регистр IC_STATUS). Подробнее...
 
enum  i2c_abort_flags
 Причины обрыва передачи (регистр IC_TX_ABRT_SOURCE). Подробнее...
 
enum  i2c_interrupt
 Флаги прерываний I2C. Подробнее...
 
enum  i2c_direction_t
 Направление передачи. Подробнее...
 
enum  i2c_addr_size_t
 Разрядность адреса. Подробнее...
 
enum  i2c_master_transfer_states
 Состояния для конечного автомата, используемого при обмене. FSM TODO. Подробнее...
 
enum  i2c_speed_mode_t
 Скоростной режим работы модуля в Master-режиме. Подробнее...
 
enum  i2c_master_transfer_flags_t
 Флаги вариантов передачи. Подробнее...
 
enum  i2c_slave_event_transfer_t
 Cобытия, вызывающие функцию обратного вызова для неблокирующих передач. Подробнее...
 
enum  i2c_slave_fsm_t
 I2C Slave состояния конечного автомата Подробнее...
 

Функции

Инициализация и деинициализация.
static bool I2C_IsEnable (I2C_Type *base)
 Возврат состояния модуля I2C.
 
i2c_status_t I2C_Enable (I2C_Type *base, bool enable)
 Включение и отключение модуля I2C.
 
uint32_t I2C_GetInstance (I2C_Type *base)
 Возврат номера экземпляра по базовому адресу.
 
i2c_status_t I2C_Reset (I2C_Type *base)
 Сброс модуля I2C.
 
void I2C_MasterGetDefaultConfig (i2c_master_config_t *master_config)
 Получение конфигурации по умолчанию для Master-режима модуля I2C.
 
i2c_status_t I2C_MasterInit (I2C_Type *base, const i2c_master_config_t *master_config, uint32_t src_clock_hz)
 Инициализация Master-устройства I2C.
 
i2c_status_t I2C_MasterDeinit (I2C_Type *base)
 Деинициализация Master-устройства I2C.
 
Прерывания.
static void I2C_EnableInterrupts (I2C_Type *base, uint32_t mask)
 Включение запросов на прерывание.
 
static void I2C_DisableInterrupts (I2C_Type *base, uint32_t mask)
 Отключение запросов на прерывание.
 
static uint32_t I2C_GetEnabledInterrupts (I2C_Type *base)
 Возврат набора текущих разрешенных запросов на прерывание.
 
static void I2C_ClearInterrupt (I2C_Type *base, enum i2c_interrupt irq)
 Очищение флагов прерываний.
 
static void I2C_ClearAllInterrupts (I2C_Type *base)
 Очищение всех доступных для очистки флагов прерываний.
 
Операции на шине
i2c_status_t I2C_MasterSetBaudRate (I2C_Type *base, uint32_t baudrate_bps, uint32_t src_clock_hz)
 Установка частоты шины для Master-режима модуля I2C.
 
i2c_status_t I2C_MasterAddrSet (I2C_Type *base, uint32_t address, i2c_addr_size_t addr_size)
 Установка адреса Slave-устройства на шине I2C, к которому будет обращение в цикле обмена.
 
static bool I2C_MasterGetBusActiveState (I2C_Type *base)
 Возврат статуса активность шины.
 
i2c_status_t I2C_MasterWriteBlocking (I2C_Type *base, const void *tx_buff, size_t tx_size, uint32_t flags)
 Выполнение блокирующей передачи по шине I2C.
 
i2c_status_t I2C_MasterReadBlocking (I2C_Type *base, void *rx_buff, size_t rx_size, uint32_t flags)
 Выполнение блокирующего приема на шине I2C.
 
i2c_status_t I2C_MasterTransferBlocking (I2C_Type *base, i2c_master_transfer_t *xfer)
 Выполнение обмена данными на шине I2C в режиме блокировки.
 
Неблокирующий обмен (по прерыванию).
void I2C_MasterTransferCreateHandle (I2C_Type *base, i2c_master_handle_t *handle, i2c_master_transfer_callback_t callback, void *user_data)
 Создание нового дескриптора для неблокирующего Master-режима работы.
 
i2c_status_t I2C_MasterTransferNonBlocking (I2C_Type *base, i2c_master_handle_t *handle, i2c_master_transfer_t *xfer)
 Выполнение неблокирующей транзакции на шине I2C.
 
i2c_status_t I2C_MasterTransferGetCount (I2C_Type *base, i2c_master_handle_t *handle, size_t *count)
 Получение количества байтов, переданных неблокирующей транзакцией на данный момент.
 
i2c_status_t I2C_MasterTransferAbort (I2C_Type *base, i2c_master_handle_t *handle)
 Досрочное завершаение основной неблокирующей передачи I2C.
 
Обработчик запросов на прерывание для Master-режима.
void I2C_MasterTransferHandleIRQ (I2C_Type *base, i2c_master_handle_t *handle)
 Обработчик запросов на прерывание для Master-режима.
 
Инициализация и деинициализация в Slave-режиме.
void I2C_SlaveGetDefaultConfig (i2c_slave_config_t *config)
 Получение конфигурации по умолчанию для Slave-режима модуля I2C.
 
i2c_status_t I2C_SlaveInit (I2C_Type *base, const i2c_slave_config_t *config)
 Инициализация Slave-модуля I2C.
 
i2c_status_t I2C_SlaveSetAddress (I2C_Type *base, uint16_t address, bool ack_gen_call)
 Установка адреса Slave-устройства.
 
static i2c_status_t I2C_SlaveDeinit (I2C_Type *base)
 Деинициализация периферийного Slave-устройства I2C.
 
static i2c_status_t I2C_SlaveEnable (I2C_Type *base, bool enable)
 Включение/отключение модуля I2C.
 
Операции на шине в Slave-режиме.
i2c_status_t I2C_SlaveWriteBlocking (I2C_Type *base, const uint8_t *tx_buff, size_t tx_size)
 Выполнение передачи из модуля на шину I2C в режиме блокировки.
 
i2c_status_t I2C_SlaveReadBlocking (I2C_Type *base, uint8_t *rx_buff, size_t rx_size)
 Выполнение приема по шине I2C в модуль в режиме блокировки.
 
Неблокирующий обмен (по прерыванию) в Slave-режиме.
i2c_status_t I2C_SlaveTransferCreateHandle (I2C_Type *base, i2c_slave_handle_t *handle, i2c_slave_transfer_callback_t callback, void *user_data)
 Создание нового дескриптора для I2C в Slave-режиме.
 
i2c_status_t I2C_SlaveTransferNonBlocking (I2C_Type *base, i2c_slave_handle_t *handle, uint32_t event_mask)
 Инициализация приема для Slave-режима.
 
i2c_status_t I2C_SlaveSetSendBuffer (I2C_Type *base, volatile i2c_slave_transfer_t *transfer, const void *tx_data, size_t tx_size, uint32_t event_mask)
 Запуск передачи данных из Slave в Master по прерыванию.
 
i2c_status_t I2C_SlaveSetReceiveBuffer (I2C_Type *base, volatile i2c_slave_transfer_t *transfer, void *rx_data, size_t rx_size, uint32_t event_mask)
 Иниициирование Slave-устройсвом приема запросов от Master-устройства.
 
i2c_status_t I2C_SlaveTransferAbort (I2C_Type *base, i2c_slave_handle_t *handle)
 Завершение неблокирующей передачи Slave-устройства.
 
i2c_status_t I2C_SlaveTransferGetCount (I2C_Type *base, i2c_slave_handle_t *handle, size_t *count)
 Получение количества оставшихся байтов во время неблокирующей передачи (через прерывание) в Slave-режиме.
 
Обработчик IRQ для Slave-режима.
void I2C_SlaveTransferHandleIRQ (I2C_Type *base, i2c_slave_handle_t *handle)
 Процедура для обработки прерываний в Slave-режиме.
 

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

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

Функции

◆ I2C_SlaveDeinit()

static i2c_status_t I2C_SlaveDeinit ( I2C_Type * base)
inlinestatic

Деинициализация периферийного Slave-устройства I2C.

Эта функция отключает Slave-устройство I2C, а также выполняет программный сброс для восстановления модуля I2C до состояния сброса.

Аргументы
baseБазовый адрес модуля.
Возвращаемые значения
I2C_Status_Ok
I2C_Status_HwError

◆ I2C_SlaveEnable()

static i2c_status_t I2C_SlaveEnable ( I2C_Type * base,
bool enable )
inlinestatic

Включение/отключение модуля I2C.

Заметки
Функция используется для Slave-режима.
Аргументы
baseБазовый адрес модуля.
enabletrue - включить, false - выключить указанный модуль.

◆ I2C_SlaveGetDefaultConfig()

void I2C_SlaveGetDefaultConfig ( i2c_slave_config_t * config)

Получение конфигурации по умолчанию для Slave-режима модуля I2C.

Эта функция обеспечивает следующую конфигурацию по умолчанию Slave-устройства I2C:

сonfig->address = I2C_SLAVE_ADDR_DEFAULT;
сonfig->ack_gen_call = false;
сonfig->i2c_addr_size = I2C_Address7Bit;
сonfig->enable_slave = true;
@ I2C_Address7Bit
Definition hal_i2c.h:210

После вызова этой функции возможно изменить настройки, если требуется изменить конфигурацию, перед инициализацией с помощью I2C_SlaveInit. Необходимо переопределить Slave-адрес желаемым адресом.

Аргументы
configПользовательская конфигурация.

◆ I2C_SlaveInit()

i2c_status_t I2C_SlaveInit ( I2C_Type * base,
const i2c_slave_config_t * config )

Инициализация Slave-модуля I2C.

Функция инциализирует ведомое периферийное устройство I2C, как описано пользователем в переданной конфигурации.

Заметки
Для получения значений по умолчанию для пользовательской конфигурации необходимо воспользоваться функцией I2C_SlaveGetDefaultConfig, а затем переопределить их при необходимости.
Аргументы
baseБазовый адрес модуля.
configПользовательская конфигурация.
Возвращаемые значения
I2C_Status_Ok
I2C_Status_HwError

◆ I2C_SlaveReadBlocking()

i2c_status_t I2C_SlaveReadBlocking ( I2C_Type * base,
uint8_t * rx_buff,
size_t rx_size )

Выполнение приема по шине I2C в модуль в режиме блокировки.

Функция выполняет фазу передачи адреса и фазу передачи данных.

Аргументы
baseБазовый адрес модуля.
rx_buffБуфер для хранения получаемых данных.
rx_sizeРазмер буфера получаемых данных в байтах.
Возвращаемые значения
I2C_Status_Ok
I2C_Status_UnexpectedStateMaster пытается считать данные из Slave, в то время как Slave ожидает запись.

◆ I2C_SlaveSetAddress()

i2c_status_t I2C_SlaveSetAddress ( I2C_Type * base,
uint16_t address,
bool ack_gen_call )

Установка адреса Slave-устройства.

Эта функция записывает новое значение в регистр адреса Slave-устройства.

Аргументы
baseБазовый адрес модуля.
addressАдрес Slave-устройства.
ack_gen_callОтвечать или нет General Call.
Возвращаемые значения
I2C_Status_Ok
I2C_Status_HwError

◆ I2C_SlaveSetReceiveBuffer()

i2c_status_t I2C_SlaveSetReceiveBuffer ( I2C_Type * base,
volatile i2c_slave_transfer_t * transfer,
void * rx_data,
size_t rx_size,
uint32_t event_mask )

Иниициирование Slave-устройсвом приема запросов от Master-устройства.

Функция может быть вызвана в ответ на вызов функции обратного вызова по событию I2C_SlaveEvent_Receive для старта нового приема данных.

Набор событий, получаемых функцией обратного вызова, настраивается: для этого в параметр event_mask передается комбинация из элементов i2c_slave_event_transfer_t для событий, которые требуется получать. События I2C_SlaveEvent_Transmit и I2C_SlaveEvent_Receive всегда включены и не требуют быть включенным в маску. Константа I2C_SlaveEvents_All включает все события. Константа I2C_SlaveEvents_Ordinary включает все события для работы в режиме без General Call.

Аргументы
baseБазовый адрес модуля.
transferСтруктура обмена данными.
rx_dataБуфер для хранения данных от Master.
rx_sizeРазмер буфера для хранения данных от Master в байтах.
event_maskБитовая маска, определяющая события, приводящие к вызову функции обратного вызова.
Возвращаемые значения
I2C_Status_Ok
I2C_Status_Busy

◆ I2C_SlaveSetSendBuffer()

i2c_status_t I2C_SlaveSetSendBuffer ( I2C_Type * base,
volatile i2c_slave_transfer_t * transfer,
const void * tx_data,
size_t tx_size,
uint32_t event_mask )

Запуск передачи данных из Slave в Master по прерыванию.

Функция может быть вызвана в ответ на событие I2C_SlaveEvent_Transmit, переданное в функцию обратного вызова, чтобы начать новую передачу из Slave в Master.

Набор событий, получаемых функцией обратного вызова, настраивается: для этого в параметр event_mask передается комбинация из элементов i2c_slave_event_transfer_t для событий, которые требуется получать. События I2C_SlaveEvent_Transmit и I2C_SlaveEvent_Receive всегда включены и не требуют быть включенным в маску. Константа I2C_SlaveEvents_All включает все события. Константа I2C_SlaveEvents_Ordinary включает все события для работы в режиме без General Call.

Аргументы
baseБазовый адрес модуля.
transferСтруктура обмена данными.
tx_dataДанные для отправки в Master.
tx_sizeКоличество данных для отправки в Master в байтах.
event_maskБитовая маска, определяющая события, приводящие к вызову функции обратного вызова.
Возвращаемые значения
I2C_Status_Ok
I2C_Status_BusySlave передача уже запущена для этого декскриптора.

◆ I2C_SlaveTransferAbort()

i2c_status_t I2C_SlaveTransferAbort ( I2C_Type * base,
i2c_slave_handle_t * handle )

Завершение неблокирующей передачи Slave-устройства.

Заметки
Функцию можно вызвать в любое время, чтобы остановить Slave-устройство для обработки событий шины.
Аргументы
baseБазовый адрес модуля.
handleДескриптор для Slave-режима.
Возвращаемые значения
I2C_Status_Ok
I2C_Status_Idle

◆ I2C_SlaveTransferCreateHandle()

i2c_status_t I2C_SlaveTransferCreateHandle ( I2C_Type * base,
i2c_slave_handle_t * handle,
i2c_slave_transfer_callback_t callback,
void * user_data )

Создание нового дескриптора для I2C в Slave-режиме.

Заметки
Используется для работы в неблокирующих функциях (по прерыванию).

Создание дескриптора для использования в неблокирующих функциях. Однажды созданный дескриптор не требуется специально уничтожать. Если требуется завершить обмен данными используется функция I2C_SlaveTransferAbort.

Аргументы
baseБазовый адрес модуля.
handleДескриптор для Slave-режима.
callbackФункция обратного вызова.
user_dataПользовательские данные для функции обратного вызова.
Возвращаемые значения
I2C_Status_Ok
I2C_Status_UnexpectedState

◆ I2C_SlaveTransferGetCount()

i2c_status_t I2C_SlaveTransferGetCount ( I2C_Type * base,
i2c_slave_handle_t * handle,
size_t * count )

Получение количества оставшихся байтов во время неблокирующей передачи (через прерывание) в Slave-режиме.

Аргументы
baseБазовый адрес модуля.
handleДескриптор для Slave-режима.
countКоличество байтов, переданных на данный момент неблокирующей транзакцией.
Возвращаемые значения
I2C_Status_InvalidParameter
I2C_Status_Ok

◆ I2C_SlaveTransferHandleIRQ()

void I2C_SlaveTransferHandleIRQ ( I2C_Type * base,
i2c_slave_handle_t * handle )

Процедура для обработки прерываний в Slave-режиме.

Заметки
Эту функцию не нужно вызывать самостоятельно.
Аргументы
baseБазовый адрес модуля.
handleДескриптор для Slave-режима.

◆ I2C_SlaveTransferNonBlocking()

i2c_status_t I2C_SlaveTransferNonBlocking ( I2C_Type * base,
i2c_slave_handle_t * handle,
uint32_t event_mask )

Инициализация приема для Slave-режима.

Вызовите эту функцию после вызова I2C_SlaveInit и I2C_SlaveTransferCreateHandle для начала обмена, управляемого Master- устройством. Модуль в Slave-режиме отслеживает I2C шину и передает событие в функцию обратного вызова, которая была зарегистрирована при вызове I2C_SlaveTransferCreateHandle. Функция обратного вызова вызывается из контекста прерывания.

Набор событий, получаемых функцией обратного вызова, настраивается: для этого в параметр event_mask передается комбинация из элементов i2c_slave_event_transfer_t для событий, которые требуется получать. События I2C_SlaveEvent_Transmit и I2C_SlaveEvent_Receive всегда включены и не требуют быть включенным в маску. Константа I2C_SlaveEvents_All включает все события. Константа I2C_SlaveEvents_Ordinary включает все события для работы в режиме без General Call.

Аргументы
baseБазовый адрес модуля.
handleДескриптор для Slave-режима.
event_maskБитовая маска, определяющая события, приводящие к вызову функции обратного вызова.
Возвращаемые значения
I2C_Status_Ok
I2C_Status_BusyНа этом дескрипторе уже идет обмен данными.

◆ I2C_SlaveWriteBlocking()

i2c_status_t I2C_SlaveWriteBlocking ( I2C_Type * base,
const uint8_t * tx_buff,
size_t tx_size )

Выполнение передачи из модуля на шину I2C в режиме блокировки.

Функция выполняет фазу передачи адреса и фазу передачи данных.

Аргументы
baseБазовый адрес модуля.
tx_buffБуфер для хранения передаваемых данных.
tx_sizeРазмер буфера передаваемых данных в байтах.
Возвращаемые значения
I2C_Status_Ok
I2C_Status_UnexpectedStateMaster пытается считать данные из Slave, в то время как Slave ожидает запись.