ELIOT1 HAL
Загрузка...
Поиск...
Не найдено
hal_qspi_dma.h
См. документацию.
1
12#ifndef HAL_QSPI_DMA_H
13#define HAL_QSPI_DMA_H
14
15#include "hal_qspi.h"
16#include "hal_dma.h"
17
18#ifdef __cplusplus
19extern "C" {
20#endif
21
25typedef struct {
26 QSPI_Type *base;
27 dma_handle_t *tx_handle;
28 dma_handle_t *rx_handle;
29 void *dummy_data;
30 dma_descriptor_t *tx_desc;
31 dma_descriptor_t *rx_desc;
33
42
51void QSPI_TransferCreateHandleDMA(QSPI_Type *base, qspi_dma_handle_t *handle,
52 dma_handle_t *tx_handle, dma_handle_t *rx_handle);
53
68 uint8_t incr, uint8_t transfer_width, uint32_t size);
69
84 uint8_t incr, uint8_t transfer_width, uint32_t size);
85
94uint32_t QSPI_GetReadDMADescriptorsCount(uint32_t size_in_bytes);
95
106 uint32_t data_size, void *dst_addr, uint8_t dst_addr_incr);
107
117static inline uint32_t QSPI_GetDummyDMADescriptorsCount(uint32_t size_in_bytes)
118{
119 return DMA_GetDescriptorCount(size_in_bytes, DMA_Transfer8BitWidth);
120}
121
132static inline void QSPI_DMADescriptorInitTX(QSPI_Type *base, dma_descriptor_t *desc,
133 uint32_t count, uint32_t data_size, uint32_t data_width, void *src_addr, uint8_t src_addr_incr)
134{
135 dma_multiblock_config_t config = {
136 .count = count,
137 .data_size = data_size,
138 .transfer_type = DMA_MemoryToPeripheral_DMA,
139 .scatter_en = false,
140 .gather_en = false,
141 .src_burst_size = DMA_BurstSize32,
142 .dst_burst_size = DMA_BurstSize1,
143 .src_incr = src_addr_incr,
144 .dst_incr = DMA_NoChange,
145 .src_data_width = data_width,
146 .dst_data_width = data_width,
147 .src_addr = src_addr,
148 .dst_addr = (void *) &base->TX_DATA,
149 .int_en = true
150 };
151
152 DMA_InitMultiblockDescriptor(desc, &config);
153}
154
164static inline void QSPI_DMADescriptorInitRX(QSPI_Type *base, dma_descriptor_t *desc,
165 uint32_t count, uint32_t data_size, uint32_t data_width, void *dst_addr)
166{
167 dma_multiblock_config_t config = {
168 .count = count,
169 .data_size = data_size,
170 .transfer_type = DMA_PeripheralToMemory_DMA,
171 .scatter_en = false,
172 .gather_en = false,
173 .src_burst_size = DMA_BurstSize1,
174 .dst_burst_size = DMA_BurstSize32,
175 .src_incr = DMA_NoChange,
176 .dst_incr = DMA_Incr,
177 .src_data_width = data_width,
178 .dst_data_width = data_width,
179 .src_addr = (void *) &base->RX_DATA,
180 .dst_addr = dst_addr,
181 .int_en = true
182 };
183
184 DMA_InitMultiblockDescriptor(desc, &config);
185}
186
187#ifdef __cplusplus
188}
189#endif
190
191#endif /* HAL_QSPI_DMA_H */
192
void DMA_InitMultiblockDescriptor(dma_descriptor_t *desc, dma_multiblock_config_t *config)
Функция, инициализирующая DMA дескрипторы многоблочной передачи.
uint32_t DMA_GetDescriptorCount(uint32_t size_bytes, uint8_t transfer_width)
Расчёт количества дескрипторов многоблочной передачи
@ DMA_NoChange
Definition hal_dma.h:165
@ DMA_Incr
Definition hal_dma.h:163
@ 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 QSPI_DMAReadDescriptorInitRX(QSPI_Type *base, dma_descriptor_t *desc, uint32_t data_size, void *dst_addr, uint8_t dst_addr_incr)
Инициализация группы дескрипторов DMA (многоблочная передача) для приема данных в RX буфер.
uint32_t QSPI_GetReadDMADescriptorsCount(uint32_t size_in_bytes)
Расчет количества дескрипторов многоблочной передачи, нужных для считывания данных из NOR Flash памят...
static void QSPI_DMADescriptorInitRX(QSPI_Type *base, dma_descriptor_t *desc, uint32_t count, uint32_t data_size, uint32_t data_width, void *dst_addr)
Инициализация группы дескрипторов DMA (многоблочная передача) для приема данных в RX буфер.
Definition hal_qspi_dma.h:164
qspi_dma_status_t
Статусы выполнения функций
Definition hal_qspi_dma.h:37
static void QSPI_DMADescriptorInitTX(QSPI_Type *base, dma_descriptor_t *desc, uint32_t count, uint32_t data_size, uint32_t data_width, void *src_addr, uint8_t src_addr_incr)
Инициализация группы дескрипторов DMA (многоблочная передача) для отправки данных в TX буфер.
Definition hal_qspi_dma.h:132
void QSPI_TransferCreateHandleDMA(QSPI_Type *base, qspi_dma_handle_t *handle, dma_handle_t *tx_handle, dma_handle_t *rx_handle)
Инициализация контекста передачи QSPI-DMA.
qspi_dma_status_t QSPI_ReadDataDMA(qspi_dma_handle_t *handle, void *addr, uint8_t incr, uint8_t transfer_width, uint32_t size)
Чтение данных из QSPI RX.
static uint32_t QSPI_GetDummyDMADescriptorsCount(uint32_t size_in_bytes)
Расчет количества дескрипторов многоблочной передачи, нужных для считывания данных из NOR Flash памят...
Definition hal_qspi_dma.h:117
qspi_dma_status_t QSPI_WriteDataDMA(qspi_dma_handle_t *handle, void *addr, uint8_t incr, uint8_t transfer_width, uint32_t size)
Запись данных в QSPI TX.
@ QSPI_DMA_Status_InvalidArgument
Definition hal_qspi_dma.h:40
@ QSPI_DMA_Status_Fail
Definition hal_qspi_dma.h:39
@ QSPI_DMA_Status_Success
Definition hal_qspi_dma.h:38
Интерфейс драйвера прямого доступа к памяти
Интерфейс драйвера модуля QSPI.
Описатель следующего блока 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
Дескриптор QSPI-DMA передачи
Definition hal_qspi_dma.h:25