ELIOT1 HAL
Загрузка...
Поиск...
Не найдено
hal_i2c.h
См. документацию.
1
24#ifndef HAL_I2C_H
25#define HAL_I2C_H
26
27#include "hal_common.h"
28
29#define I2C_CFG_MASK 0x1f
34#define HAL_I2C_DRIVER_VERSION (MAKE_VERSION(1, 0, 0))
35
39#ifndef I2C_RETRY_TIMES
40#define I2C_RETRY_TIMES 0U
41#endif
42
46#ifndef I2C_MASTER_TRANSMIT_IGNORE_LAST_NACK
47#define I2C_MASTER_TRANSMIT_IGNORE_LAST_NACK 0U
48#endif
49
50/* TODO Master: Определения битов MSTCODE в регистре состояния I2C STAT */
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)
57/* TODO Slave: Определения битов SLVSTATE в регистре состояния I2C STAT */
58#define I2C_STAT_SLVST_ADDR (0)
59#define I2C_STAT_SLVST_RX (1)
60#define I2C_STAT_SLVST_TX (2)
96
101 I2C_Stat_Active = I2C_IC_STATUS_ACTIVITY_Msk,
102 I2C_Stat_TxFifo_NotFull = I2C_IC_STATUS_TFNF_Msk,
103 I2C_Stat_TxFifo_Empty = I2C_IC_STATUS_TFE_Msk,
104 I2C_Stat_RxFifo_NotEmpty = I2C_IC_STATUS_RFNE_Msk,
105 I2C_Stat_RxFifo_Full = I2C_IC_STATUS_RFF_Msk,
106 I2C_Stat_Master_Active = I2C_IC_STATUS_MST_ACTIVITY_Msk,
107 I2C_Stat_Slave_Active = I2C_IC_STATUS_SLV_ACTIVITY_Msk
109
114 I2C_Abort_7B_Addr_Nack = I2C_IC_TX_ABRT_SOURCE_ABRT_7B_ADDR_NOACK_Msk,
115 I2C_Abort_10B_Addr1_Nack = I2C_IC_TX_ABRT_SOURCE_ABRT_10ADDR1_NOACK_Msk,
116 I2C_Abort_10B_Addr2_Nack = I2C_IC_TX_ABRT_SOURCE_ABRT_10ADDR2_NOACK_Msk,
117 I2C_Abort_TxData_Nack = I2C_IC_TX_ABRT_SOURCE_ABRT_TXDATA_NOACK_Msk,
118 I2C_Abort_GenCall_Nack = I2C_IC_TX_ABRT_SOURCE_ABRT_GCALL_NOACK_Msk,
119 I2C_Abort_GenCall_Read = I2C_IC_TX_ABRT_SOURCE_ABRT_GCALL_READ_Msk,
120 I2C_Abort_HsCode_Ack = I2C_IC_TX_ABRT_SOURCE_ABRT_HS_ACKDET_Msk,
121 I2C_Abort_StartByte_Ack = I2C_IC_TX_ABRT_SOURCE_ABRT_SBYTE_ACKDET_Msk,
122 I2C_Abort_HS_RStart_Dis = I2C_IC_TX_ABRT_SOURCE_ABRT_HS_NORSTRT_Msk,
123 I2C_Abort_RStart_Dis = I2C_IC_TX_ABRT_SOURCE_ABRT_SBYTE_NORSTRT_Msk,
124 I2C_Abort_Read_RStart_Dis = I2C_IC_TX_ABRT_SOURCE_ABRT_10B_RD_NORSTRT_Msk,
125 I2C_Abort_Master_Dis = I2C_IC_TX_ABRT_SOURCE_ABRT_MASTER_DIS_Msk,
126 I2C_Abort_Arbitr_Lost = I2C_IC_TX_ABRT_SOURCE_ARB_LOST_Msk,
127 I2C_Abort_RxFifo_NotEmpty = I2C_IC_TX_ABRT_SOURCE_ABRT_SLVFLUSH_TXFIFO_Msk,
128 I2C_Abort_SlaveArbitr_Lost = I2C_IC_TX_ABRT_SOURCE_ABRT_SLV_ARBLOST_Msk,
129 I2C_Abort_SlaveDataCmd_Error = I2C_IC_TX_ABRT_SOURCE_ABRT_SLVRD_INTX_Msk,
130 I2C_Abort_MasterDetect = I2C_IC_TX_ABRT_SOURCE_ABRT_USER_ABRT_Msk,
131 I2C_Abort_Tx_FlushCnt = I2C_IC_TX_ABRT_SOURCE_TX_FLUSH_CNT_Msk
133
169 I2C_IRQ_RxUnder = I2C_IC_INTR_MASK_M_RX_UNDER_Msk,
170 I2C_IRQ_RxOver = I2C_IC_INTR_MASK_M_RX_OVER_Msk,
171 I2C_IRQ_RxFull = I2C_IC_INTR_MASK_M_RX_FULL_Msk,
172 I2C_IRQ_TxOver = I2C_IC_INTR_MASK_M_TX_OVER_Msk,
173 I2C_IRQ_TxEmpty = I2C_IC_INTR_MASK_M_TX_EMPTY_Msk,
174 I2C_IRQ_RdReq = I2C_IC_INTR_MASK_M_RD_REQ_Msk,
175 I2C_IRQ_TxAbrt = I2C_IC_INTR_MASK_M_TX_ABRT_Msk,
176 I2C_IRQ_RxDone = I2C_IC_INTR_MASK_M_RX_DONE_Msk,
177 I2C_IRQ_Activity = I2C_IC_INTR_MASK_M_ACTIVITY_Msk,
178 I2C_IRQ_StopDet = I2C_IC_INTR_MASK_M_STOP_DET_Msk,
179 I2C_IRQ_StartDet = I2C_IC_INTR_MASK_M_START_DET_Msk,
180 I2C_IRQ_GenCall = I2C_IC_INTR_MASK_M_GEN_CALL_Msk,
182 I2C_IRQ_Slave = I2C_IRQ_RxUnder | I2C_IRQ_RxOver | I2C_IRQ_RxFull |
186
187 I2C_IRQ_SlaveTst = I2C_IRQ_RxFull | /*TODO*/
191
196};
197
201typedef enum {
203 I2C_Read = 1U
205
213
214
231
232
242
251 typedef struct {
253 uint32_t baudrate_bps;
254 uint8_t sda_setup;
255 uint16_t sda_hold;
257
262
275typedef void (*i2c_master_transfer_callback_t)(I2C_Type *base,
276 i2c_master_handle_t *handle, i2c_status_t completion_status,
277 void *user_data);
278
290
330
346
361
391
396
411
424typedef void (*i2c_slave_transfer_callback_t)(I2C_Type *base,
425 volatile i2c_slave_transfer_t *transfer, void *user_data);
426
437
448
449#if defined(__cplusplus)
450extern "C" {
451#endif
452
466static inline bool I2C_IsEnable(I2C_Type *base)
467{
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);
470}
471
506i2c_status_t I2C_Enable(I2C_Type *base, bool enable);
507
518uint32_t I2C_GetInstance(I2C_Type *base);
519
530i2c_status_t I2C_Reset(I2C_Type *base);
531
547
566static inline void I2C_EnableInterrupts(I2C_Type *base, uint32_t mask)
567{
568 base->IC_INTR_MASK |= mask & I2C_IRQ_All;
569}
570
580static inline void I2C_DisableInterrupts(I2C_Type *base, uint32_t mask)
581{
582 base->IC_INTR_MASK &= ~(mask & I2C_IRQ_All);
583}
584
595static inline uint32_t I2C_GetEnabledInterrupts(I2C_Type *base)
596{
597 return base->IC_INTR_MASK & I2C_IRQ_All;
598}
599
609static inline void I2C_ClearInterrupt(I2C_Type *base, enum i2c_interrupt irq)
610{
611 volatile uint32_t temp = 0;
612 UNUSED(temp);
613
614 switch (irq) {
615 case I2C_IRQ_RxUnder: /* [0] Чтении из пустого RxFifo. */
616 temp = base->IC_CLR_RX_UNDER; /* Сброс: чтение IC_CLR_RX_UNDER */
617 break;
618
619 case I2C_IRQ_RxOver: /* [1] Переполнение RxFifo. */
620 temp = base->IC_CLR_RX_OVER; /* Сброс: чтение IC_CLR_RX_OVER */
621 break;
622
623 case I2C_IRQ_RxFull: /* [2] RxFifo заполнен до уровня IC_RX_TL. */
624 assert(0);
625 break;
626
627 case I2C_IRQ_TxOver: /* [3] Попытка записать в заполненный TxFifo */
628 temp = base->IC_CLR_TX_OVER; /* Сброс: чтение IC_CLR_TX_OVER */
629 break;
630
631 case I2C_IRQ_TxEmpty: /* [4] Опустошение TxFifo ниже уровня IC_TX_TL */
632 assert(0);
633 break;
634
635 case I2C_IRQ_RdReq: /* [5] Уст. при запросе данных удаленным Master. */
636 temp = base->IC_CLR_RD_REQ; /* Сброс чтением: IC_CLR_RD_REQ.CLR_RD_REQ */
637 break;
638
639 case I2C_IRQ_TxAbrt: /* [6] Передача прервана */
640 temp = base->IC_CLR_TX_ABRT; /* Сброс чтением: IC_CLR_TX_ABRT.CLR_TX_ABRT */
641 break;
642
643 case I2C_IRQ_RxDone: /* [7] В режиме Slave-передатчика устанавливается в 1, если мастер не подтверждает передачу байта */
644 temp = base->IC_CLR_RX_DONE; /* Сброс чтением: IC_CLR_RX_DONE.CLR_RX_DONE */
645 break;
646
647 case I2C_IRQ_Activity: /* [8] Активность на шине I2C */
648 temp = base->IC_CLR_ACTIVITY; /* Сброс чтением: 1) IC_CLR_INTR 2) IC_CLR_ACTIVITY.CLR_ACTIVITY 3) Выключение I2C 4) Системный сброс */
649 break;
650
651 case I2C_IRQ_StopDet: /* [9] Устанавливается в Slave- или Master-режиме, если на шине возникает состояние STOP */
652 temp = base->IC_CLR_STOP_DET; /* Сброс: чтение IC_CLR_STOP_DET */
653 break;
654
655 case I2C_IRQ_StartDet: /* [10] На шине START или RESTART условия */
656 temp = base->IC_CLR_START_DET; /* Сброс: чтение IC_CLR_START_DET */
657 break;
658
659 case I2C_IRQ_GenCall: /* [11] Получен адрес General Call и отправлено подтверждение */
660 temp = base->IC_CLR_GEN_CALL; /* Сброс: 1) чтением IC_CLR_GEN_CALL 2) выключение модуля */
661 break;
662
663 default:
664 assert(0);
665 break;
666 }
667
668}
669
678static inline void I2C_ClearAllInterrupts(I2C_Type *base)
679{
680 volatile uint32_t temp;
681 temp = base->IC_CLR_INTR;
682
683 UNUSED(temp);
684}
685
718 const i2c_master_config_t *master_config, uint32_t src_clock_hz);
719
729
756i2c_status_t I2C_MasterSetBaudRate(I2C_Type *base, uint32_t baudrate_bps,
757 uint32_t src_clock_hz);
758
774i2c_status_t I2C_MasterAddrSet(I2C_Type *base, uint32_t address,
775 i2c_addr_size_t addr_size);
776
787static inline bool I2C_MasterGetBusActiveState(I2C_Type *base)
788{
789 /* Получить значение флага: Активность на шине */
790 return (bool) GET_VAL_MSK(base->IC_STATUS, I2C_IC_STATUS_ACTIVITY_Msk,
791 I2C_IC_STATUS_ACTIVITY_Pos);
792}
793
845i2c_status_t I2C_MasterWriteBlocking(I2C_Type *base, const void *tx_buff,
846 size_t tx_size, uint32_t flags);
847
895i2c_status_t I2C_MasterReadBlocking(I2C_Type *base, void *rx_buff,
896 size_t rx_size, uint32_t flags);
897
923
947 i2c_master_transfer_callback_t callback, void *user_data);
948
962
975 i2c_master_handle_t *handle, size_t *count);
976
991 i2c_master_handle_t *handle);
992
1011
1049
1066i2c_status_t I2C_SlaveInit(I2C_Type *base, const i2c_slave_config_t *config);
1067
1080i2c_status_t I2C_SlaveSetAddress(I2C_Type *base, uint16_t address,
1081 bool ack_gen_call);
1082
1094static inline i2c_status_t I2C_SlaveDeinit(I2C_Type *base)
1095{
1096 return I2C_Enable(base, false);
1097}
1098
1107static inline i2c_status_t I2C_SlaveEnable(I2C_Type *base, bool enable)
1108{
1109 return I2C_Enable(base, enable);
1110}
1111
1134i2c_status_t I2C_SlaveWriteBlocking(I2C_Type *base, const uint8_t *tx_buff,
1135 size_t tx_size);
1136
1150i2c_status_t I2C_SlaveReadBlocking(I2C_Type *base, uint8_t *rx_buff,
1151 size_t rx_size);
1152
1181 void *user_data);
1182
1210 i2c_slave_handle_t *handle, uint32_t event_mask);
1211
1238 volatile i2c_slave_transfer_t *transfer, const void *tx_data,
1239 size_t tx_size, uint32_t event_mask);
1240
1266 I2C_Type *base, volatile i2c_slave_transfer_t *transfer, void *rx_data,
1267 size_t rx_size, uint32_t event_mask);
1268
1282
1296 i2c_slave_handle_t *handle, size_t *count);
1297
1316
1325#if defined(__cplusplus)
1326}
1327#endif
1328
1329#endif /* HAL_I2C_H */
1330
#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