Драйвер последовательной асимметричной шины для связи между интегральными схемами внутри приборов.
Подробнее...
|
| файл | hal_i2c.h |
| | Интерфейс драйвера модуля I2C.
|
| |
| файл | hal_i2c_dma.h |
| | Дополнение драйвера I2C с пересылкой данных через DMA.
|
| |
|
| 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.
|
| |
|
| 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 в режиме блокировки.
|
| |
Драйвер последовательной асимметричной шины для связи между интегральными схемами внутри приборов.
Драйвер поддерживает обмен по интерфейсу I2C по прерыванию и в режиме опроса.
Используя специальные функции из hal_i2c_dma.h, передача данных из буфера / в буфер UART будет происходить с помощью DMA.
◆ I2C_CFG_MASK
| #define I2C_CFG_MASK 0x1f |
◆ 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) |
◆ I2C_STAT_SLVST_RX
| #define I2C_STAT_SLVST_RX (1) |
◆ I2C_STAT_SLVST_TX
| #define I2C_STAT_SLVST_TX (2) |
◆ i2c_master_transfer_callback_t
Указатель на функцию обратного вызова при завершении 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.
- Заметки
- Общий алгоритм отключения модуля I2C:
- Определить интервал таймера SYSWAIT, равный 10-кратному периоду высшей скорости I2C. Например: если высшая передача I2C режим 400 кбит/с, то этот интервал SYSWAIT равен 25 мкс.
- Определить параметр максимального времени ожидания, I2C_RETRY_TIMES_FOR_DISABLE_UNITS * SYSWAIT, при превышении этого значения, сообщать об ошибке.
- Выполнить блокирующий поток/процесс/функцию, которая предотвращает дальнейшие Master-транзакции I2C.
- Переменная count инициализируется I2C_RETRY_TIMES_FOR_DISABLE_UNITS.
- Установить бит 0 регистра IC_ENABLE в 0.
- Вызвать функцию I2C_IsEnable для проверки текущего состояния модуля. Уменьшить POLL_COUNT на один. Если POLL_COUNT == 0, выход с кодом ошибки.
- Если I2C_IsEnable выдает true, то ожидание времени SYSWAIT и переход к предыдущему шагу. В противном случае, выйти с кодом успеха.
- Аргументы
-
| base | Базовый адрес модуля I2C. |
| enable | Передайте true, чтобы включить, или false, чтобы отключить указанный модуль I2C. |
- Возвращаемые значения
-
◆ 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. |
- Возвращаемые значения
-
| true | Mодуль I2C в состоянии enable. |
| false | Mодуль I2C в состоянии disable. |
◆ I2C_MasterAddrSet()
Установка адреса Slave-устройства на шине I2C, к которому будет обращение в цикле обмена.
Функция устанавливает адрес Slave-устройства и размер адреса. Следющий обмен данными будет происходить с устройством по указанному адресу.
- Аргументы
-
| base | Базовый адрес модуля. |
| address | Адрес Slave-устройства, если адрес равен 0U то General Call |
| addr_size | Размер адреса (7- или 10-битный адрес). |
- Возвращаемые значения
-
◆ I2C_MasterDeinit()
Деинициализация Master-устройства I2C.
- Аргументы
-
| base | Базовый адрес модуля I2C. |
- Возвращаемые значения
-
◆ I2C_MasterGetBusActiveState()
| static bool I2C_MasterGetBusActiveState |
( |
I2C_Type * | base | ) |
|
|
inlinestatic |
Возврат статуса активность шины.
Необходимо, чтобы был включен Master-режим.
- Аргументы
-
| base | Базовый адрес модуля. |
- Возвращаемые значения
-
| true | Шина занята. |
| false | Шина свободна. |
◆ I2C_MasterGetDefaultConfig()
Получение конфигурации по умолчанию для Master-режима модуля I2C.
Эта функция обеспечивает следующую конфигурацию по умолчанию для модуля I2C:
master_config->enable_master = true;
master_config->baudrate_bps = 100000U;
После вызова этой функции вы можете переопределить любые настройки, перед инициализацией помощью I2C_MasterInit.
- Аргументы
-
| master_config | Конфигурация модуля для Master-режима. |
◆ I2C_MasterInit()
Инициализация Master-устройства I2C.
Функция инициализирует Master-устройство I2C, в соответствии с пользовательской конфигурацией. Для инициализации конфигурации значениями по умолчанию используйте функцию I2C_MasterGetDefaultConfig.
- Заметки
- Частота синхронизации I2C модуля используется для расчета делителей скорости передачи данных и периодов ожидания.
- Аргументы
-
| base | Базовый адрес модуля I2C. |
| master_config | Конфигурация модуля для Master-режима. |
| src_clock_hz | Частота синхронизации I2C модуля. |
- Возвращаемые значения
-
◆ 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_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_MasterTransferAbort()
Досрочное завершаение основной неблокирующей передачи I2C.
- Заметки
- Небезопасно вызывать эту функцию из обработчика IRQ, который имеет более высокий приоритет, чем приоритет IRQ периферийного устройства I2C.
- Аргументы
-
| base | Базовый адрес модуля. |
| handle | Дескриптор для Master-режима. |
- Возвращаемые значения
-
◆ I2C_MasterTransferAbortDMA()
Прекращение передачи I2C.
- Аргументы
-
| base | Базовый адрес I2C master |
| handle | Дескриптор SPI-DMA |
◆ I2C_MasterTransferBlocking()
Выполнение обмена данными на шине I2C в режиме блокировки.
- Заметки
- Из функции управление не возвращается до тех пор, пока передача не завершится успешно или неуспешно из-за того, что предыдущий обмен еще не завершен или из-за в проигранного арбитража или получения NACK во время передачи адреса или данных.
- Аргументы
-
| base | Базовый адрес модуля. |
| xfer | Структура передачи. |
- Возвращаемые значения
-
◆ I2C_MasterTransferCreateHandle()
Создание нового дескриптора для неблокирующего Master-режима работы.
Создание дескриптора предназначено для использования с неблокирующими API. Однажды созданный дескриптор не требуется специально уничтожать отдельной функцией. Если пользователь хочет завершить передачу, должна быть вызвана I2C_MasterTransferAbort.
- Аргументы
-
| base | Базовый адрес модуля. |
| handle | Дескриптор для Master-режима. |
| callback | Функция обратного вызова. |
| user_data | Пользовательские данные для функции обратного вызова. |
◆ I2C_MasterTransferCreateHandleDMA()
Функция инициализации дескриптора I2C-DMA.
- Аргументы
-
| base | Базовый адрес I2C master |
| handle | Дескриптор I2C-DMA |
| callback | Функция обратного вызова |
| user_data | Пользовательские данные |
| tx_dma | Дескриптор DMA для передачи |
| rx_dma | Дескриптор DMA для приема |
◆ I2C_MasterTransferDMA()
Функция, запускающая 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()
Получение количества байтов, переданных неблокирующей транзакцией на данный момент.
- Аргументы
-
| base | Базовый адрес модуля. |
| handle | Дескриптор для Master-режима. |
| count | Количество байтов, переданных на данный момент. |
- Возвращаемые значения
-
◆ I2C_MasterTransferHandleIRQ()
Обработчик запросов на прерывание для Master-режима.
- Заметки
- Эту функцию не нужно вызывать.
- Аргументы
-
| base | Базовый адрес модуля. |
| handle | Дескриптор для Master-режима. |
◆ I2C_MasterTransferNonBlocking()
Выполнение неблокирующей транзакции на шине I2C.
- Аргументы
-
| base | Базовый адрес модуля. |
| handle | Дескриптор для Master-режима. |
| xfer | Структура передачи. |
- Возвращаемые значения
-
◆ 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_Reset()
Сброс модуля I2C.
Завершение всех операций, очищение TxFifo и RxFifo.
- Аргументы
-
| base | Базовый адрес модуля I2C. |
- Возвращаемые значения
-