ELIOT1 HAL
Загрузка...
Поиск...
Не найдено
hal_i2c_dma.h
См. документацию.
1
12#ifndef HAL_I2C_DMA_H
13#define HAL_I2C_DMA_H
14
15#include "hal_dma.h"
16#include "hal_i2c.h"
17
19#define HAL_SPI_DMA_DRIVER_VERSION (MAKE_VERSION(0, 1, 0))
21#define I2C_MAX_BUFFER_SIZE (8U)
22
27
30(I2C_Type *base, i2c_master_dma_handle_t *handle, void *user_data);
31
47
48#if defined(__cplusplus)
49extern "C" {
50#endif
51
65 void *user_data,
66 dma_handle_t *tx_dma, dma_handle_t *rx_dma);
67
85
92void I2C_MasterTransferAbortDMA(I2C_Type *base,
94
106static inline void I2C_DMADescriptorInitTX(I2C_Type *base,
107 dma_descriptor_t *desc, uint32_t count, uint32_t data_size,
108 uint8_t src_incr, void *src_addr)
109{
110 dma_multiblock_config_t config = {
111 .count = count,
112 .data_size = data_size,
113 .transfer_type = DMA_MemoryToPeripheral_DMA,
114 .scatter_en = false,
115 .gather_en = false,
116 .src_burst_size = DMA_BurstSize32,
117 .dst_burst_size = DMA_BurstSize1,
118 .src_incr = src_incr,
119 .dst_incr = DMA_NoChange,
120 .src_data_width = DMA_Transfer8BitWidth,
121 .dst_data_width = DMA_Transfer8BitWidth,
122 .src_addr = src_addr,
123 .dst_addr = (void *) &base->IC_DATA_CMD,
124 .int_en = true
125 };
126
127 DMA_InitMultiblockDescriptor(desc, &config);
128}
129
141static inline void I2C_DMADescriptorInitRX(I2C_Type *base,
142 dma_descriptor_t *desc, uint32_t count, uint32_t data_size,
143 uint8_t dst_incr, void *dst_addr)
144{
145 dma_multiblock_config_t config = {
146 .count = count,
147 .data_size = data_size,
148 .transfer_type = DMA_PeripheralToMemory_DMA,
149 .scatter_en = false,
150 .gather_en = false,
151 .src_burst_size = DMA_BurstSize1,
152 .dst_burst_size = DMA_BurstSize32,
153 .src_incr = DMA_NoChange,
154 .dst_incr = dst_incr,
155 .src_data_width = DMA_Transfer8BitWidth,
156 .dst_data_width = DMA_Transfer8BitWidth,
157 .src_addr = (void *) &base->IC_DATA_CMD,
158 .dst_addr = dst_addr,
159 .int_en = true
160 };
161
162 DMA_InitMultiblockDescriptor(desc, &config);
163}
164
165#if defined(__cplusplus)
166}
167#endif
168
169#endif /* HAL_I2C_DMA_H */
170
void DMA_InitMultiblockDescriptor(dma_descriptor_t *desc, dma_multiblock_config_t *config)
Функция, инициализирующая DMA дескрипторы многоблочной передачи.
@ DMA_NoChange
Definition hal_dma.h:165
@ DMA_PeripheralToMemory_DMA
Definition hal_dma.h:213
@ DMA_MemoryToPeripheral_DMA
Definition hal_dma.h:212
@ DMA_BurstSize1
Definition hal_dma.h:149
@ DMA_BurstSize32
Definition hal_dma.h:153
@ DMA_Transfer8BitWidth
Definition hal_dma.h:137
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.
Definition hal_i2c_dma.h:106
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.
Definition hal_i2c_dma.h:141
void(* i2c_master_dma_transfer_callback_t)(I2C_Type *base, i2c_master_dma_handle_t *handle, void *user_data)
Функция обратного вызова
Definition hal_i2c_dma.h:30
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_master_transfer_states
Состояния для конечного автомата, используемого при обмене. FSM TODO.
Definition hal_i2c.h:220
i2c_status_t I2C_MasterTransferDMA(I2C_Type *base, i2c_master_dma_handle_t *handle, i2c_master_transfer_t *xfer)
Функция, запускающая I2C транзакцию. Данные в буфер/из буфера I2C передаются с помощью I2C.
i2c_status_t
Коды возврата функций модуля I2C.
Definition hal_i2c.h:65
Интерфейс драйвера прямого доступа к памяти
Интерфейс драйвера модуля I2C.
Описатель следующего блока DMA (LLI)
Definition hal_dma.h:222
Управляющая структура передачи
Definition hal_dma.h:296
Конфигурация многоблочной передачи
Definition hal_dma.h:306
uint32_t count
Definition hal_dma.h:307
Контекст данных прерывания I2C-DMA.
Definition hal_i2c_dma.h:35
dma_handle_t * rx_dma
Definition hal_i2c_dma.h:41
dma_descriptor_t * tx_desc
Definition hal_i2c_dma.h:42
dma_descriptor_t * rx_desc
Definition hal_i2c_dma.h:43
i2c_master_dma_transfer_callback_t completion_callback
Definition hal_i2c_dma.h:44
dma_handle_t * tx_dma
Definition hal_i2c_dma.h:40
i2c_master_transfer_states state
Definition hal_i2c_dma.h:36
uint32_t remaining_bytes_DMA
Definition hal_i2c_dma.h:37
void * user_data
Definition hal_i2c_dma.h:45
uint32_t * dummy_data
Definition hal_i2c_dma.h:39
uint8_t * buf
Definition hal_i2c_dma.h:38
Структура дескриптора для неблокирующего обмена.
Definition hal_i2c.h:320