|
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.
|
inlinestatic |
Деинициализация периферийного Slave-устройства I2C.
Эта функция отключает Slave-устройство I2C, а также выполняет программный сброс для восстановления модуля I2C до состояния сброса.
| base | Базовый адрес модуля. |
| I2C_Status_Ok | |
| I2C_Status_HwError |
|
inlinestatic |
Включение/отключение модуля I2C.
| base | Базовый адрес модуля. |
| enable | true - включить, false - выключить указанный модуль. |
| void I2C_SlaveGetDefaultConfig | ( | i2c_slave_config_t * | config | ) |
Получение конфигурации по умолчанию для Slave-режима модуля I2C.
Эта функция обеспечивает следующую конфигурацию по умолчанию Slave-устройства I2C:
После вызова этой функции возможно изменить настройки, если требуется изменить конфигурацию, перед инициализацией с помощью I2C_SlaveInit. Необходимо переопределить Slave-адрес желаемым адресом.
| config | Пользовательская конфигурация. |
| i2c_status_t I2C_SlaveInit | ( | I2C_Type * | base, |
| const i2c_slave_config_t * | config ) |
Инициализация Slave-модуля I2C.
Функция инциализирует ведомое периферийное устройство I2C, как описано пользователем в переданной конфигурации.
| base | Базовый адрес модуля. |
| config | Пользовательская конфигурация. |
| I2C_Status_Ok | |
| I2C_Status_HwError |
| 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_UnexpectedState | Master пытается считать данные из Slave, в то время как Slave ожидает запись. |
| 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_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_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_Busy | Slave передача уже запущена для этого декскриптора. |
| i2c_status_t I2C_SlaveTransferAbort | ( | I2C_Type * | base, |
| i2c_slave_handle_t * | handle ) |
Завершение неблокирующей передачи Slave-устройства.
| base | Базовый адрес модуля. |
| handle | Дескриптор для Slave-режима. |
| I2C_Status_Ok | |
| I2C_Status_Idle |
| 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_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 |
| void I2C_SlaveTransferHandleIRQ | ( | I2C_Type * | base, |
| i2c_slave_handle_t * | handle ) |
Процедура для обработки прерываний в Slave-режиме.
| base | Базовый адрес модуля. |
| handle | Дескриптор для Slave-режима. |
| 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_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_UnexpectedState | Master пытается считать данные из Slave, в то время как Slave ожидает запись. |