ELIOT1 HAL
Загрузка...
Поиск...
Не найдено
hal_spi_dma.h
См. документацию.
1
12#ifndef HAL_SPI_DMA_H
13#define HAL_SPI_DMA_H
14
15#include "hal_dma.h"
16#include "hal_spi.h"
17
19#define HAL_SPI_DMA_DRIVER_VERSION (MAKE_VERSION(1, 0, 0))
20
25
27typedef void (*spi_dma_callback_t)(SPI_Type *base, spi_dma_handle_t *handle,
28 void *user_data, dma_irq_t inttype);
29
47
48#if defined(__cplusplus)
49extern "C" {
50#endif
51
66 spi_dma_callback_t callback, void *user_data, spi_dma_handle_t *handle,
67 dma_handle_t *tx_handle, dma_handle_t *rx_handle);
68
83 spi_dma_handle_t *handle, spi_transfer_t *xfer);
84
101
116 SPI_Type *base, spi_dma_callback_t callback, void *user_data,
117 spi_dma_handle_t *handle, dma_handle_t *tx_handle, dma_handle_t *rx_handle)
118{
119 return SPI_MasterTransferCreateHandleDMA(base, callback, user_data,
120 handle, tx_handle, rx_handle);
121}
122
136static inline enum spi_status SPI_SlaveTransferDMA(SPI_Type *base,
137 spi_dma_handle_t *handle, spi_transfer_t *xfer)
138{
139 return SPI_MasterTransferDMA(base, handle, xfer);
140}
141
148
155{
157}
158
169static inline void SPI_DMADescriptorInitTX(SPI_Type *base,
170 dma_descriptor_t *desc, uint32_t count, uint32_t data_size,
171 uint8_t src_incr, uint32_t data_width, void *src_addr)
172{
173 dma_multiblock_config_t config = {
174 .count = count,
175 .data_size = data_size,
176 .transfer_type = DMA_MemoryToPeripheral_DMA,
177 .scatter_en = false,
178 .gather_en = false,
179 .src_burst_size = DMA_BurstSize32,
180 .dst_burst_size = DMA_BurstSize1,
181 .src_incr = src_incr,
182 .dst_incr = DMA_NoChange,
183 .src_data_width = data_width,
184 .dst_data_width = data_width,
185 .src_addr = src_addr,
186 .dst_addr = (void *) &base->DR0,
187 .int_en = true
188 };
189
190 DMA_InitMultiblockDescriptor(desc, &config);
191}
192
203static inline void SPI_DMADescriptorInitRX(SPI_Type *base,
204 dma_descriptor_t *desc, uint32_t count, uint32_t data_size,
205 uint8_t dst_incr, uint32_t data_width, void *dst_addr)
206{
207 dma_multiblock_config_t config = {
208 .count = count,
209 .data_size = data_size,
210 .transfer_type = DMA_PeripheralToMemory_DMA,
211 .scatter_en = false,
212 .gather_en = false,
213 .src_burst_size = DMA_BurstSize1,
214 .dst_burst_size = DMA_BurstSize32,
215 .src_incr = DMA_NoChange,
216 .dst_incr = dst_incr,
217 .src_data_width = data_width,
218 .dst_data_width = data_width,
219 .src_addr = (void *) &base->DR0,
220 .dst_addr = dst_addr,
221 .int_en = true
222 };
223
224 DMA_InitMultiblockDescriptor(desc, &config);
225}
226
227#if defined(__cplusplus)
228}
229#endif
230
231#endif /* HAL_SPI_DMA_H */
232
enum _dma_int dma_irq_t
Источники прерываний DMA.
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
enum spi_status SPI_MasterHalfDuplexTransferDMA(SPI_Type *base, spi_dma_handle_t *handle, spi_half_duplex_transfer_t *xfer)
Функция приема/передачи данных в полудуплексном режиме через DMA каналы в порт SPI.
spi_trans_status
Состояния приемо-передачи SPI.
Definition hal_spi.h:324
enum spi_status SPI_MasterTransferCreateHandleDMA(SPI_Type *base, spi_dma_callback_t callback, void *user_data, spi_dma_handle_t *handle, dma_handle_t *tx_handle, dma_handle_t *rx_handle)
Функция инициализации дескриптора SPI-DMA.
static void SPI_DMADescriptorInitTX(SPI_Type *base, dma_descriptor_t *desc, uint32_t count, uint32_t data_size, uint8_t src_incr, uint32_t data_width, void *src_addr)
Инициализация дескрипторов DMA для многоблочной передачи TX.
Definition hal_spi_dma.h:169
enum spi_status SPI_MasterTransferDMA(SPI_Type *base, spi_dma_handle_t *handle, spi_transfer_t *xfer)
Функция для SPI master приема/передачи данных в полнодуплексном режиме через DMA каналы в порт SPI.
static enum spi_status SPI_SlaveTransferDMA(SPI_Type *base, spi_dma_handle_t *handle, spi_transfer_t *xfer)
Функция для SPI slave приема/передачи данных в полнодуплексном режиме через DMA каналы в порт SPI.
Definition hal_spi_dma.h:136
static enum spi_status SPI_SlaveTransferCreateHandleDMA(SPI_Type *base, spi_dma_callback_t callback, void *user_data, spi_dma_handle_t *handle, dma_handle_t *tx_handle, dma_handle_t *rx_handle)
Функция инициализации дескриптора SPI-DMA.
Definition hal_spi_dma.h:115
static void SPI_DMADescriptorInitRX(SPI_Type *base, dma_descriptor_t *desc, uint32_t count, uint32_t data_size, uint8_t dst_incr, uint32_t data_width, void *dst_addr)
Инициализация дескрипторов DMA для многоблочной передачи RX.
Definition hal_spi_dma.h:203
spi_status
Статусы возврата из функций для драйвера SPI.
Definition hal_spi.h:49
void SPI_MasterTransferAbortDMA(spi_dma_handle_t *handle)
Прекращение передачи SPI.
static void SPI_SlaveTransferAbortDMA(spi_dma_handle_t *handle)
Прекращение передачи SPI.
Definition hal_spi_dma.h:154
void(* spi_dma_callback_t)(SPI_Type *base, spi_dma_handle_t *handle, void *user_data, dma_irq_t inttype)
Функция обратного вызова
Definition hal_spi_dma.h:27
Интерфейс драйвера прямого доступа к памяти
Интерфейс драйвера модуля SPI.
Описатель следующего блока 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
Дескриптор SPI-DMA.
Definition hal_spi_dma.h:33
volatile bool tx_in_progress
Definition hal_spi_dma.h:34
dma_descriptor_t * rx_desc
Definition hal_spi_dma.h:39
size_t transfer_size
Definition hal_spi_dma.h:44
void * user_data
Definition hal_spi_dma.h:42
enum spi_trans_status state
Definition hal_spi_dma.h:43
dma_handle_t * rx_handle
Definition hal_spi_dma.h:38
void * dummy_data
Definition hal_spi_dma.h:45
dma_descriptor_t * tx_desc
Definition hal_spi_dma.h:37
volatile bool rx_in_progress
Definition hal_spi_dma.h:35
dma_handle_t * tx_handle
Definition hal_spi_dma.h:36
spi_dma_callback_t callback
Definition hal_spi_dma.h:41
uint8_t bytes_per_frame
Definition hal_spi_dma.h:40
Структура SPI для полудуплексной приемо-передачи в режиме Master.
Definition hal_spi.h:386
Структура SPI для приемо-передачи
Definition hal_spi.h:377