27#include "hal_common.h"
29#define I2C_CFG_MASK 0x1f
34#define HAL_I2C_DRIVER_VERSION (MAKE_VERSION(1, 0, 0))
39#ifndef I2C_RETRY_TIMES
40#define I2C_RETRY_TIMES 0U
46#ifndef I2C_MASTER_TRANSMIT_IGNORE_LAST_NACK
47#define I2C_MASTER_TRANSMIT_IGNORE_LAST_NACK 0U
51#define I2C_STAT_MSTCODE_IDLE (0U)
52#define I2C_STAT_MSTCODE_RXREADY (1U)
53#define I2C_STAT_MSTCODE_TXREADY (2U)
54#define I2C_STAT_MSTCODE_NACKADR (3U)
55#define I2C_STAT_MSTCODE_NACKDAT (4U)
58#define I2C_STAT_SLVST_ADDR (0)
59#define I2C_STAT_SLVST_RX (1)
60#define I2C_STAT_SLVST_TX (2)
449#if defined(__cplusplus)
468 return (
bool) GET_VAL_MSK(base->IC_ENABLE_STATUS,
469 I2C_IC_ENABLE_STATUS_IC_EN_Msk, I2C_IC_ENABLE_STATUS_IC_EN_Pos);
568 base->IC_INTR_MASK |= mask & I2C_IRQ_All;
582 base->IC_INTR_MASK &= ~(mask & I2C_IRQ_All);
597 return base->IC_INTR_MASK & I2C_IRQ_All;
611 volatile uint32_t temp = 0;
616 temp = base->IC_CLR_RX_UNDER;
620 temp = base->IC_CLR_RX_OVER;
628 temp = base->IC_CLR_TX_OVER;
636 temp = base->IC_CLR_RD_REQ;
640 temp = base->IC_CLR_TX_ABRT;
644 temp = base->IC_CLR_RX_DONE;
648 temp = base->IC_CLR_ACTIVITY;
652 temp = base->IC_CLR_STOP_DET;
656 temp = base->IC_CLR_START_DET;
660 temp = base->IC_CLR_GEN_CALL;
680 volatile uint32_t temp;
681 temp = base->IC_CLR_INTR;
757 uint32_t src_clock_hz);
790 return (
bool) GET_VAL_MSK(base->IC_STATUS, I2C_IC_STATUS_ACTIVITY_Msk,
791 I2C_IC_STATUS_ACTIVITY_Pos);
846 size_t tx_size, uint32_t flags);
896 size_t rx_size, uint32_t flags);
1239 size_t tx_size, uint32_t event_mask);
1267 size_t rx_size, uint32_t event_mask);
1325#if defined(__cplusplus)
#define UNUSED(x)
Definition hal_common.h:45
void I2C_MasterTransferCreateHandle(I2C_Type *base, i2c_master_handle_t *handle, i2c_master_transfer_callback_t callback, void *user_data)
Создание нового дескриптора для неблокирующего Master-режима работы.
uint32_t I2C_GetInstance(I2C_Type *base)
Возврат номера экземпляра по базовому адресу.
i2c_speed_mode_t
Скоростной режим работы модуля в Master-режиме.
Definition hal_i2c.h:236
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_Reset(I2C_Type *base)
Сброс модуля I2C.
i2c_status_t I2C_MasterTransferGetCount(I2C_Type *base, i2c_master_handle_t *handle, size_t *count)
Получение количества байтов, переданных неблокирующей транзакцией на данный момент.
static void I2C_EnableInterrupts(I2C_Type *base, uint32_t mask)
Включение запросов на прерывание.
Definition hal_i2c.h:566
static void I2C_ClearInterrupt(I2C_Type *base, enum i2c_interrupt irq)
Очищение флагов прерываний.
Definition hal_i2c.h:609
i2c_interrupt
Флаги прерываний I2C.
Definition hal_i2c.h:168
i2c_status_t I2C_MasterSetBaudRate(I2C_Type *base, uint32_t baudrate_bps, uint32_t src_clock_hz)
Установка частоты шины для Master-режима модуля I2C.
i2c_abort_flags
Причины обрыва передачи (регистр IC_TX_ABRT_SOURCE).
Definition hal_i2c.h:113
static void I2C_ClearAllInterrupts(I2C_Type *base)
Очищение всех доступных для очистки флагов прерываний.
Definition hal_i2c.h:678
i2c_status_t I2C_MasterTransferNonBlocking(I2C_Type *base, i2c_master_handle_t *handle, i2c_master_transfer_t *xfer)
Выполнение неблокирующей транзакции на шине I2C.
i2c_slave_event_transfer_t
Cобытия, вызывающие функцию обратного вызова для неблокирующих передач.
Definition hal_i2c.h:374
i2c_master_transfer_flags_t
Флаги вариантов передачи.
Definition hal_i2c.h:284
void(* i2c_slave_transfer_callback_t)(I2C_Type *base, volatile i2c_slave_transfer_t *transfer, void *user_data)
Slave тип функции обратного вызова.
Definition hal_i2c.h:424
i2c_status_t I2C_MasterTransferBlocking(I2C_Type *base, i2c_master_transfer_t *xfer)
Выполнение обмена данными на шине I2C в режиме блокировки.
i2c_status_t I2C_MasterDeinit(I2C_Type *base)
Деинициализация Master-устройства I2C.
i2c_status_t I2C_MasterReadBlocking(I2C_Type *base, void *rx_buff, size_t rx_size, uint32_t flags)
Выполнение блокирующего приема на шине I2C.
i2c_status_t I2C_MasterWriteBlocking(I2C_Type *base, const void *tx_buff, size_t tx_size, uint32_t flags)
Выполнение блокирующей передачи по шине I2C.
i2c_addr_size_t
Разрядность адреса.
Definition hal_i2c.h:209
i2c_direction_t
Направление передачи.
Definition hal_i2c.h:201
i2c_status_flags
Статусы модуля I2C (read-only регистр IC_STATUS).
Definition hal_i2c.h:100
static bool I2C_MasterGetBusActiveState(I2C_Type *base)
Возврат статуса активность шины.
Definition hal_i2c.h:787
i2c_master_transfer_states
Состояния для конечного автомата, используемого при обмене. FSM TODO.
Definition hal_i2c.h:220
i2c_status_t I2C_MasterAddrSet(I2C_Type *base, uint32_t address, i2c_addr_size_t addr_size)
Установка адреса Slave-устройства на шине I2C, к которому будет обращение в цикле обмена.
i2c_status_t I2C_Enable(I2C_Type *base, bool enable)
Включение и отключение модуля I2C.
void I2C_MasterGetDefaultConfig(i2c_master_config_t *master_config)
Получение конфигурации по умолчанию для Master-режима модуля I2C.
static bool I2C_IsEnable(I2C_Type *base)
Возврат состояния модуля I2C.
Definition hal_i2c.h:466
i2c_slave_fsm_t
I2C Slave состояния конечного автомата
Definition hal_i2c.h:430
i2c_status_t
Коды возврата функций модуля I2C.
Definition hal_i2c.h:65
static uint32_t I2C_GetEnabledInterrupts(I2C_Type *base)
Возврат набора текущих разрешенных запросов на прерывание.
Definition hal_i2c.h:595
void(* i2c_master_transfer_callback_t)(I2C_Type *base, i2c_master_handle_t *handle, i2c_status_t completion_status, void *user_data)
Указатель на функцию обратного вызова при завершении Master-передачи.
Definition hal_i2c.h:275
static void I2C_DisableInterrupts(I2C_Type *base, uint32_t mask)
Отключение запросов на прерывание.
Definition hal_i2c.h:580
i2c_status_t I2C_MasterTransferAbort(I2C_Type *base, i2c_master_handle_t *handle)
Досрочное завершаение основной неблокирующей передачи I2C.
void I2C_MasterTransferHandleIRQ(I2C_Type *base, i2c_master_handle_t *handle)
Обработчик запросов на прерывание для Master-режима.
@ I2C_HighSpeedMode
Definition hal_i2c.h:240
@ I2C_StandardSpeedMode
Definition hal_i2c.h:238
@ I2C_UndefinedSpeedMode
Definition hal_i2c.h:237
@ I2C_FastSpeedMode
Definition hal_i2c.h:239
@ I2C_IRQ_TxEmpty
Definition hal_i2c.h:173
@ I2C_IRQ_RxUnder
Definition hal_i2c.h:169
@ I2C_IRQ_RdReq
Definition hal_i2c.h:174
@ I2C_IRQ_TxAbrt
Definition hal_i2c.h:175
@ I2C_IRQ_Activity
Definition hal_i2c.h:177
@ I2C_IRQ_RxFull
Definition hal_i2c.h:171
@ I2C_IRQ_TxOver
Definition hal_i2c.h:172
@ I2C_IRQ_StartDet
Definition hal_i2c.h:179
@ I2C_IRQ_RxOver
Definition hal_i2c.h:170
@ I2C_IRQ_StopDet
Definition hal_i2c.h:178
@ I2C_IRQ_GenCall
Definition hal_i2c.h:180
@ I2C_IRQ_RxDone
Definition hal_i2c.h:176
@ I2C_Abort_Read_RStart_Dis
Definition hal_i2c.h:124
@ I2C_Abort_TxData_Nack
Definition hal_i2c.h:117
@ I2C_Abort_MasterDetect
Definition hal_i2c.h:130
@ I2C_Abort_10B_Addr2_Nack
Definition hal_i2c.h:116
@ I2C_Abort_SlaveDataCmd_Error
Definition hal_i2c.h:129
@ I2C_Abort_HsCode_Ack
Definition hal_i2c.h:120
@ I2C_Abort_HS_RStart_Dis
Definition hal_i2c.h:122
@ I2C_Abort_10B_Addr1_Nack
Definition hal_i2c.h:115
@ I2C_Abort_SlaveArbitr_Lost
Definition hal_i2c.h:128
@ I2C_Abort_StartByte_Ack
Definition hal_i2c.h:121
@ I2C_Abort_Arbitr_Lost
Definition hal_i2c.h:126
@ I2C_Abort_Master_Dis
Definition hal_i2c.h:125
@ I2C_Abort_7B_Addr_Nack
Definition hal_i2c.h:114
@ I2C_Abort_RxFifo_NotEmpty
Definition hal_i2c.h:127
@ I2C_Abort_GenCall_Read
Definition hal_i2c.h:119
@ I2C_Abort_GenCall_Nack
Definition hal_i2c.h:118
@ I2C_Abort_RStart_Dis
Definition hal_i2c.h:123
@ I2C_Abort_Tx_FlushCnt
Definition hal_i2c.h:131
@ I2C_SlaveEvent_Receive
Definition hal_i2c.h:378
@ I2C_SlaveEvent_Completion
Definition hal_i2c.h:379
@ I2C_SlaveEvents_Ordinary
Definition hal_i2c.h:381
@ I2C_SlaveEvent_Transmit
Definition hal_i2c.h:377
@ I2C_SlaveEvent_MatchAddrSlave
Definition hal_i2c.h:375
@ I2C_SlaveEvents_All
Definition hal_i2c.h:385
@ I2C_SlaveEvent_MatchAddrGen
Definition hal_i2c.h:376
@ I2C_TransferReStartFlag
Definition hal_i2c.h:288
@ I2C_TransferStopFlag
Definition hal_i2c.h:287
@ I2C_TransferDataFlag
Definition hal_i2c.h:285
@ I2C_TransferStartFlag
Definition hal_i2c.h:286
@ I2C_Address7Bit
Definition hal_i2c.h:210
@ I2C_Address10Bit
Definition hal_i2c.h:211
@ I2C_Read
Definition hal_i2c.h:203
@ I2C_Write
Definition hal_i2c.h:202
@ I2C_Stat_Master_Active
Definition hal_i2c.h:106
@ I2C_Stat_TxFifo_Empty
Definition hal_i2c.h:103
@ I2C_Stat_RxFifo_Full
Definition hal_i2c.h:105
@ I2C_Stat_TxFifo_NotFull
Definition hal_i2c.h:102
@ I2C_Stat_Slave_Active
Definition hal_i2c.h:107
@ I2C_Stat_RxFifo_NotEmpty
Definition hal_i2c.h:104
@ I2C_Stat_Active
Definition hal_i2c.h:101
@ I2C_MTS_TransmitSubaddr
Definition hal_i2c.h:222
@ I2C_MTS_ReceiveDataBegin
Definition hal_i2c.h:224
@ I2C_MTS_ReceiveData
Definition hal_i2c.h:225
@ I2C_MTS_WaitForCompletion
Definition hal_i2c.h:229
@ I2C_MTS_TransmitData
Definition hal_i2c.h:223
@ I2C_MTS_Stop
Definition hal_i2c.h:228
@ I2C_MTS_Start
Definition hal_i2c.h:227
@ I2C_MTS_ReceiveLastData
Definition hal_i2c.h:226
@ I2C_MTS_Idle
Definition hal_i2c.h:221
@ I2C_SlaveFsm_Receive
Definition hal_i2c.h:433
@ I2C_SlaveFsm_Transmit
Definition hal_i2c.h:434
@ I2C_SlaveFsm_Idle
Definition hal_i2c.h:431
@ I2C_SlaveFsm_Stop
Definition hal_i2c.h:435
@ I2C_SlaveFsm_Init
Definition hal_i2c.h:432
@ I2C_Status_BreakTransfer
Definition hal_i2c.h:71
@ I2C_Status_UnexpectedState6
Definition hal_i2c.h:89
@ I2C_Status_DmaRequestFail
Definition hal_i2c.h:74
@ I2C_Status_Ok
Definition hal_i2c.h:66
@ I2C_Status_UnexpectedState3
Definition hal_i2c.h:86
@ I2C_Status_HwError
Definition hal_i2c.h:80
@ I2C_Status_Nack
Definition hal_i2c.h:69
@ I2C_Status_InvalidParameter
Definition hal_i2c.h:70
@ I2C_Status_UnexpectedState8
Definition hal_i2c.h:91
@ I2C_Status_Busy
Definition hal_i2c.h:67
@ I2C_Status_SetStartError
Definition hal_i2c.h:79
@ I2C_Status_UnexpectedState9
Definition hal_i2c.h:92
@ I2C_Status_UnexpectedState7
Definition hal_i2c.h:90
@ I2C_Status_UnDef
Definition hal_i2c.h:94
@ I2C_Status_UnexpectedState4
Definition hal_i2c.h:87
@ I2C_Status_UserError
Definition hal_i2c.h:78
@ I2C_Status_UnexpectedState2
Definition hal_i2c.h:85
@ I2C_Status_UnexpectedState
Definition hal_i2c.h:83
@ I2C_Status_UnexpectedState5
Definition hal_i2c.h:88
@ I2C_Status_Timeout
Definition hal_i2c.h:76
@ I2C_Status_HsCodeError
Definition hal_i2c.h:81
@ I2C_Status_AddrNack
Definition hal_i2c.h:77
@ I2C_Status_UnexpectedState1
Definition hal_i2c.h:84
@ I2C_Status_Idle
Definition hal_i2c.h:68
@ I2C_Status_NoTransferInProgress
Definition hal_i2c.h:73
@ I2C_Status_ArbitrationLost
Definition hal_i2c.h:72
i2c_status_t I2C_SlaveTransferNonBlocking(I2C_Type *base, i2c_slave_handle_t *handle, uint32_t event_mask)
Инициализация приема для Slave-режима.
void I2C_SlaveGetDefaultConfig(i2c_slave_config_t *config)
Получение конфигурации по умолчанию для Slave-режима модуля I2C.
void I2C_SlaveTransferHandleIRQ(I2C_Type *base, i2c_slave_handle_t *handle)
Процедура для обработки прерываний в Slave-режиме.
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_SlaveInit(I2C_Type *base, const i2c_slave_config_t *config)
Инициализация Slave-модуля I2C.
i2c_status_t I2C_SlaveReadBlocking(I2C_Type *base, uint8_t *rx_buff, size_t rx_size)
Выполнение приема по шине I2C в модуль в режиме блокировки.
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 по прерыванию.
static i2c_status_t I2C_SlaveDeinit(I2C_Type *base)
Деинициализация периферийного Slave-устройства I2C.
Definition hal_i2c.h:1094
i2c_status_t I2C_SlaveSetAddress(I2C_Type *base, uint16_t address, bool ack_gen_call)
Установка адреса Slave-устройства.
i2c_status_t I2C_SlaveWriteBlocking(I2C_Type *base, const uint8_t *tx_buff, size_t tx_size)
Выполнение передачи из модуля на шину I2C в режиме блокировки.
static i2c_status_t I2C_SlaveEnable(I2C_Type *base, bool enable)
Включение/отключение модуля I2C.
Definition hal_i2c.h:1107
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_SlaveTransferGetCount(I2C_Type *base, i2c_slave_handle_t *handle, size_t *count)
Получение количества оставшихся байтов во время неблокирующей передачи (через прерывание) в Slave-реж...
i2c_status_t I2C_SlaveTransferAbort(I2C_Type *base, i2c_slave_handle_t *handle)
Завершение неблокирующей передачи Slave-устройства.
Дескриптор для работы по прерыванию.
Definition hal_i2c.h:334
bool check_addr_nack
Definition hal_i2c.h:341
i2c_master_transfer_callback_t completion_callback
Definition hal_i2c.h:343
i2c_master_transfer_t transfer
Definition hal_i2c.h:342
uint32_t transfer_count
Definition hal_i2c.h:336
uint8_t * buf
Definition hal_i2c.h:338
void * user_data
Definition hal_i2c.h:344
uint8_t subaddr_buf[4]
Definition hal_i2c.h:340
uint32_t remaining_bytes
Definition hal_i2c.h:337
uint32_t remaining_subaddr
Definition hal_i2c.h:339
uint8_t state
Definition hal_i2c.h:335
I2C Slave-дескриптор
Definition hal_i2c.h:441
volatile i2c_slave_fsm_t slave_fsm
Definition hal_i2c.h:444
i2c_slave_transfer_callback_t callback
Definition hal_i2c.h:445
volatile i2c_slave_transfer_t transfer
Definition hal_i2c.h:443
int32_t irq_num
Definition hal_i2c.h:442
void * user_data
Definition hal_i2c.h:446
Структура с настройками для инициализации Master-модуля I2C.
Definition hal_i2c.h:251
uint8_t sda_setup
Definition hal_i2c.h:254
uint32_t baudrate_bps
Definition hal_i2c.h:253
bool enable_master
Definition hal_i2c.h:252
uint16_t sda_hold
Definition hal_i2c.h:255
Структура дескриптора для неблокирующего обмена.
Definition hal_i2c.h:320
i2c_addr_size_t addr_size
Definition hal_i2c.h:323
size_t data_size
Definition hal_i2c.h:328
uint32_t flags
Definition hal_i2c.h:321
void * data
Definition hal_i2c.h:327
size_t subaddress_size
Definition hal_i2c.h:326
uint16_t slave_address
Definition hal_i2c.h:322
i2c_direction_t direction
Definition hal_i2c.h:324
uint32_t subaddress
Definition hal_i2c.h:325
Структура с настройками для инициализации Slave-модуля I2C.
Definition hal_i2c.h:355
uint16_t address
Definition hal_i2c.h:356
i2c_addr_size_t i2c_addr_size
Definition hal_i2c.h:358
bool ack_gen_call
Definition hal_i2c.h:357
bool enable_slave
Definition hal_i2c.h:359
I2C Slave структура обмена данными
Definition hal_i2c.h:400
size_t tx_size
Definition hal_i2c.h:407
size_t rx_size
Definition hal_i2c.h:405
i2c_slave_event_transfer_t event
Definition hal_i2c.h:402
uint32_t event_mask
Definition hal_i2c.h:403
const uint8_t * tx_data
Definition hal_i2c.h:406
i2c_slave_handle_t * handle
Definition hal_i2c.h:401
size_t transferred_count
Definition hal_i2c.h:408
i2c_status_t completion_status
Definition hal_i2c.h:409
uint8_t * rx_data
Definition hal_i2c.h:404