VSF Documented
dma.h
Go to the documentation of this file.
1/*****************************************************************************
2 * Copyright(C)2009-2022 by VSF Team *
3 * *
4 * Licensed under the Apache License, Version 2.0 (the "License"); *
5 * you may not use this file except in compliance with the License. *
6 * You may obtain a copy of the License at *
7 * *
8 * http://www.apache.org/licenses/LICENSE-2.0 *
9 * *
10 * Unless required by applicable law or agreed to in writing, software *
11 * distributed under the License is distributed on an "AS IS" BASIS, *
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
13 * See the License for the specific language governing permissions and *
14 * limitations under the License. *
15 * *
16 ****************************************************************************/
17
18#ifndef __HAL_DRIVER_ARTERY_AT32F402_405_DMA_H__
19#define __HAL_DRIVER_ARTERY_AT32F402_405_DMA_H__
20
21/*============================ INCLUDES ======================================*/
22
23#include "hal/vsf_hal_cfg.h"
24
25#if VSF_HAL_USE_DMA == ENABLED
26
27// HW/IPCore
32// HW/IPCore end
33
34/*\note Refer to template/README.md for usage cases.
35 * For peripheral drivers, blackbox mode is recommended but not required, reimplementation part MUST be open.
36 * For IPCore drivers, class structure, MULTI_CLASS configuration, reimplementation and class APIs should be open to user.
37 * For emulated drivers, **** No reimplementation ****.
38 */
39
40/*\note Includes CAN ONLY be put here. */
41/*\note If current header is for a peripheral driver(hw driver), and inherit from an IPCore driver, include IPCore header here. */
42
43#ifdef __cplusplus
44extern "C" {
45#endif
46
47/*============================ MACROS ========================================*/
48
49// HW
50/*\note hw DMA driver can reimplement following types:
51 * To enable reimplementation, please enable macro below:
52 * VSF_DMA_CFG_REIMPLEMENT_TYPE_ADDR for vsf_dma_addr_t
53 * VSF_DMA_CFG_REIMPLEMENT_TYPE_CHANNEL_MODE for vsf_dma_channel_mode_t
54 * VSF_DMA_CFG_REIMPLEMENT_TYPE_IRQ_MASK for vsf_dma_irq_mask_t
55 * VSF_DMA_CFG_REIMPLEMENT_TYPE_CHANNEL_HINT for vsf_dma_channel_hint_t
56 * VSF_DMA_CFG_REIMPLEMENT_TYPE_CHANNEL_CFG for vsf_dma_channel_cfg_t
57 * VSF_DMA_CFG_REIMPLEMENT_TYPE_CHANNEL_SG_CFG for vsf_dma_channel_sg_cfg_t
58 * VSF_DMA_CFG_REIMPLEMENT_TYPE_CHANNEL_STATUS for vsf_dma_channel_status_t
59 * VSF_DMA_CFG_REIMPLEMENT_TYPE_CFG for vsf_dma_cfg_t
60 * VSF_DMA_CFG_REIMPLEMENT_TYPE_CAPABILITY for vsf_dma_capability_t
61 * Reimplementation is used for optimization hw/IPCore drivers, reimplement the bit mask according to hw registers.
62 * *** DO NOT reimplement these in emulated drivers. ***
63 */
64
65// vsf_dma_addr_t: must be enabled if VSF_DMA_CFG_REIMPLEMENT_TYPE_CHANNEL_SG_CFG is enabled
66#define VSF_DMA_CFG_REIMPLEMENT_TYPE_ADDR ENABLED
67#define VSF_DMA_CFG_REIMPLEMENT_TYPE_CHANNEL_MODE ENABLED
68#define VSF_DMA_CFG_REIMPLEMENT_TYPE_IRQ_MASK ENABLED
69#define VSF_DMA_CFG_REIMPLEMENT_TYPE_CHANNEL_HINT ENABLED
70#define VSF_DMA_CFG_REIMPLEMENT_TYPE_CHANNEL_CFG ENABLED
71#define VSF_DMA_CFG_REIMPLEMENT_TYPE_CHANNEL_SG_CFG ENABLED
72#define VSF_DMA_CFG_REIMPLEMENT_TYPE_CHANNEL_STATUS ENABLED
73#define VSF_DMA_CFG_REIMPLEMENT_TYPE_CFG ENABLED
74#define VSF_DMA_CFG_REIMPLEMENT_TYPE_CAPABILITY ENABLED
75
76
77/*============================ MACROFIED FUNCTIONS ===========================*/
78/*============================ TYPES =========================================*/
79
80// HW/IPCore, not for emulated drivers
81#if VSF_DMA_CFG_REIMPLEMENT_TYPE_ADDR == ENABLED
83#endif
84
85#if VSF_DMA_CFG_REIMPLEMENT_TYPE_CHANNEL_MODE == ENABLED
87 // 4|14: DMA_CxCTRL.DTS(4) | DMA_CxCTRL.M2M(14)
88 VSF_DMA_MEMORY_TO_MEMORY = (1 << 14) | (0 << 4),
89 VSF_DMA_MEMORY_TO_PERIPHERAL = (0 << 14) | (1 << 4),
90 VSF_DMA_PERIPHERAL_TO_MEMORY = (0 << 14) | (0 << 4),
91
92 // VSF_DMA_SRC_XXX and VSF_DMA_DST_XXX will be switched, according to dma mode by driver software
93 // so VSF_DMA_SRC_XXX and VSF_DMA_DST_XXX are just place holder
94
95 // 6: DMA_CxCTRL.PINCM(6)
98 // 8..9: DMA_CxCTRL.PWIDTH(8..9)
102
103 // 7: DMA_CxCTRL.MIMCM(7)
106 // 10..11: DMA_CxCTRL.MWIDTH(10..11)
110
111 // 12..13: DMA_CxCTRL.CHPL(12..13)
112 VSF_DMA_PRIORITY_LOW = (0x00 << 12),
114 VSF_DMA_PRIORITY_HIGH = (0x02 << 12),
116
117 // 16..26: vendor specified
118
119 // 17: DMA_MUXCxCTRL.EVTGEN(9)
120 VSF_DMA_EVENT = (1 << 17),
121 // 24..26: DMA_MUXCxCTRL.SYNCEN(16) | DMA_MUXCxCTRL.SYNCPOL(17..18)
122 VSF_DMA_SYNC_RISING = (1 << 24) | (1 << 25),
123 VSF_DMA_SYNC_FALLING = (1 << 24) | (2 << 25),
124 VSF_DMA_SYNC_RISING_AND_FALLING = (1 << 24) | (3 << 25),
125
126
127
128 // NOT SUPPORTED
132
136
140
149
158
159 /*\note DMA_CxCTRL register: control register mask for configuration bits (bits [14:4], excluding interrupt-related bits)
160 * This mask preserves configuration bits (DTS, PINCM, MIMCM, PWIDTH, MWIDTH, CHPL, M2M)
161 * while ensuring CHEN bit (bit 0) is cleared
162 * Note: Interrupt-related bits (bits 1-3, 5) are not included as they are not configured here
163 * Reference: RM_AT32F402_405_CH_V2.02 Section 9.5.3
164 */
183#endif
184
185#if VSF_DMA_CFG_REIMPLEMENT_TYPE_IRQ_MASK == ENABLED
186typedef enum vsf_dma_irq_mask_t {
187 // 1: DMA_STS.FDTFx
189 // 2: DMA_STS.HDTFx
191 // 3: DMA_STS.DTERRFx
194#endif
195
196#if VSF_DMA_CFG_REIMPLEMENT_TYPE_CHANNEL_HINT == ENABLED
202#endif
203
204#if VSF_DMA_CFG_REIMPLEMENT_TYPE_CHANNEL_CFG == ENABLED
205typedef struct vsf_dma_t vsf_dma_t;
206typedef void vsf_dma_isr_handler_t(void *target_ptr, vsf_dma_t *dma_ptr, int8_t channel, vsf_dma_irq_mask_t irq_mask);
207typedef struct vsf_dma_isr_t {
211typedef struct vsf_dma_channel_cfg_t {
218
219 // vendor
220 // DMA_MUXCxCTRL.REQCNT(19..23)
222 // DMA_MUXCxCTRL.SYNCSEL(24..28)
225#endif
226
227#if VSF_DMA_CFG_REIMPLEMENT_TYPE_CHANNEL_STATUS == ENABLED
229 union {
231 struct {
232 uint32_t is_busy : 1;
233 };
234 };
236#endif
237
238#if VSF_DMA_CFG_REIMPLEMENT_TYPE_CHANNEL_SG_CFG == ENABLED
246#endif
247
248#if VSF_DMA_CFG_REIMPLEMENT_TYPE_CFG == ENABLED
249typedef struct vsf_dma_cfg_t {
252#endif
253
254#if VSF_DMA_CFG_REIMPLEMENT_TYPE_CAPABILITY == ENABLED
255typedef struct vsf_dma_capability_t {
256#if VSF_DMA_CFG_INHERIT_HAL_CAPABILITY == ENABLED
258#endif
267#endif
268
269// HW/IPCore end
270
271/*============================ INCLUDES ======================================*/
272
273#ifdef __cplusplus
274}
275#endif
276
277#endif // VSF_HAL_USE_DMA
278#endif // __HAL_DRIVER_ARTERY_AT32F402_405_DMA_H__
279/* EOF */
vsf_dma_channel_mode_t
Definition dma.h:86
@ VSF_DMA_PRIORITY_MEDIUM
Definition dma.h:113
@ VSF_DMA_DST_WIDTH_BYTES_32
Definition dma.h:139
@ VSF_DMA_SRC_BURST_LENGTH_64
Definition dma.h:147
@ VSF_DMA_SYNC_FALLING
Definition dma.h:123
@ VSF_DMA_DST_BURST_LENGTH_64
Definition dma.h:156
@ VSF_DMA_SRC_WIDTH_BYTES_8
Definition dma.h:133
@ VSF_DMA_SRC_WIDTH_BYTES_2
Definition dma.h:100
@ VSF_HW_DMA_CTRL_CONFIG_MASK
Definition dma.h:165
@ VSF_DMA_DST_WIDTH_BYTES_16
Definition dma.h:138
@ VSF_DMA_SRC_BURST_LENGTH_16
Definition dma.h:145
@ VSF_DMA_DST_BURST_LENGTH_128
Definition dma.h:157
@ VSF_DMA_DST_WIDTH_BYTE_1
Definition dma.h:107
@ VSF_DMA_PRIORITY_HIGH
Definition dma.h:114
@ VSF_DMA_SRC_WIDTH_BYTES_16
Definition dma.h:134
@ VSF_DMA_DST_ADDR_NO_CHANGE
Definition dma.h:105
@ VSF_DMA_DST_BURST_LENGTH_4
Definition dma.h:152
@ VSF_DMA_DST_BURST_LENGTH_1
Definition dma.h:150
@ VSF_DMA_SRC_ADDR_INCREMENT
Definition dma.h:96
@ VSF_DMA_MEMORY_TO_PERIPHERAL
Definition dma.h:89
@ VSF_DMA_DST_BURST_LENGTH_32
Definition dma.h:155
@ VSF_DMA_SRC_BURST_LENGTH_4
Definition dma.h:143
@ VSF_DMA_SRC_BURST_LENGTH_128
Definition dma.h:148
@ VSF_DMA_SRC_WIDTH_BYTE_1
Definition dma.h:99
@ VSF_DMA_MEMORY_TO_MEMORY
Definition dma.h:88
@ VSF_DMA_PRIORITY_LOW
Definition dma.h:112
@ VSF_DMA_SRC_WIDTH_BYTES_4
Definition dma.h:101
@ VSF_DMA_DST_WIDTH_BYTES_8
Definition dma.h:137
@ VSF_DMA_SRC_BURST_LENGTH_1
Definition dma.h:141
@ VSF_DMA_DST_WIDTH_BYTES_2
Definition dma.h:108
@ VSF_DMA_SYNC_RISING_AND_FALLING
Definition dma.h:124
@ VSF_DMA_DST_WIDTH_BYTES_4
Definition dma.h:109
@ VSF_DMA_SRC_BURST_LENGTH_2
Definition dma.h:142
@ VSF_DMA_SRC_ADDR_DECREMENT
Definition dma.h:130
@ VSF_DMA_DST_BURST_LENGTH_8
Definition dma.h:153
@ VSF_DMA_EVENT
Definition dma.h:120
@ VSF_DMA_SRC_ADDR_NO_CHANGE
Definition dma.h:97
@ VSF_DMA_DST_BURST_LENGTH_16
Definition dma.h:154
@ VSF_DMA_SRC_BURST_LENGTH_8
Definition dma.h:144
@ VSF_DMA_DST_BURST_LENGTH_2
Definition dma.h:151
@ VSF_DMA_SRC_WIDTH_BYTES_32
Definition dma.h:135
@ VSF_DMA_SYNC_RISING
Definition dma.h:122
@ VSF_DMA_PRIORITY_VERY_HIGH
Definition dma.h:115
@ VSF_DMA_SRC_BURST_LENGTH_32
Definition dma.h:146
@ VSF_DMA_DST_ADDR_DECREMENT
Definition dma.h:131
@ VSF_DMA_PERIPHERAL_TO_PERIPHERAL
Definition dma.h:129
@ VSF_DMA_PERIPHERAL_TO_MEMORY
Definition dma.h:90
@ VSF_DMA_DST_ADDR_INCREMENT
Definition dma.h:104
struct vsf_dma_isr_t vsf_dma_isr_t
void vsf_dma_isr_handler_t(void *target_ptr, vsf_dma_t *dma_ptr, int8_t channel, vsf_dma_irq_mask_t irq_mask)
Definition dma.h:206
struct vsf_dma_capability_t vsf_dma_capability_t
struct vsf_dma_channel_status_t vsf_dma_channel_status_t
struct vsf_dma_channel_sg_desc_t vsf_dma_channel_sg_desc_t
vsf_dma_irq_mask_t
Definition dma.h:186
@ VSF_DMA_IRQ_MASK_HALF_CPL
Definition dma.h:190
@ VSF_DMA_IRQ_MASK_CPL
Definition dma.h:188
@ VSF_DMA_IRQ_MASK_ERROR
Definition dma.h:192
uintptr_t vsf_dma_addr_t
Definition dma.h:82
struct vsf_dma_channel_cfg_t vsf_dma_channel_cfg_t
struct vsf_dma_channel_hint_t vsf_dma_channel_hint_t
struct vsf_dma_cfg_t vsf_dma_cfg_t
vsf_arch_prio_t
Definition cortex_a_generic.h:88
const i_spi_t vsf_spi_irq_mask_t irq_mask
Definition spi_interface.h:38
uint32_t uintptr_t
Definition stdint.h:38
unsigned uint32_t
Definition stdint.h:9
unsigned char uint8_t
Definition stdint.h:5
signed char int8_t
Definition stdint.h:4
DMA capability structure that can be reimplemented in specific HAL drivers.
Definition dma.h:255
uint8_t addr_alignment
Address alignment requirement in bytes (1 means no alignment required)
Definition dma.h:264
vsf_dma_channel_mode_t supported_modes
Definition dma.h:262
uint8_t channel_count
Number of DMA channels.
Definition dma.h:260
uint8_t support_scatter_gather
Support scatter-gather transfer.
Definition dma.h:265
uint8_t irq_count
Definition dma.h:261
uint32_t max_transfer_count
Maximum number of data items per transfer (0 means no limit)
Definition dma.h:263
inherit(vsf_peripheral_capability_t) vsf_dma_irq_mask_t irq_mask
Configuration structure for DMA.
Definition dma.h:249
vsf_arch_prio_t prio
Default interrupt priority for DMA channels.
Definition dma.h:250
dma configuration
Definition dma.h:211
uint8_t dst_request_idx
Definition dma.h:217
vsf_dma_channel_mode_t mode
Definition dma.h:212
uint8_t sync_signal
Definition dma.h:223
uint8_t sync_reqcnt
Definition dma.h:221
vsf_dma_irq_mask_t irq_mask
Definition dma.h:214
uint8_t src_request_idx
Definition dma.h:216
vsf_dma_isr_t isr
Definition dma.h:213
vsf_arch_prio_t prio
Definition dma.h:215
DMA channel hint structure for channel allocation.
Definition dma.h:197
int8_t channel
Definition dma.h:198
uint8_t request_line
Definition dma.h:199
vsf_arch_prio_t prio
Definition dma.h:200
DMA scatter-gather descriptor structure.
Definition dma.h:239
uint32_t count
Definition dma.h:243
vsf_dma_addr_t src_address
Source address.
Definition dma.h:241
vsf_dma_addr_t next
Definition dma.h:244
vsf_dma_channel_mode_t mode
DMA channel mode.
Definition dma.h:240
vsf_dma_addr_t dst_address
Destination address.
Definition dma.h:242
Definition dma.h:228
Definition dma.h:207
vsf_dma_isr_handler_t * handler_fn
Definition dma.h:208
void * target_ptr
Definition dma.h:209
Definition vsf_template_dma.h:906
Definition vsf_template_hal_driver.h:204
Definition vsf_template_hal_driver.h:197
vsf_dma_channel_mode_t
Definition dma.h:129
void vsf_dma_isr_handler_t(void *target_ptr, vsf_dma_t *dma_ptr, int8_t channel, vsf_dma_irq_mask_t irq_mask)
Definition dma.h:202
vsf_dma_irq_mask_t
Definition dma.h:183
uintptr_t vsf_dma_addr_t
Definition dma.h:125
Generated from commit: vsfteam/vsf@1e06613