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

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

Файлы

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

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

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-дескриптор Подробнее...
 
struct  _i2c_master_dma_handle
 Контекст данных прерывания I2C-DMA. Подробнее...
 

Макросы

#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)
 
#define HAL_SPI_DMA_DRIVER_VERSION   (MAKE_VERSION(0, 1, 0))
 Версия драйвера
 
#define I2C_MAX_BUFFER_SIZE   (8U)
 Глубина буфера I2C контроллера
 

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

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 тип функции обратного вызова.
 
typedef struct _i2c_master_dma_handle i2c_master_dma_handle_t
 Дескриптор I2C-DMA.
 
typedef void(* i2c_master_dma_transfer_callback_t) (I2C_Type *base, i2c_master_dma_handle_t *handle, void *user_data)
 Функция обратного вызова
 

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

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 состояния конечного автомата Подробнее...
 

Функции

void I2C_MasterTransferCreateHandleDMA (I2C_Type *base, i2c_master_dma_handle_t *handle, i2c_master_dma_transfer_callback_t callback, void *user_data, dma_handle_t *tx_dma, dma_handle_t *rx_dma)
 Функция инициализации дескриптора I2C-DMA.
 
i2c_status_t I2C_MasterTransferDMA (I2C_Type *base, i2c_master_dma_handle_t *handle, i2c_master_transfer_t *xfer)
 Функция, запускающая I2C транзакцию. Данные в буфер/из буфера I2C передаются с помощью I2C.
 
void I2C_MasterTransferAbortDMA (I2C_Type *base, i2c_master_dma_handle_t *handle)
 Прекращение передачи I2C.
 
static void I2C_DMADescriptorInitTX (I2C_Type *base, dma_descriptor_t *desc, uint32_t count, uint32_t data_size, uint8_t src_incr, void *src_addr)
 Инициализация дескрипторов DMA для многоблочной передачи TX.
 
static void I2C_DMADescriptorInitRX (I2C_Type *base, dma_descriptor_t *desc, uint32_t count, uint32_t data_size, uint8_t dst_incr, void *dst_addr)
 Инициализация дескрипторов DMA для многоблочной передачи RX.
 

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

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-режима.
 

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

Драйвер последовательной асимметричной шины для связи между интегральными схемами внутри приборов.

Драйвер поддерживает обмен по интерфейсу I2C по прерыванию и в режиме опроса.

Используя специальные функции из hal_i2c_dma.h, передача данных из буфера / в буфер UART будет происходить с помощью DMA.

Макросы

◆ I2C_CFG_MASK

#define I2C_CFG_MASK   0x1f

TODO

◆ I2C_MASTER_TRANSMIT_IGNORE_LAST_NACK

#define I2C_MASTER_TRANSMIT_IGNORE_LAST_NACK   0U

Игнорировать ли сигнал NACK последнего байта во время передачи Master.

1 - Master игнорирует NACK последнего байта и считает передачу успешной

◆ I2C_RETRY_TIMES

#define I2C_RETRY_TIMES   0U

Количество повторов при ожидании флага.

0 - ожидание до получения значения

◆ I2C_STAT_MSTCODE_IDLE

#define I2C_STAT_MSTCODE_IDLE   (0U)

Master код состояния Idle

◆ I2C_STAT_MSTCODE_NACKADR

#define I2C_STAT_MSTCODE_NACKADR   (3U)

Master код состояния NACK от Slave при отправке адреса

◆ I2C_STAT_MSTCODE_NACKDAT

#define I2C_STAT_MSTCODE_NACKDAT   (4U)

Master код состояния NACK от Slave при отправке данных

◆ I2C_STAT_MSTCODE_RXREADY

#define I2C_STAT_MSTCODE_RXREADY   (1U)

Master код состояния Receive Ready

◆ I2C_STAT_MSTCODE_TXREADY

#define I2C_STAT_MSTCODE_TXREADY   (2U)

Master код состояния Transmit Ready

◆ I2C_STAT_SLVST_ADDR

#define I2C_STAT_SLVST_ADDR   (0)

TODO

◆ I2C_STAT_SLVST_RX

#define I2C_STAT_SLVST_RX   (1)

TODO

◆ I2C_STAT_SLVST_TX

#define I2C_STAT_SLVST_TX   (2)

TODO

Типы

◆ i2c_master_transfer_callback_t

typedef void(* i2c_master_transfer_callback_t) (I2C_Type *base, i2c_master_handle_t *handle, i2c_status_t completion_status, void *user_data)

Указатель на функцию обратного вызова при завершении Master-передачи.

Используется только для неблокирующей передачи. Для задания функции обратного вызова, вызывающейся для обработки событий, используется I2C_MasterTransferCreateHandle.

Аргументы
baseБазовый адрес модуля I2C
handleДескриптор обработчика прерывания
completion_statusРезультат завершения операции
user_dataДанные пользователя

◆ i2c_slave_transfer_callback_t

typedef void(* i2c_slave_transfer_callback_t) (I2C_Type *base, volatile i2c_slave_transfer_t *transfer, void *user_data)

Slave тип функции обратного вызова.

Этот тип функции обратного вызова используется только для неблокирующей передачи. Чтобы установить функцию обратного вызова, используйте функцию I2C_SlaveSetCallback после создания дескриптора.

Аргументы
baseБазовый адрес экземпляра I2C, на котором произошло событие.
transferДескриптор передачи, содержащий значения, переданные в/из функции обратного вызова.
user_dataПользовательские данные.

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

◆ i2c_abort_flags

Причины обрыва передачи (регистр IC_TX_ABRT_SOURCE).

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

Master Tx c 7 битной адресацией, NACK от Slave после отправления адреса

I2C_Abort_10B_Addr1_Nack 

Master Tx c 10 битной адресацией, NACK от Slave после отправления 1го адреса

I2C_Abort_10B_Addr2_Nack 

Master Tx c 10 битной адресацией, NACK от Slave после отправления 1го адреса

I2C_Abort_TxData_Nack 

Master Tx не получил ACK от Slave после отправки байта данных

I2C_Abort_GenCall_Nack 

Master Tx отправил General Call, и ни один Slave не ответил

I2C_Abort_GenCall_Read 

Master Rx попытка чтения с адреса General Call

I2C_Abort_HsCode_Ack 

Master в HS режиме получил подтверждение на HS code

I2C_Abort_StartByte_Ack 

Master получил подтверждение на [Start] условие

I2C_Abort_HS_RStart_Dis 

Master в HS режиме пытается отправить [RStart] условие, но возможность отключена

I2C_Abort_RStart_Dis 

Master пытается отправить [RStart] условие, но возможность отключена

I2C_Abort_Read_RStart_Dis 

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

I2C_Abort_Master_Dis 

Попытка инициализировать Master-обмен при выключенном Master-режиме

I2C_Abort_Arbitr_Lost 

Master или Slave (если IC_TX_ABRT_SOURCE[14] == 1) - передатчик проигрывает арбитраж

I2C_Abort_RxFifo_NotEmpty 

Slave получил запрос на чтение, но в RxFifo уже есть данные

I2C_Abort_SlaveArbitr_Lost 

Slave теряет шину во время передачи данных

I2C_Abort_SlaveDataCmd_Error 

Slave есть запрос на передачу данных удаленному Master, но пользователь пытается произвести чтение в режиме мастера (пишет 1 в IC_DATA_CMD.CMD)

I2C_Abort_MasterDetect 

Master определил обрыв передачи

I2C_Abort_Tx_FlushCnt 

Master/Slave-счетчик оставшихся в TxFifo данны после обрыва передачи

◆ i2c_addr_size_t

Разрядность адреса.

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

Для обмена используется 7 битная адресация

I2C_Address10Bit 

Для обмена используется 10 битная адресация

◆ i2c_direction_t

Направление передачи.

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

Master передает

I2C_Read 

Master принимает

◆ i2c_interrupt

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

Заметки
Предназначены для объединения по ИЛИ для формирования битовой маски для регистров:
  • IC_RAW_INTR_STAT
    • Cтатус немаскированных прерываний
  • IC_INTR_STAT
    • Регистр статуса прерываний
  • IC_INTR_MASK
    • Регистр маскирования прерываний

Прерывания:

  • I2C_IRQ_RdReq
    • Устанавливается в Slave-режиме при запросе данных удаленным Master. Slave удерживает состояние ожидания (SCL = 0), пока прерывание обрабатывается. Процессор должен ответить на это прерывание и начать выдавать данные в IC_DATA_CMD регистр. Сброс: чтение IC_CLR_RD_REQ
  • I2C_IRQ_TxAbrt
    • Устанавливается если модуль работает в режиме передатчика и не может произвести передачу. Когда этот бит устанавливается в 1, регистр IC_TX_ABRT_SOURCE отображает причину обрыва передачи. Сброс: чтение IC_CLR_TX_ABRT
  • I2C_IRQ_Activity
    • Устанавливается, если модуль проявил какую-либо активность. Сброс:
      • Выключение модуля I2C
      • Чтение IC_CLR_ACTIVITY
      • Чтение IC_CLR_INTR
      • Системный сброс
Элементы перечислений
I2C_IRQ_RxUnder 

[0] Чтение из пустого RxFifo. Сброс: чтение IC_CLR_RX_UNDER

I2C_IRQ_RxOver 

[1] Переполнение RxFifo. Сброс: чтение IC_CLR_RX_OVER

I2C_IRQ_RxFull 

[2] RxFifo заполнен до уровня IC_RX_TL. Сброс: уменьшение уровня RxFifo ниже IC_RX_TL

I2C_IRQ_TxOver 

[3] Попытка записать в заполненный TxFifo. Сброс: чтение IC_CLR_TX_OVER

I2C_IRQ_TxEmpty 

[4] Опустошение TxFifo ниже уровня IC_TX_TL

I2C_IRQ_RdReq 

[5] Устанавливается при запросе данных удаленным Master

I2C_IRQ_TxAbrt 

[6] Передача прервана

I2C_IRQ_RxDone 

[7] В режиме Slave-передатчика устанавливается в 1, если Master не подтверждает передачу байта

I2C_IRQ_Activity 

[8] Активность на шине I2C

I2C_IRQ_StopDet 

[9] В Slave- или Master-режиме устанавливается, если на шине возникает состояние STOP. Сброс: чтение IC_CLR_STOP_DET

I2C_IRQ_StartDet 

[10] На шине START или RESTART условия. Сброс: чтение IC_CLR_START_DET

I2C_IRQ_GenCall 

[11] Получен адрес General Call и отправлено подтверждение. Сброс: 1) чтение IC_CLR_GEN_CALL 2) выключение модуля

◆ i2c_master_transfer_flags_t

Флаги вариантов передачи.

Заметки
Предназначены для объединения по ИЛИ, чтобы сформировать битовую маску.
Элементы перечислений
I2C_TransferDataFlag 

Передача пакета данных, без установки Start-условия и Stop-условия

I2C_TransferStartFlag 

Запуск нового цикла передачи, начинающийся со Start-условия

I2C_TransferStopFlag 

Остановка цикла передачи Stop-условием

I2C_TransferReStartFlag 

Отправка RStart-условия. Может быть только (!) продолжением передачи. В случае когда предыдущая передача была без I2C_TransferStopFlag и цикл предыдущей передачи не завершился (процесс передачи еще идет)

◆ i2c_master_transfer_states

Состояния для конечного автомата, используемого при обмене. FSM TODO.

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

Состояние: бездействия

I2C_MTS_TransmitSubaddr 

Состояние: передача адреса

I2C_MTS_TransmitData 

Состояние: передача данных

I2C_MTS_ReceiveDataBegin 

Состояние: начало приема данных

I2C_MTS_ReceiveData 

Состояние: прием данных

I2C_MTS_ReceiveLastData 

Состояние: заверешение приема данных

I2C_MTS_Start 

Состояние: Start-условие

I2C_MTS_Stop 

Состояние: Stop-условие

I2C_MTS_WaitForCompletion 

Состояние: Ожидание завершения

◆ i2c_slave_event_transfer_t

Cобытия, вызывающие функцию обратного вызова для неблокирующих передач.

Эти перечисления событий используются для двух взаимосвязанных целей:

  • Битовая маска (по ИЛИ) передается в I2C_SlaveTransferNonBlocking, чтобы указать, какие события включить.
  • При вызове функции обратного вызова, в нее передаеются событие через параметр функции.
Заметки
Эти перечисления предназначены для объединения по ИЛИ, чтобы сформировать битовую маску событий.
Элементы перечислений
I2C_SlaveEvent_MatchAddrSlave 

Получен Slave-адрес после Start или RStart условия

I2C_SlaveEvent_MatchAddrGen 

Получен General-адрес

I2C_SlaveEvent_Transmit 

Slave-передает: Запрошен вызов функции обратного вызова для предоставления данных на передачу

I2C_SlaveEvent_Receive 

Slave-принимает: Запрошен вызов функции обратного вызова для предоставления буфера, в который будут помещены принятые данные

I2C_SlaveEvent_Completion 

Текущий обмен был завершен completion_status содержит статус завершения

I2C_SlaveEvents_Ordinary 

Битовая маска событий достаточная для большинства задач.

I2C_SlaveEvents_All 

Битовая маска всех доступных событий.

◆ i2c_slave_fsm_t

I2C Slave состояния конечного автомата

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

Модуль I2C находится в состоянии ожидания, текущего обмена нет

I2C_SlaveFsm_Init 

Инициализирован процесс обмена, ожидание событий на шине

I2C_SlaveFsm_Receive 

Модуль I2C в фазе получения данных

I2C_SlaveFsm_Transmit 

Модуль I2C в фазе передачи данных

I2C_SlaveFsm_Stop 

Модуль I2C получил Stop

◆ i2c_speed_mode_t

Скоростной режим работы модуля в Master-режиме.

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

Режим не задан

I2C_StandardSpeedMode 

Скорость от 0 до 100 Кб/с

I2C_FastSpeedMode 

Скорость до 400 Кб/с

I2C_HighSpeedMode 

Скорость меньше либо равна 3.4 Мб/с

◆ i2c_status_flags

Статусы модуля I2C (read-only регистр IC_STATUS).

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

Флаг активности шины

I2C_Stat_TxFifo_NotFull 

TxFifo не полон

I2C_Stat_TxFifo_Empty 

TxFifo пуст

I2C_Stat_RxFifo_NotEmpty 

RxFifo не пуст

I2C_Stat_RxFifo_Full 

RxFifo полон

I2C_Stat_Master_Active 

Статус активности состояния Master

I2C_Stat_Slave_Active 

Статус активности состояния Slave

◆ i2c_status_t

Коды возврата функций модуля I2C.

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

Успешное завершение

I2C_Status_Busy 

Master уже выполняет передачу

I2C_Status_Idle 

Slave-драйвер в состоянии ожидания

I2C_Status_Nack 

Slave-устройство отправило NACK в ответ на байт

I2C_Status_InvalidParameter 

Невозможно продолжить из-за недопустимого параметра

I2C_Status_BreakTransfer 

Обрыв обмена

I2C_Status_ArbitrationLost 

Потеря арбитража

I2C_Status_NoTransferInProgress 

Нет активной передачи

I2C_Status_DmaRequestFail 

DMA запрос не выполнен

I2C_Status_Timeout 

Тайм-аут при ожидании установки бита статуса в Master/Slave для продолжения передачи

I2C_Status_AddrNack 

NACK получен для адреса

I2C_Status_UserError 

Некорректная работа с модулем I2C

I2C_Status_SetStartError 

Master получил подтверждение на [Start] условие

I2C_Status_HwError 

Аппаратная ошибка

I2C_Status_HsCodeError 

Master в HS режиме получил подтверждение на HS code

I2C_Status_UnexpectedState 

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

I2C_Status_UnexpectedState1 

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

I2C_Status_UnexpectedState2 

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

I2C_Status_UnexpectedState3 

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

I2C_Status_UnexpectedState4 

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

I2C_Status_UnexpectedState5 

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

I2C_Status_UnexpectedState6 

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

I2C_Status_UnexpectedState7 

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

I2C_Status_UnexpectedState8 

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

I2C_Status_UnexpectedState9 

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

I2C_Status_UnDef 

Статус не определен

Функции

◆ I2C_ClearAllInterrupts()

static void I2C_ClearAllInterrupts ( I2C_Type * base)
inlinestatic

Очищение всех доступных для очистки флагов прерываний.

Заметки
Не все флаги прерываний можно очистить этой функцией. За дополнительной информацией обратитесь к документации на MCU.
Аргументы
baseБазовый адрес модуля.

◆ I2C_ClearInterrupt()

static void I2C_ClearInterrupt ( I2C_Type * base,
enum i2c_interrupt irq )
inlinestatic

Очищение флагов прерываний.

Заметки
Не все флаги прерываний можно очистить этой функцией. За дополнительной информацией обратитесь к документации на MCU.
Аргументы
baseБазовый адрес модуля.
irqБитовая маска прерывания.

◆ I2C_DisableInterrupts()

static void I2C_DisableInterrupts ( I2C_Type * base,
uint32_t mask )
inlinestatic

Отключение запросов на прерывание.

Заметки
Битовая маска прерываний составляется из флагов, i2c_interrupt, которые могут быть соединены с использованием оператора побитового ИЛИ.
Аргументы
baseБазовый адрес модуля.
maskБитовая маска прерываний.

◆ I2C_DMADescriptorInitRX()

static void I2C_DMADescriptorInitRX ( I2C_Type * base,
dma_descriptor_t * desc,
uint32_t count,
uint32_t data_size,
uint8_t dst_incr,
void * dst_addr )
inlinestatic

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

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

◆ I2C_DMADescriptorInitTX()

static void I2C_DMADescriptorInitTX ( I2C_Type * base,
dma_descriptor_t * desc,
uint32_t count,
uint32_t data_size,
uint8_t src_incr,
void * src_addr )
inlinestatic

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

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

◆ I2C_Enable()

i2c_status_t I2C_Enable ( I2C_Type * base,
bool enable )

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

Заметки
Общий алгоритм отключения модуля I2C:
  1. Определить интервал таймера SYSWAIT, равный 10-кратному периоду высшей скорости I2C. Например: если высшая передача I2C режим 400 кбит/с, то этот интервал SYSWAIT равен 25 мкс.
  2. Определить параметр максимального времени ожидания, I2C_RETRY_TIMES_FOR_DISABLE_UNITS * SYSWAIT, при превышении этого значения, сообщать об ошибке.
  3. Выполнить блокирующий поток/процесс/функцию, которая предотвращает дальнейшие Master-транзакции I2C.
  4. Переменная count инициализируется I2C_RETRY_TIMES_FOR_DISABLE_UNITS.
  5. Установить бит 0 регистра IC_ENABLE в 0.
  6. Вызвать функцию I2C_IsEnable для проверки текущего состояния модуля. Уменьшить POLL_COUNT на один. Если POLL_COUNT == 0, выход с кодом ошибки.
  7. Если I2C_IsEnable выдает true, то ожидание времени SYSWAIT и переход к предыдущему шагу. В противном случае, выйти с кодом успеха.
Аргументы
baseБазовый адрес модуля I2C.
enableПередайте true, чтобы включить, или false, чтобы отключить указанный модуль I2C.
Возвращаемые значения
I2C_Status_Ok
I2C_Status_HwError

◆ I2C_EnableInterrupts()

static void I2C_EnableInterrupts ( I2C_Type * base,
uint32_t mask )
inlinestatic

Включение запросов на прерывание.

Заметки
Битовая маска прерываний составляется из флагов, i2c_interrupt, которые могут быть соединены с использованием оператора побитового ИЛИ.
Аргументы
baseБазовый адрес модуля.
maskБитовая маска прерываний.

◆ I2C_GetEnabledInterrupts()

static uint32_t I2C_GetEnabledInterrupts ( I2C_Type * base)
inlinestatic

Возврат набора текущих разрешенных запросов на прерывание.

Заметки
Битовая маска прерываний составляется из флагов, i2c_interrupt, которые могут быть соединены с использованием оператора побитового ИЛИ.
Аргументы
baseБазовый адрес модуля.
Возвращает
Битовая маска прерываний.

◆ I2C_GetInstance()

uint32_t I2C_GetInstance ( I2C_Type * base)

Возврат номера экземпляра по базовому адресу.

Если передан недопустимый базовый адрес, то в режиме отладки будет выполена assert. В режиме релиза будет возвращен номер экземпляра 0.

Аргументы
baseБазовый адрес модуля I2C.
Возвращает
I2C номер экземпляра, начиная с 0.

◆ I2C_IsEnable()

static bool I2C_IsEnable ( I2C_Type * base)
inlinestatic

Возврат состояния модуля I2C.

Аргументы
baseБазовый адрес модуля I2C.
Возвращаемые значения
trueMодуль I2C в состоянии enable.
falseMодуль I2C в состоянии disable.

◆ I2C_MasterAddrSet()

i2c_status_t I2C_MasterAddrSet ( I2C_Type * base,
uint32_t address,
i2c_addr_size_t addr_size )

Установка адреса Slave-устройства на шине I2C, к которому будет обращение в цикле обмена.

Функция устанавливает адрес Slave-устройства и размер адреса. Следющий обмен данными будет происходить с устройством по указанному адресу.

Аргументы
baseБазовый адрес модуля.
addressАдрес Slave-устройства, если адрес равен 0U то General Call
addr_sizeРазмер адреса (7- или 10-битный адрес).
Возвращаемые значения
I2C_Status_Ok
I2C_Status_Busy
I2C_Status_HwError

◆ I2C_MasterDeinit()

i2c_status_t I2C_MasterDeinit ( I2C_Type * base)

Деинициализация Master-устройства I2C.

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

◆ I2C_MasterGetBusActiveState()

static bool I2C_MasterGetBusActiveState ( I2C_Type * base)
inlinestatic

Возврат статуса активность шины.

Необходимо, чтобы был включен Master-режим.

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

◆ I2C_MasterGetDefaultConfig()

void I2C_MasterGetDefaultConfig ( i2c_master_config_t * master_config)

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

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

master_config->enable_master = true;
master_config->baudrate_bps = 100000U;

После вызова этой функции вы можете переопределить любые настройки, перед инициализацией помощью I2C_MasterInit.

Аргументы
master_configКонфигурация модуля для Master-режима.

◆ I2C_MasterInit()

i2c_status_t I2C_MasterInit ( I2C_Type * base,
const i2c_master_config_t * master_config,
uint32_t src_clock_hz )

Инициализация Master-устройства I2C.

Функция инициализирует Master-устройство I2C, в соответствии с пользовательской конфигурацией. Для инициализации конфигурации значениями по умолчанию используйте функцию I2C_MasterGetDefaultConfig.

Заметки
Частота синхронизации I2C модуля используется для расчета делителей скорости передачи данных и периодов ожидания.
Аргументы
baseБазовый адрес модуля I2C.
master_configКонфигурация модуля для Master-режима.
src_clock_hzЧастота синхронизации I2C модуля.
Возвращаемые значения
I2C_Status_Ok
I2C_Status_HwError

◆ I2C_MasterReadBlocking()

i2c_status_t I2C_MasterReadBlocking ( I2C_Type * base,
void * rx_buff,
size_t rx_size,
uint32_t flags )

Выполнение блокирующего приема на шине I2C.

Заметки
Флаги управления передачей перечислены в i2c_master_transfer_flags_t и могут быть объединены операцией ИЛИ. Допустимые комбинации:
  • I2C_TransferStartFlag | I2C_TransferStopFlag
    • Стандартная транзакция. Начинается со Start и заканчивается Stop условием.
  • I2C_TransferStartFlag
    • Начальный пакет транзакции. Начинается со Start и подразумевает продолжение.
  • I2C_TransferDataFlag
    • Пакет передачи данных без Start и Stop условия.
  • I2C_TransferStopFlag
    • Завершающий пакет транзакции. Не начинается со Start и заканчивается Stop условием.
  • I2C_TransferReStartFlag
    • Продолжение транзакции с выдачей повторного старта. Подразумевает продолжение. Используется для смены направления обмена.
  • I2C_TransferReStartFlag | I2C_TransferStopFlag
    • Завершение транзакции с выдачей повторного старта. Не допускает продолжения. Используется для смены направления обмена.
В случае, если Slave не подтверждает последний принятый байт в составной транзакции со сменой направления, статус отказа (I2C_Status_Nack) проигнорирован не будет вне зависимости от I2C_MASTER_TRANSMIT_IGNORE_LAST_NACK.
Аргументы
baseБазовый адрес модуля.
rx_buffБуфер для хранения принимаемых данных.
rx_sizeРазмер буфера принимаемых данных в байтах.
flagsФлаги управления передачей для управления специальным поведением.
Возвращаемые значения
I2C_Status_Ok
I2C_Status_Busy
I2C_Status_ArbitrationLost
I2C_Status_Timeout
I2C_Status_UserError
I2C_Status_AddrNack
I2C_Status_Nack
I2C_Status_BreakTransfer
I2C_Status_UnexpectedState
I2C_Status_SetStartError
I2C_Status_HsCodeError

◆ I2C_MasterSetBaudRate()

i2c_status_t I2C_MasterSetBaudRate ( I2C_Type * base,
uint32_t baudrate_bps,
uint32_t src_clock_hz )

Установка частоты шины для Master-режима модуля I2C.

Master-режим модуля I2C автоматически отключается и снова включается при необходимости для настройки скорости передачи данных.

Заметки
Не вызывайте эту функцию во время передачи, иначе передача будет прервана.
Аргументы
baseБазовый адрес модуля.
baudrate_bpsЗапрашиваемая частота шины в битах в секунду.
src_clock_hzЧастота синхронизации модуля в Герцах.
Возвращаемые значения
I2C_Status_Ok
I2C_Status_HwError
I2C_Status_InvalidParameter

◆ I2C_MasterTransferAbort()

i2c_status_t I2C_MasterTransferAbort ( I2C_Type * base,
i2c_master_handle_t * handle )

Досрочное завершаение основной неблокирующей передачи I2C.

Заметки
Небезопасно вызывать эту функцию из обработчика IRQ, который имеет более высокий приоритет, чем приоритет IRQ периферийного устройства I2C.
Аргументы
baseБазовый адрес модуля.
handleДескриптор для Master-режима.
Возвращаемые значения
I2C_Status_Ok
I2C_Status_TimeoutТайм-аут во время опроса флагов.

◆ I2C_MasterTransferAbortDMA()

void I2C_MasterTransferAbortDMA ( I2C_Type * base,
i2c_master_dma_handle_t * handle )

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

Аргументы
baseБазовый адрес I2C master
handleДескриптор SPI-DMA

◆ I2C_MasterTransferBlocking()

i2c_status_t I2C_MasterTransferBlocking ( I2C_Type * base,
i2c_master_transfer_t * xfer )

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

Заметки
Из функции управление не возвращается до тех пор, пока передача не завершится успешно или неуспешно из-за того, что предыдущий обмен еще не завершен или из-за в проигранного арбитража или получения NACK во время передачи адреса или данных.
Аргументы
baseБазовый адрес модуля.
xferСтруктура передачи.
Возвращаемые значения
I2C_Status_Ok
I2C_Status_Busy
I2C_Status_Nack
I2C_Status_ArbitrationLost
I2C_Status_Timeout
I2C_Status_UserError
I2C_Status_AddrNack
I2C_Status_BreakTransfer
I2C_Status_UnexpectedState
I2C_Status_SetStartError
I2C_Status_HsCodeError

◆ I2C_MasterTransferCreateHandle()

void I2C_MasterTransferCreateHandle ( I2C_Type * base,
i2c_master_handle_t * handle,
i2c_master_transfer_callback_t callback,
void * user_data )

Создание нового дескриптора для неблокирующего Master-режима работы.

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

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

◆ I2C_MasterTransferCreateHandleDMA()

void I2C_MasterTransferCreateHandleDMA ( I2C_Type * base,
i2c_master_dma_handle_t * handle,
i2c_master_dma_transfer_callback_t callback,
void * user_data,
dma_handle_t * tx_dma,
dma_handle_t * rx_dma )

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

Аргументы
baseБазовый адрес I2C master
handleДескриптор I2C-DMA
callbackФункция обратного вызова
user_dataПользовательские данные
tx_dmaДескриптор DMA для передачи
rx_dmaДескриптор DMA для приема

◆ I2C_MasterTransferDMA()

i2c_status_t I2C_MasterTransferDMA ( I2C_Type * base,
i2c_master_dma_handle_t * handle,
i2c_master_transfer_t * xfer )

Функция, запускающая I2C транзакцию. Данные в буфер/из буфера I2C передаются с помощью I2C.

Аргументы
baseБазовый адрес I2C master
handleДескриптор I2C-DMA
xferСтруктура конфигурации для I2C транзакции
Возвращаемые значения
#I2C_DMA_Status_Success
#I2C_DMA_Status_DMA_Busy
#I2C_DMA_Status_InvalidArgument
#I2C_DMA_Status_Addr_Nak
#I2C_DMA_Status_Subaddr_Nak
#I2C_DMA_Status_Fail

◆ I2C_MasterTransferGetCount()

i2c_status_t I2C_MasterTransferGetCount ( I2C_Type * base,
i2c_master_handle_t * handle,
size_t * count )

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

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

◆ I2C_MasterTransferHandleIRQ()

void I2C_MasterTransferHandleIRQ ( I2C_Type * base,
i2c_master_handle_t * handle )

Обработчик запросов на прерывание для Master-режима.

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

◆ I2C_MasterTransferNonBlocking()

i2c_status_t I2C_MasterTransferNonBlocking ( I2C_Type * base,
i2c_master_handle_t * handle,
i2c_master_transfer_t * xfer )

Выполнение неблокирующей транзакции на шине I2C.

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

◆ I2C_MasterWriteBlocking()

i2c_status_t I2C_MasterWriteBlocking ( I2C_Type * base,
const void * tx_buff,
size_t tx_size,
uint32_t flags )

Выполнение блокирующей передачи по шине I2C.

Отправляет до tx_size байтов на ранее адресованное Slave-устройство. Slave может ответить NACK на любой байт, чтобы досрочно завершить передачу. Если это произойдет, функция возвращает I2C_Status_Nack.

Заметки
Флаги управления передачей перечислены в i2c_master_transfer_flags_t и могут быть объединены операцией ИЛИ. Допустимые комбинации:
  • I2C_TransferStartFlag | I2C_TransferStopFlag
    • Стандартная транзакция. Начинается со Start и заканчивается Stop условием.
  • I2C_TransferStartFlag
    • Начальный пакет транзакции. Начинается со Start и подразумевает продолжение.
  • I2C_TransferDataFlag
    • Пакет передачи данных без Start и Stop условия.
  • I2C_TransferStopFlag
    • Завершающий пакет транзакции. Не начинается со Start и заканчивается Stop условием.
  • I2C_TransferReStartFlag
    • Продолжение транзакции с выдачей повторного старта. Подразумевает продолжение. Используется для смены направления обмена.
  • I2C_TransferReStartFlag | I2C_TransferStopFlag
    • Завершение транзакции с выдачей повторного старта. Не допускает продолжения. Используется для смены направления обмена.
В случае, если Slave не подтверждает последний принятый байт в составной транзакции со сменой направления, статус отказа (I2C_Status_Nack) проигнорирован не будет вне зависимости от I2C_MASTER_TRANSMIT_IGNORE_LAST_NACK.
Аргументы
baseБазовый адрес модуля.
tx_buffБуфер для хранения передаваемых данных.
tx_sizeРазмер буфера передаваемых данных в байтах.
flagsФлаги управления передачей для управления специальным поведением.
Возвращаемые значения
I2C_Status_Ok
I2C_Status_Busy
I2C_Status_Nack
I2C_Status_ArbitrationLost
I2C_Status_Timeout
I2C_Status_UserError
I2C_Status_AddrNack
I2C_Status_BreakTransfer
I2C_Status_UnexpectedState
I2C_Status_SetStartError
I2C_Status_HsCodeError

◆ I2C_Reset()

i2c_status_t I2C_Reset ( I2C_Type * base)

Сброс модуля I2C.

Завершение всех операций, очищение TxFifo и RxFifo.

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