1 /*!
2     \file    gd32l23x_dma.h
3     \brief   definitions for the DMA
4 
5     \version 2021-08-04, V1.0.0, firmware for GD32L23x
6 */
7 
8 /*
9     Copyright (c) 2021, GigaDevice Semiconductor Inc.
10 
11     Redistribution and use in source and binary forms, with or without modification,
12 are permitted provided that the following conditions are met:
13 
14     1. Redistributions of source code must retain the above copyright notice, this
15        list of conditions and the following disclaimer.
16     2. Redistributions in binary form must reproduce the above copyright notice,
17        this list of conditions and the following disclaimer in the documentation
18        and/or other materials provided with the distribution.
19     3. Neither the name of the copyright holder nor the names of its contributors
20        may be used to endorse or promote products derived from this software without
21        specific prior written permission.
22 
23     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
24 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
25 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
26 IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
27 INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
28 NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
29 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
30 WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
31 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
32 OF SUCH DAMAGE.
33 */
34 
35 #ifndef GD32L23X_DMA_H
36 #define GD32L23X_DMA_H
37 
38 #include "gd32l23x.h"
39 
40 /* DMA definitions */
41 #define DMA                               DMA_BASE                                                            /*!< DMA base address */
42 #define DMAMUX                            DMAMUX_BASE                                                         /*!< DMAMUX base address */
43 
44 /* registers definitions */
45 #define DMA_INTF                          REG32(DMA + 0x00000000U)                                            /*!< DMA interrupt flag register */
46 #define DMA_INTC                          REG32(DMA + 0x00000004U)                                            /*!< DMA interrupt flag clear register */
47 #define DMA_CH0CTL                        REG32(DMA + 0x00000008U)                                            /*!< DMA channel 0 control register */
48 #define DMA_CH0CNT                        REG32(DMA + 0x0000000CU)                                            /*!< DMA channel 0 counter register */
49 #define DMA_CH0PADDR                      REG32(DMA + 0x00000010U)                                            /*!< DMA channel 0 peripheral base address register */
50 #define DMA_CH0MADDR                      REG32(DMA + 0x00000014U)                                            /*!< DMA channel 0 memory base address register */
51 #define DMA_CH1CTL                        REG32(DMA + 0x0000001CU)                                            /*!< DMA channel 1 control register */
52 #define DMA_CH1CNT                        REG32(DMA + 0x00000020U)                                            /*!< DMA channel 1 counter register */
53 #define DMA_CH1PADDR                      REG32(DMA + 0x00000024U)                                            /*!< DMA channel 1 peripheral base address register */
54 #define DMA_CH1MADDR                      REG32(DMA + 0x00000028U)                                            /*!< DMA channel 1 memory base address register */
55 #define DMA_CH2CTL                        REG32(DMA + 0x00000030U)                                            /*!< DMA channel 2 control register */
56 #define DMA_CH2CNT                        REG32(DMA + 0x00000034U)                                            /*!< DMA channel 2 counter register */
57 #define DMA_CH2PADDR                      REG32(DMA + 0x00000038U)                                            /*!< DMA channel 2 peripheral base address register */
58 #define DMA_CH2MADDR                      REG32(DMA + 0x0000003CU)                                            /*!< DMA channel 2 memory base address register */
59 #define DMA_CH3CTL                        REG32(DMA + 0x00000044U)                                            /*!< DMA channel 3 control register */
60 #define DMA_CH3CNT                        REG32(DMA + 0x00000048U)                                            /*!< DMA channel 3 counter register */
61 #define DMA_CH3PADDR                      REG32(DMA + 0x0000004CU)                                            /*!< DMA channel 3 peripheral base address register */
62 #define DMA_CH3MADDR                      REG32(DMA + 0x00000050U)                                            /*!< DMA channel 3 memory base address register */
63 #define DMA_CH4CTL                        REG32(DMA + 0x00000058U)                                            /*!< DMA channel 4 control register */
64 #define DMA_CH4CNT                        REG32(DMA + 0x0000005CU)                                            /*!< DMA channel 4 counter register */
65 #define DMA_CH4PADDR                      REG32(DMA + 0x00000060U)                                            /*!< DMA channel 4 peripheral base address register */
66 #define DMA_CH4MADDR                      REG32(DMA + 0x00000064U)                                            /*!< DMA channel 4 memory base address register */
67 #define DMA_CH5CTL                        REG32(DMA + 0x0000006CU)                                            /*!< DMA channel 5 control register */
68 #define DMA_CH5CNT                        REG32(DMA + 0x00000070U)                                            /*!< DMA channel 5 counter register */
69 #define DMA_CH5PADDR                      REG32(DMA + 0x00000074U)                                            /*!< DMA channel 5 peripheral base address register */
70 #define DMA_CH5MADDR                      REG32(DMA + 0x00000078U)                                            /*!< DMA channel 5 memory base address register */
71 #define DMA_CH6CTL                        REG32(DMA + 0x00000080U)                                            /*!< DMA channel 6 control register */
72 #define DMA_CH6CNT                        REG32(DMA + 0x00000084U)                                            /*!< DMA channel 6 counter register */
73 #define DMA_CH6PADDR                      REG32(DMA + 0x00000088U)                                            /*!< DMA channel 6 peripheral base address register */
74 #define DMA_CH6MADDR                      REG32(DMA + 0x0000008CU)                                            /*!< DMA channel 6 memory base address register */
75 
76 #define DMAMUX_RM_CH0CFG                  REG32(DMAMUX + 0x00000000U)                                         /*!< DMAMUX request multiplexer channel 0 configuration register */
77 #define DMAMUX_RM_CH1CFG                  REG32(DMAMUX + 0x00000004U)                                         /*!< DMAMUX request multiplexer channel 1 configuration register */
78 #define DMAMUX_RM_CH2CFG                  REG32(DMAMUX + 0x00000008U)                                         /*!< DMAMUX request multiplexer channel 2 configuration register */
79 #define DMAMUX_RM_CH3CFG                  REG32(DMAMUX + 0x0000000CU)                                         /*!< DMAMUX request multiplexer channel 3 configuration register */
80 #define DMAMUX_RM_CH4CFG                  REG32(DMAMUX + 0x00000010U)                                         /*!< DMAMUX request multiplexer channel 4 configuration register */
81 #define DMAMUX_RM_CH5CFG                  REG32(DMAMUX + 0x00000014U)                                         /*!< DMAMUX request multiplexer channel 5 configuration register */
82 #define DMAMUX_RM_CH6CFG                  REG32(DMAMUX + 0x00000018U)                                         /*!< DMAMUX request multiplexer channel 6 configuration register */
83 #define DMAMUX_RM_INTF                    REG32(DMAMUX + 0x00000080U)                                         /*!< DMAMUX request multiplexer channel interrupt flag register */
84 #define DMAMUX_RM_INTC                    REG32(DMAMUX + 0x00000084U)                                         /*!< DMAMUX request multiplexer channel interrupt flag clear register */
85 #define DMAMUX_RG_CH0CFG                  REG32(DMAMUX + 0x00000100U)                                         /*!< DMAMUX generator channel 0 configuration register */
86 #define DMAMUX_RG_CH1CFG                  REG32(DMAMUX + 0x00000104U)                                         /*!< DMAMUX generator channel 1 configuration register */
87 #define DMAMUX_RG_CH2CFG                  REG32(DMAMUX + 0x00000108U)                                         /*!< DMAMUX generator channel 2 configuration register */
88 #define DMAMUX_RG_CH3CFG                  REG32(DMAMUX + 0x0000010CU)                                         /*!< DMAMUX generator channel 3 configuration register */
89 #define DMAMUX_RG_INTF                    REG32(DMAMUX + 0x00000140U)                                         /*!< DMAMUX generator channel interrupt flag register */
90 #define DMAMUX_RG_INTC                    REG32(DMAMUX + 0x00000144U)                                         /*!< DMAMUX rgenerator channel interrupt flag clear register */
91 
92 /* bits definitions */
93 /* DMA_INTF */
94 #define DMA_INTF_GIF                      BIT(0)                                                              /*!< global interrupt flag of channel */
95 #define DMA_INTF_FTFIF                    BIT(1)                                                              /*!< full transfer finish flag of channel */
96 #define DMA_INTF_HTFIF                    BIT(2)                                                              /*!< half transfer finish flag of channel */
97 #define DMA_INTF_ERRIF                    BIT(3)                                                              /*!< error flag of channel */
98 
99 /* DMA_INTC */
100 #define DMA_INTC_GIFC                     BIT(0)                                                              /*!< clear global interrupt flag of channel */
101 #define DMA_INTC_FTFIFC                   BIT(1)                                                              /*!< clear transfer finish flag of channel */
102 #define DMA_INTC_HTFIFC                   BIT(2)                                                              /*!< clear half transfer finish flag of channel */
103 #define DMA_INTC_ERRIFC                   BIT(3)                                                              /*!< clear error flag of channel */
104 
105 /* DMA_CHxCTL, x=0..6 */
106 #define DMA_CHXCTL_CHEN                   BIT(0)                                                              /*!< channel x enable */
107 #define DMA_CHXCTL_FTFIE                  BIT(1)                                                              /*!< enable bit for channel x transfer complete interrupt */
108 #define DMA_CHXCTL_HTFIE                  BIT(2)                                                              /*!< enable bit for channel x transfer half complete interrupt */
109 #define DMA_CHXCTL_ERRIE                  BIT(3)                                                              /*!< enable bit for channel x error interrupt */
110 #define DMA_CHXCTL_DIR                    BIT(4)                                                              /*!< direction of the data transfer on the channel */
111 #define DMA_CHXCTL_CMEN                   BIT(5)                                                              /*!< circulation mode */
112 #define DMA_CHXCTL_PNAGA                  BIT(6)                                                              /*!< next address generation algorithm of peripheral */
113 #define DMA_CHXCTL_MNAGA                  BIT(7)                                                              /*!< next address generation algorithm of memory */
114 #define DMA_CHXCTL_PWIDTH                 BITS(8,9)                                                           /*!< transfer data size of peripheral */
115 #define DMA_CHXCTL_MWIDTH                 BITS(10,11)                                                         /*!< transfer data size of memory */
116 #define DMA_CHXCTL_PRIO                   BITS(12,13)                                                         /*!< priority level of channelx */
117 #define DMA_CHXCTL_M2M                    BIT(14)                                                             /*!< memory to memory mode */
118 
119 /* DMA_CHxCNT, x=0..6 */
120 #define DMA_CHXCNT_CNT                    BITS(0,15)                                                          /*!< transfer counter */
121 
122 /* DMA_CHxPADDR, x=0..6 */
123 #define DMA_CHXPADDR_PADDR                BITS(0,31)                                                          /*!< peripheral base address */
124 
125 /* DMA_CHxMADDR, x=0..6 */
126 #define DMA_CHXMADDR_MADDR                BITS(0,31)                                                          /*!< memory base address */
127 
128 /* DMAMUX_RM_CHxCFG, x=0..6 */
129 #define DMAMUX_RM_CHXCFG_MUXID            BITS(0,5)                                                           /*!< multiplexer input identification */
130 #define DMAMUX_RM_CHXCFG_SOIE             BIT(8)                                                              /*!< synchronization overrun interrupt enable */
131 #define DMAMUX_RM_CHXCFG_EVGEN            BIT(9)                                                              /*!< event generation enable */
132 #define DMAMUX_RM_CHXCFG_SYNCEN           BIT(16)                                                             /*!< synchronization enable */
133 #define DMAMUX_RM_CHXCFG_SYNCP            BITS(17,18)                                                         /*!< synchronization input polarity */
134 #define DMAMUX_RM_CHXCFG_NBR              BITS(19,23)                                                         /*!< number of DMA requests to forward */
135 #define DMAMUX_RM_CHXCFG_SYNCID           BITS(24,28)                                                         /*!< synchronization input identification */
136 
137 /* DMAMUX_RM_INTF */
138 #define DMAMUX_RM_INTF_SOIF0              BIT(0)                                                              /*!< synchronization overrun event flag of request multiplexer channel 0 */
139 #define DMAMUX_RM_INTF_SOIF1              BIT(1)                                                              /*!< synchronization overrun event flag of request multiplexer channel 1 */
140 #define DMAMUX_RM_INTF_SOIF2              BIT(2)                                                              /*!< synchronization overrun event flag of request multiplexer channel 2 */
141 #define DMAMUX_RM_INTF_SOIF3              BIT(3)                                                              /*!< synchronization overrun event flag of request multiplexer channel 3 */
142 #define DMAMUX_RM_INTF_SOIF4              BIT(4)                                                              /*!< synchronization overrun event flag of request multiplexer channel 4 */
143 #define DMAMUX_RM_INTF_SOIF5              BIT(5)                                                              /*!< synchronization overrun event flag of request multiplexer channel 5 */
144 #define DMAMUX_RM_INTF_SOIF6              BIT(6)                                                              /*!< synchronization overrun event flag of request multiplexer channel 6 */
145 
146 /* DMAMUX_RM_INTC */
147 #define DMAMUX_RM_INTF_SOIFC0             BIT(0)                                                              /*!< clear bit for synchronization overrun event flag of request multiplexer channel 0 */
148 #define DMAMUX_RM_INTF_SOIFC1             BIT(1)                                                              /*!< clear bit for synchronization overrun event flag of request multiplexer channel 1 */
149 #define DMAMUX_RM_INTF_SOIFC2             BIT(2)                                                              /*!< clear bit for synchronization overrun event flag of request multiplexer channel 2 */
150 #define DMAMUX_RM_INTF_SOIFC3             BIT(3)                                                              /*!< clear bit for synchronization overrun event flag of request multiplexer channel 3 */
151 #define DMAMUX_RM_INTF_SOIFC4             BIT(4)                                                              /*!< clear bit for synchronization overrun event flag of request multiplexer channel 4 */
152 #define DMAMUX_RM_INTF_SOIFC5             BIT(5)                                                              /*!< clear bit for synchronization overrun event flag of request multiplexer channel 5 */
153 #define DMAMUX_RM_INTF_SOIFC6             BIT(6)                                                              /*!< clear bit for synchronization overrun event flag of request multiplexer channel 6 */
154 
155 /* DMAMUX_RG_CHxCFG, x=0..3 */
156 #define DMAMUX_RG_CHXCFG_TID              BITS(0,4)                                                           /*!< trigger input identification */
157 #define DMAMUX_RG_CHXCFG_TOIE             BIT(8)                                                              /*!< trigger overrun interrupt enable */
158 #define DMAMUX_RG_CHXCFG_RGEN             BIT(16)                                                             /*!< DMA request generator channel x enable */
159 #define DMAMUX_RG_CHXCFG_RGTP             BITS(17,18)                                                         /*!< DMA request generator trigger polarity */
160 #define DMAMUX_RG_CHXCFG_NBRG             BITS(19,23)                                                         /*!< number of DMA requests to be generated */
161 
162 /* DMAMUX_RG_INTF */
163 #define DMAMUX_RG_INTF_TOIF0              BIT(0)                                                              /*!< trigger overrun event flag of request generator channel 0 */
164 #define DMAMUX_RG_INTF_TOIF1              BIT(1)                                                              /*!< trigger overrun event flag of request generator channel 1 */
165 #define DMAMUX_RG_INTF_TOIF2              BIT(2)                                                              /*!< trigger overrun event flag of request generator channel 2 */
166 #define DMAMUX_RG_INTF_TOIF3              BIT(3)                                                              /*!< trigger overrun event flag of request generator channel 3 */
167 
168 /* DMAMUX_RG_INTC */
169 #define DMAMUX_RG_INTF_TOIFC0             BIT(0)                                                              /*!< clear bit for trigger overrun event flag of request generator channel 0 */
170 #define DMAMUX_RG_INTF_TOIFC1             BIT(1)                                                              /*!< clear bit for trigger overrun event flag of request generator channel 1 */
171 #define DMAMUX_RG_INTF_TOIFC2             BIT(2)                                                              /*!< clear bit for trigger overrun event flag of request generator channel 2 */
172 #define DMAMUX_RG_INTF_TOIFC3             BIT(3)                                                              /*!< clear bit for trigger overrun event flag of request generator channel 3 */
173 
174 /* constants definitions */
175 /* define the DMAMUX bit position and its register index offset */
176 #define DMAMUX_REGIDX_BIT(regidx, bitpos) (((uint32_t)(regidx) << 6) | (uint32_t)(bitpos))
177 #define DMAMUX_REG_VAL(offset)            (REG32(DMAMUX + (((uint32_t)(offset) & 0x0000FFFFU) >> 6)))
178 #define DMAMUX_BIT_POS(val)               ((uint32_t)(val) & 0x1FU)
179 #define DMAMUX_REGIDX_BIT2(regidx, bitpos, regidx2, bitpos2)   (((uint32_t)(regidx2) << 22) | (uint32_t)((bitpos2) << 16) \
180         | (((uint32_t)(regidx) << 6) | (uint32_t)(bitpos)))
181 #define DMAMUX_REG_VAL2(offset)            (REG32(DMAMUX + ((uint32_t)(offset) >> 22)))
182 #define DMAMUX_BIT_POS2(val)               (((uint32_t)(val) & 0x001F0000U) >> 16)
183 #define DMAMUX_REG_VAL3(offset)            (REG32(DMAMUX + (((uint32_t)(offset) & 0x0000FFFFU) >> 6) + 0x4U))
184 
185 /* register offset */
186 #define DMAMUX_RM_CH0CFG_REG_OFFSET       0x00000000U                                                         /*!< DMAMUX_RM_CH0CFG register offset */
187 #define DMAMUX_RM_CH1CFG_REG_OFFSET       0x00000004U                                                         /*!< DMAMUX_RM_CH1CFG register offset */
188 #define DMAMUX_RM_CH2CFG_REG_OFFSET       0x00000008U                                                         /*!< DMAMUX_RM_CH2CFG register offset */
189 #define DMAMUX_RM_CH3CFG_REG_OFFSET       0x0000000CU                                                         /*!< DMAMUX_RM_CH3CFG register offset */
190 #define DMAMUX_RM_CH4CFG_REG_OFFSET       0x00000010U                                                         /*!< DMAMUX_RM_CH4CFG register offset */
191 #define DMAMUX_RM_CH5CFG_REG_OFFSET       0x00000014U                                                         /*!< DMAMUX_RM_CH5CFG register offset */
192 #define DMAMUX_RM_CH6CFG_REG_OFFSET       0x00000018U                                                         /*!< DMAMUX_RM_CH6CFG register offset */
193 #define DMAMUX_RG_CH0CFG_REG_OFFSET       0x00000100U                                                         /*!< DMAMUX_RG_CH0CFG register offset */
194 #define DMAMUX_RG_CH1CFG_REG_OFFSET       0x00000104U                                                         /*!< DMAMUX_RG_CH1CFG register offset */
195 #define DMAMUX_RG_CH2CFG_REG_OFFSET       0x00000108U                                                         /*!< DMAMUX_RG_CH2CFG register offset */
196 #define DMAMUX_RG_CH3CFG_REG_OFFSET       0x0000010CU                                                         /*!< DMAMUX_RG_CH3CFG register offset */
197 #define DMAMUX_RM_INTF_REG_OFFSET         0x00000080U                                                         /*!< DMAMUX_RM_INTF register offset */
198 #define DMAMUX_RG_INTF_REG_OFFSET         0x00000140U                                                         /*!< DMAMUX_RG_INTF register offset */
199 
200 /* DMAMUX interrupt enable or disable */
201 typedef enum {
202     /* interrupts in CHxCFG register */
203     DMAMUX_INT_MUXCH0_SO = DMAMUX_REGIDX_BIT(DMAMUX_RM_CH0CFG_REG_OFFSET, 8U),                                /*!< DMAMUX request multiplexer channel 0 synchronization overrun interrupt */
204     DMAMUX_INT_MUXCH1_SO = DMAMUX_REGIDX_BIT(DMAMUX_RM_CH1CFG_REG_OFFSET, 8U),                                /*!< DMAMUX request multiplexer channel 1 synchronization overrun interrupt */
205     DMAMUX_INT_MUXCH2_SO = DMAMUX_REGIDX_BIT(DMAMUX_RM_CH2CFG_REG_OFFSET, 8U),                                /*!< DMAMUX request multiplexer channel 2 synchronization overrun interrupt */
206     DMAMUX_INT_MUXCH3_SO = DMAMUX_REGIDX_BIT(DMAMUX_RM_CH3CFG_REG_OFFSET, 8U),                                /*!< DMAMUX request multiplexer channel 3 synchronization overrun interrupt */
207     DMAMUX_INT_MUXCH4_SO = DMAMUX_REGIDX_BIT(DMAMUX_RM_CH4CFG_REG_OFFSET, 8U),                                /*!< DMAMUX request multiplexer channel 4 synchronization overrun interrupt */
208     DMAMUX_INT_MUXCH5_SO = DMAMUX_REGIDX_BIT(DMAMUX_RM_CH5CFG_REG_OFFSET, 8U),                                /*!< DMAMUX request multiplexer channel 5 synchronization overrun interrupt */
209     DMAMUX_INT_MUXCH6_SO = DMAMUX_REGIDX_BIT(DMAMUX_RM_CH6CFG_REG_OFFSET, 8U),                                /*!< DMAMUX request multiplexer channel 6 synchronization overrun interrupt */
210     DMAMUX_INT_GENCH0_TO = DMAMUX_REGIDX_BIT(DMAMUX_RG_CH0CFG_REG_OFFSET, 8U),                                /*!< DMAMUX request generator channel 0 trigger overrun interrupt */
211     DMAMUX_INT_GENCH1_TO = DMAMUX_REGIDX_BIT(DMAMUX_RG_CH1CFG_REG_OFFSET, 8U),                                /*!< DMAMUX request generator channel 1 trigger overrun interrupt */
212     DMAMUX_INT_GENCH2_TO = DMAMUX_REGIDX_BIT(DMAMUX_RG_CH2CFG_REG_OFFSET, 8U),                                /*!< DMAMUX request generator channel 2 trigger overrun interrupt */
213     DMAMUX_INT_GENCH3_TO = DMAMUX_REGIDX_BIT(DMAMUX_RG_CH3CFG_REG_OFFSET, 8U),                                /*!< DMAMUX request generator channel 3 trigger overrun interrupt */
214 } dmamux_interrupt_enum;
215 
216 /* DMAMUX flags */
217 typedef enum {
218     /* flags in INTF register */
219     DMAMUX_FLAG_MUXCH0_SO = DMAMUX_REGIDX_BIT(DMAMUX_RM_INTF_REG_OFFSET, 0U),                                 /*!< DMAMUX request multiplexer channel 0 synchronization overrun flag */
220     DMAMUX_FLAG_MUXCH1_SO = DMAMUX_REGIDX_BIT(DMAMUX_RM_INTF_REG_OFFSET, 1U),                                 /*!< DMAMUX request multiplexer channel 1 synchronization overrun flag */
221     DMAMUX_FLAG_MUXCH2_SO = DMAMUX_REGIDX_BIT(DMAMUX_RM_INTF_REG_OFFSET, 2U),                                 /*!< DMAMUX request multiplexer channel 2 synchronization overrun flag */
222     DMAMUX_FLAG_MUXCH3_SO = DMAMUX_REGIDX_BIT(DMAMUX_RM_INTF_REG_OFFSET, 3U),                                 /*!< DMAMUX request multiplexer channel 3 synchronization overrun flag */
223     DMAMUX_FLAG_MUXCH4_SO = DMAMUX_REGIDX_BIT(DMAMUX_RM_INTF_REG_OFFSET, 4U),                                 /*!< DMAMUX request multiplexer channel 4 synchronization overrun flag */
224     DMAMUX_FLAG_MUXCH5_SO = DMAMUX_REGIDX_BIT(DMAMUX_RM_INTF_REG_OFFSET, 5U),                                 /*!< DMAMUX request multiplexer channel 5 synchronization overrun flag */
225     DMAMUX_FLAG_MUXCH6_SO = DMAMUX_REGIDX_BIT(DMAMUX_RM_INTF_REG_OFFSET, 6U),                                 /*!< DMAMUX request multiplexer channel 6 synchronization overrun flag */
226     DMAMUX_FLAG_GENCH0_TO = DMAMUX_REGIDX_BIT(DMAMUX_RG_INTF_REG_OFFSET, 0U),                                 /*!< DMAMUX request generator channel 0 trigger overrun flag */
227     DMAMUX_FLAG_GENCH1_TO = DMAMUX_REGIDX_BIT(DMAMUX_RG_INTF_REG_OFFSET, 1U),                                 /*!< DMAMUX request generator channel 1 trigger overrun flag */
228     DMAMUX_FLAG_GENCH2_TO = DMAMUX_REGIDX_BIT(DMAMUX_RG_INTF_REG_OFFSET, 2U),                                 /*!< DMAMUX request generator channel 2 trigger overrun flag */
229     DMAMUX_FLAG_GENCH3_TO = DMAMUX_REGIDX_BIT(DMAMUX_RG_INTF_REG_OFFSET, 3U),                                 /*!< DMAMUX request generator channel 3 trigger overrun flag */
230 } dmamux_flag_enum;
231 
232 /* DMAMUX interrupt flags */
233 typedef enum {
234     /* interrupt flags in INTF register */
235     DMAMUX_INT_FLAG_MUXCH0_SO = DMAMUX_REGIDX_BIT2(DMAMUX_RM_INTF_REG_OFFSET, 0U, DMAMUX_RM_CH0CFG_REG_OFFSET, 8U), /*!< DMAMUX request multiplexer channel 0 synchronization overrun interrupt flag */
236     DMAMUX_INT_FLAG_MUXCH1_SO = DMAMUX_REGIDX_BIT2(DMAMUX_RM_INTF_REG_OFFSET, 1U, DMAMUX_RM_CH1CFG_REG_OFFSET, 8U), /*!< DMAMUX request multiplexer channel 1 synchronization overrun interrupt flag */
237     DMAMUX_INT_FLAG_MUXCH2_SO = DMAMUX_REGIDX_BIT2(DMAMUX_RM_INTF_REG_OFFSET, 2U, DMAMUX_RM_CH2CFG_REG_OFFSET, 8U), /*!< DMAMUX request multiplexer channel 2 synchronization overrun interrupt flag */
238     DMAMUX_INT_FLAG_MUXCH3_SO = DMAMUX_REGIDX_BIT2(DMAMUX_RM_INTF_REG_OFFSET, 3U, DMAMUX_RM_CH3CFG_REG_OFFSET, 8U), /*!< DMAMUX request multiplexer channel 3 synchronization overrun interrupt flag */
239     DMAMUX_INT_FLAG_MUXCH4_SO = DMAMUX_REGIDX_BIT2(DMAMUX_RM_INTF_REG_OFFSET, 4U, DMAMUX_RM_CH4CFG_REG_OFFSET, 8U), /*!< DMAMUX request multiplexer channel 4 synchronization overrun interrupt flag */
240     DMAMUX_INT_FLAG_MUXCH5_SO = DMAMUX_REGIDX_BIT2(DMAMUX_RM_INTF_REG_OFFSET, 5U, DMAMUX_RM_CH5CFG_REG_OFFSET, 8U), /*!< DMAMUX request multiplexer channel 5 synchronization overrun interrupt flag */
241     DMAMUX_INT_FLAG_MUXCH6_SO = DMAMUX_REGIDX_BIT2(DMAMUX_RM_INTF_REG_OFFSET, 6U, DMAMUX_RM_CH6CFG_REG_OFFSET, 8U), /*!< DMAMUX request multiplexer channel 6 synchronization overrun interrupt flag */
242     DMAMUX_INT_FLAG_GENCH0_TO = DMAMUX_REGIDX_BIT2(DMAMUX_RG_INTF_REG_OFFSET, 0U, DMAMUX_RG_CH0CFG_REG_OFFSET, 8U), /*!< DMAMUX request generator channel 0 trigger overrun interrupt flag */
243     DMAMUX_INT_FLAG_GENCH1_TO = DMAMUX_REGIDX_BIT2(DMAMUX_RG_INTF_REG_OFFSET, 1U, DMAMUX_RG_CH1CFG_REG_OFFSET, 8U), /*!< DMAMUX request generator channel 1 trigger overrun interrupt flag */
244     DMAMUX_INT_FLAG_GENCH2_TO = DMAMUX_REGIDX_BIT2(DMAMUX_RG_INTF_REG_OFFSET, 2U, DMAMUX_RG_CH2CFG_REG_OFFSET, 8U), /*!< DMAMUX request generator channel 2 trigger overrun interrupt flag */
245     DMAMUX_INT_FLAG_GENCH3_TO = DMAMUX_REGIDX_BIT2(DMAMUX_RG_INTF_REG_OFFSET, 3U, DMAMUX_RG_CH3CFG_REG_OFFSET, 8U), /*!< DMAMUX request generator channel 3 trigger overrun interrupt flag */
246 } dmamux_interrupt_flag_enum;
247 
248 /* DMA channel selection */
249 typedef enum {
250     DMA_CH0 = 0U,                                                                                             /*!< DMA Channel 0 */
251     DMA_CH1,                                                                                                  /*!< DMA Channel 1 */
252     DMA_CH2,                                                                                                  /*!< DMA Channel 2 */
253     DMA_CH3,                                                                                                  /*!< DMA Channel 3 */
254     DMA_CH4,                                                                                                  /*!< DMA Channel 4 */
255     DMA_CH5,                                                                                                  /*!< DMA Channel 5 */
256     DMA_CH6,                                                                                                  /*!< DMA Channel 6 */
257 } dma_channel_enum;
258 
259 /* DMAMUX request multiplexer channel */
260 typedef enum {
261     DMAMUX_MUXCH0 = 0U,                                                                                       /*!< DMAMUX request multiplexer Channel0 */
262     DMAMUX_MUXCH1,                                                                                            /*!< DMAMUX request multiplexer Channel1 */
263     DMAMUX_MUXCH2,                                                                                            /*!< DMAMUX request multiplexer Channel2 */
264     DMAMUX_MUXCH3,                                                                                            /*!< DMAMUX request multiplexer Channel3 */
265     DMAMUX_MUXCH4,                                                                                            /*!< DMAMUX request multiplexer Channel4 */
266     DMAMUX_MUXCH5,                                                                                            /*!< DMAMUX request multiplexer Channel5 */
267     DMAMUX_MUXCH6,                                                                                            /*!< DMAMUX request multiplexer Channel6 */
268 } dmamux_multiplexer_channel_enum;
269 
270 /* DMAMUX request generator channel */
271 typedef enum {
272     DMAMUX_GENCH0 = 0U,                                                                                       /*!< DMAMUX request generator Channel0 */
273     DMAMUX_GENCH1,                                                                                            /*!< DMAMUX request generator Channel1 */
274     DMAMUX_GENCH2,                                                                                            /*!< DMAMUX request generator Channel2 */
275     DMAMUX_GENCH3,                                                                                            /*!< DMAMUX request generator Channel3 */
276 } dmamux_generator_channel_enum;
277 
278 /* DMA initialization structure */
279 typedef struct {
280     uint32_t periph_addr;                                                                                     /*!< peripheral base address */
281     uint32_t periph_width;                                                                                    /*!< transfer data size of peripheral */
282     uint32_t memory_addr;                                                                                     /*!< memory base address */
283     uint32_t memory_width;                                                                                    /*!< transfer data size of memory */
284     uint32_t number;                                                                                          /*!< channel transfer number */
285     uint32_t priority;                                                                                        /*!< channel priority level */
286     uint8_t periph_inc;                                                                                       /*!< peripheral increasing mode */
287     uint8_t memory_inc;                                                                                       /*!< memory increasing mode */
288     uint8_t direction;                                                                                        /*!< channel data transfer direction */
289     uint32_t request;                                                                                         /*!< channel input identification */
290 } dma_parameter_struct;
291 
292 /* DMAMUX request multiplexer synchronization configuration structure */
293 typedef struct {
294     uint32_t sync_id;                                                                                         /*!< synchronization input identification */
295     uint32_t sync_polarity;                                                                                   /*!< synchronization input polarity */
296     uint32_t request_number;                                                                                  /*!< number of DMA requests to forward */
297 } dmamux_sync_parameter_struct;
298 
299 /* DMAMUX request generator trigger configuration structure */
300 typedef struct {
301     uint32_t trigger_id;                                                                                      /*!< trigger input identification */
302     uint32_t trigger_polarity;                                                                                /*!< DMAMUX request generator trigger polarity */
303     uint32_t request_number;                                                                                  /*!< number of DMA requests to be generated */
304 } dmamux_gen_parameter_struct;
305 
306 /* DMA reset value */
307 #define DMA_CHCTL_RESET_VALUE             ((uint32_t)0x00000000U)                                             /*!< the reset value of DMA channel CHXCTL register */
308 #define DMA_CHCNT_RESET_VALUE             ((uint32_t)0x00000000U)                                             /*!< the reset value of DMA channel CHXCNT register */
309 #define DMA_CHPADDR_RESET_VALUE           ((uint32_t)0x00000000U)                                             /*!< the reset value of DMA channel CHXPADDR register */
310 #define DMA_CHMADDR_RESET_VALUE           ((uint32_t)0x00000000U)                                             /*!< the reset value of DMA channel CHXMADDR register */
311 #define DMA_CHINTF_RESET_VALUE            (DMA_INTF_GIF | DMA_INTF_FTFIF | \
312         DMA_INTF_HTFIF | DMA_INTF_ERRIF)                                   /*!< clear DMA channel DMA_INTF register */
313 
314 #define DMA_FLAG_ADD(flag,shift)          ((flag) << ((uint32_t)(shift) * 4U))                                /*!< DMA channel flag shift */
315 
316 /* DMA_CHCTL base address */
317 #define DMA_CHXCTL_BASE                   (DMA + 0x00000008U)                                                 /*!< the base address of DMA channel CHXCTL register */
318 #define DMA_CHXCNT_BASE                   (DMA + 0x0000000CU)                                                 /*!< the base address of DMA channel CHXCNT register */
319 #define DMA_CHXPADDR_BASE                 (DMA + 0x00000010U)                                                 /*!< the base address of DMA channel CHXPADDR register */
320 #define DMA_CHXMADDR_BASE                 (DMA + 0x00000014U)                                                 /*!< the base address of DMA channel CHXMADDR register */
321 
322 /* DMA channel shift bit */
323 #define DMA_CHCTL(channel)                REG32(DMA_CHXCTL_BASE + 0x14U * (uint32_t)(channel))                /*!< the address of DMA channel CHXCTL register */
324 #define DMA_CHCNT(channel)                REG32(DMA_CHXCNT_BASE + 0x14U * (uint32_t)(channel))                /*!< the address of DMA channel CHXCNT register */
325 #define DMA_CHPADDR(channel)              REG32(DMA_CHXPADDR_BASE + 0x14U * (uint32_t)(channel))              /*!< the address of DMA channel CHXPADDR register */
326 #define DMA_CHMADDR(channel)              REG32(DMA_CHXMADDR_BASE + 0x14U * (uint32_t)(channel))              /*!< the address of DMA channel CHXMADDR register */
327 
328 /* DMAMUX_RM_CHxCFG base address */
329 #define DMAMUX_RM_CHXCFG_BASE             (DMAMUX)                                                            /*!< the base address of DMAMUX request multiplexer channel CHxCFG register */
330 
331 /* DMAMUX request multiplexer channel shift bit */
332 #define DMAMUX_RM_CHXCFG(channel)         REG32(DMAMUX_RM_CHXCFG_BASE + 0x04U * (uint32_t)(channel))          /*!< the address of DMAMUX request multiplexer channel CHxCFG register */
333 
334 /* DMAMUX_RG_CHxCFG base address */
335 #define DMAMUX_RG_CHXCFG_BASE             (DMAMUX + 0x00000100U)                                              /*!< the base address of DMAMUX channel request generator CHxCFG register */
336 
337 /* DMAMUX request generator channel shift bit */
338 #define DMAMUX_RG_CHXCFG(channel)         REG32(DMAMUX_RG_CHXCFG_BASE + 0x04U * (uint32_t)(channel))          /*!< the address of DMAMUX channel request generator CHxCFG register */
339 
340 /* DMA interrupt flag bits */
341 #define DMA_INT_FLAG_G                    DMA_INTF_GIF                                                        /*!< global interrupt flag of DMA channel */
342 #define DMA_INT_FLAG_FTF                  DMA_INTF_FTFIF                                                      /*!< full transfer finish interrupt flag of DMA channel */
343 #define DMA_INT_FLAG_HTF                  DMA_INTF_HTFIF                                                      /*!< half transfer finish interrupt flag of DMA channel */
344 #define DMA_INT_FLAG_ERR                  DMA_INTF_ERRIF                                                      /*!< error interrupt flag of DMA channel */
345 
346 /* DMA flag bits */
347 #define DMA_FLAG_G                        DMA_INTF_GIF                                                        /*!< global interrupt flag of DMA channel */
348 #define DMA_FLAG_FTF                      DMA_INTF_FTFIF                                                      /*!< full transfer finish flag of DMA channel */
349 #define DMA_FLAG_HTF                      DMA_INTF_HTFIF                                                      /*!< half transfer finish flag of DMA channel */
350 #define DMA_FLAG_ERR                      DMA_INTF_ERRIF                                                      /*!< error flag of DMA channel */
351 
352 /* DMA interrupt enable bits */
353 #define DMA_INT_FTF                       DMA_CHXCTL_FTFIE                                                    /*!< enable bit for DMA channel full transfer finish interrupt */
354 #define DMA_INT_HTF                       DMA_CHXCTL_HTFIE                                                    /*!< enable bit for DMA channel half transfer finish interrupt */
355 #define DMA_INT_ERR                       DMA_CHXCTL_ERRIE                                                    /*!< enable bit for DMA channel error interrupt */
356 
357 /* DMA transfer direction */
358 #define DMA_PERIPHERAL_TO_MEMORY          ((uint8_t)0x00U)                                                    /*!< read from peripheral and write to memory */
359 #define DMA_MEMORY_TO_PERIPHERAL          ((uint8_t)0x01U)                                                    /*!< read from memory and write to peripheral */
360 
361 /* DMA peripheral increasing mode */
362 #define DMA_PERIPH_INCREASE_DISABLE       ((uint8_t)0x00U)                                                    /*!< next address of peripheral is fixed address mode */
363 #define DMA_PERIPH_INCREASE_ENABLE        ((uint8_t)0x01U)                                                    /*!< next address of peripheral is increasing address mode */
364 
365 /* DMA memory increasing mode */
366 #define DMA_MEMORY_INCREASE_DISABLE       ((uint8_t)0x00U)                                                    /*!< next address of memory is fixed address mode */
367 #define DMA_MEMORY_INCREASE_ENABLE        ((uint8_t)0x01U)                                                    /*!< next address of memory is increasing address mode */
368 
369 /* DMA transfer data size of peripheral */
370 #define CHCTL_PWIDTH(regval)              (BITS(8,9) & ((regval) << 8))                                       /*!< transfer data size of peripheral */
371 #define DMA_PERIPHERAL_WIDTH_8BIT         CHCTL_PWIDTH(0U)                                                    /*!< transfer data size of peripheral is 8-bit */
372 #define DMA_PERIPHERAL_WIDTH_16BIT        CHCTL_PWIDTH(1U)                                                    /*!< transfer data size of peripheral is 16-bit */
373 #define DMA_PERIPHERAL_WIDTH_32BIT        CHCTL_PWIDTH(2U)                                                    /*!< transfer data size of peripheral is 32-bit */
374 
375 /* DMA transfer data size of memory */
376 #define CHCTL_MWIDTH(regval)              (BITS(10,11) & ((regval) << 10))                                    /*!< transfer data size of memory */
377 #define DMA_MEMORY_WIDTH_8BIT             CHCTL_MWIDTH(0U)                                                    /*!< transfer data size of memory is 8-bit */
378 #define DMA_MEMORY_WIDTH_16BIT            CHCTL_MWIDTH(1U)                                                    /*!< transfer data size of memory is 16-bit */
379 #define DMA_MEMORY_WIDTH_32BIT            CHCTL_MWIDTH(2U)                                                    /*!< transfer data size of memory is 32-bit */
380 
381 /* DMA channel priority level */
382 #define CHCTL_PRIO(regval)                (BITS(12,13) & ((regval) << 12))                                    /*!< DMA channel priority level */
383 #define DMA_PRIORITY_LOW                  CHCTL_PRIO(0U)                                                      /*!< low priority */
384 #define DMA_PRIORITY_MEDIUM               CHCTL_PRIO(1U)                                                      /*!< medium priority */
385 #define DMA_PRIORITY_HIGH                 CHCTL_PRIO(2U)                                                      /*!< high priority */
386 #define DMA_PRIORITY_ULTRA_HIGH           CHCTL_PRIO(3U)                                                      /*!< ultra high priority */
387 
388 /* DMA transfer counter */
389 #define DMA_CHANNEL_CNT_MASK              DMA_CHXCNT_CNT                                                      /*!< transfer counter mask */
390 
391 /* DMAMUX request multiplexer channel input identification */
392 #define RM_CHXCFG_MUXID(regval)           (BITS(0,5) & ((regval) << 0))                                       /*!< multiplexer input identification */
393 #define DMA_REQUEST_M2M                   RM_CHXCFG_MUXID(0U)                                               /*!< memory to memory transfer */
394 #define DMA_REQUEST_GENERATOR0            RM_CHXCFG_MUXID(1U)                                               /*!< DMAMUX request generator 0 */
395 #define DMA_REQUEST_GENERATOR1            RM_CHXCFG_MUXID(2U)                                               /*!< DMAMUX request generator 1 */
396 #define DMA_REQUEST_GENERATOR2            RM_CHXCFG_MUXID(3U)                                               /*!< DMAMUX request generator 2 */
397 #define DMA_REQUEST_GENERATOR3            RM_CHXCFG_MUXID(4U)                                               /*!< DMAMUX request generator 3 */
398 #define DMA_REQUEST_ADC                   RM_CHXCFG_MUXID(5U)                                               /*!< DMAMUX ADC request */
399 #define DMA_REQUEST_DAC                   RM_CHXCFG_MUXID(6U)                                               /*!< DMAMUX DAC CH0 request */
400 #define DMA_REQUEST_I2C0_RX               RM_CHXCFG_MUXID(10U)                                              /*!< DMAMUX I2C0 RX request */
401 #define DMA_REQUEST_I2C0_TX               RM_CHXCFG_MUXID(11U)                                              /*!< DMAMUX I2C0 TX request */
402 #define DMA_REQUEST_I2C1_RX               RM_CHXCFG_MUXID(12U)                                              /*!< DMAMUX I2C1 RX request */
403 #define DMA_REQUEST_I2C1_TX               RM_CHXCFG_MUXID(13U)                                              /*!< DMAMUX I2C1 TX request */
404 #define DMA_REQUEST_I2C2_RX               RM_CHXCFG_MUXID(14U)                                              /*!< DMAMUX I2C2 RX request */
405 #define DMA_REQUEST_I2C2_TX               RM_CHXCFG_MUXID(15U)                                              /*!< DMAMUX I2C2 TX request */
406 #define DMA_REQUEST_SPI0_RX               RM_CHXCFG_MUXID(16U)                                              /*!< DMAMUX SPI0 RX request */
407 #define DMA_REQUEST_SPI0_TX               RM_CHXCFG_MUXID(17U)                                              /*!< DMAMUX SPI0 TX request */
408 #define DMA_REQUEST_SPI1_RX               RM_CHXCFG_MUXID(18U)                                              /*!< DMAMUX SPI1 RX request */
409 #define DMA_REQUEST_SPI1_TX               RM_CHXCFG_MUXID(19U)                                              /*!< DMAMUX SPI1 TX request */
410 #define DMA_REQUEST_TIMER1_CH0            RM_CHXCFG_MUXID(25U)                                              /*!< DMAMUX TIMER1 CH0 request */
411 #define DMA_REQUEST_TIMER1_CH1            RM_CHXCFG_MUXID(26U)                                              /*!< DMAMUX TIMER1 CH1 request */
412 #define DMA_REQUEST_TIMER1_CH2            RM_CHXCFG_MUXID(27U)                                              /*!< DMAMUX TIMER1 CH2 request */
413 #define DMA_REQUEST_TIMER1_CH3            RM_CHXCFG_MUXID(28U)                                              /*!< DMAMUX TIMER1 CH3 request */
414 #define DMA_REQUEST_TIMER1_UP             RM_CHXCFG_MUXID(30U)                                              /*!< DMAMUX TIMER1 UP request */
415 #define DMA_REQUEST_TIMER2_CH0            RM_CHXCFG_MUXID(32U)                                              /*!< DMAMUX TIMER2 CH0 request */
416 #define DMA_REQUEST_TIMER2_CH1            RM_CHXCFG_MUXID(33U)                                              /*!< DMAMUX TIMER2 CH1 request */
417 #define DMA_REQUEST_TIMER2_CH2            RM_CHXCFG_MUXID(34U)                                              /*!< DMAMUX TIMER2 CH2 request */
418 #define DMA_REQUEST_TIMER2_CH3            RM_CHXCFG_MUXID(35U)                                              /*!< DMAMUX TIMER2 CH3 request */
419 #define DMA_REQUEST_TIMER2_TRIG           RM_CHXCFG_MUXID(36U)                                              /*!< DMAMUX TIMER2 TRIG request */
420 #define DMA_REQUEST_TIMER2_UP             RM_CHXCFG_MUXID(37U)                                              /*!< DMAMUX TIMER2 UP request */
421 #define DMA_REQUEST_TIMER5_UP             RM_CHXCFG_MUXID(42U)                                              /*!< DMAMUX TIMER5 UP request */
422 #define DMA_REQUEST_TIMER6_UP             RM_CHXCFG_MUXID(43U)                                              /*!< DMAMUX TIMER6 UP request */
423 #define DMA_REQUEST_CAU_IN                RM_CHXCFG_MUXID(44U)                                              /*!< DMAMUX CAU IN request */
424 #define DMA_REQUEST_CAU_OUT               RM_CHXCFG_MUXID(45U)                                              /*!< DMAMUX CAU OUT request */
425 #define DMA_REQUEST_USART0_RX             RM_CHXCFG_MUXID(50U)                                              /*!< DMAMUX USART0 RX request */
426 #define DMA_REQUEST_USART0_TX             RM_CHXCFG_MUXID(51U)                                              /*!< DMAMUX USART0 TX request */
427 #define DMA_REQUEST_USART1_RX             RM_CHXCFG_MUXID(52U)                                              /*!< DMAMUX USART1 RX request */
428 #define DMA_REQUEST_USART1_TX             RM_CHXCFG_MUXID(53U)                                              /*!< DMAMUX USART1 TX request */
429 #define DMA_REQUEST_UART3_RX              RM_CHXCFG_MUXID(54U)                                              /*!< DMAMUX UART3 RX request */
430 #define DMA_REQUEST_UART3_TX              RM_CHXCFG_MUXID(55U)                                              /*!< DMAMUX UART3 TX request */
431 #define DMA_REQUEST_UART4_RX              RM_CHXCFG_MUXID(56U)                                              /*!< DMAMUX UART4 RX request */
432 #define DMA_REQUEST_UART4_TX              RM_CHXCFG_MUXID(57U)                                              /*!< DMAMUX UART4 TX request */
433 #define DMA_REQUEST_LPUART_RX             RM_CHXCFG_MUXID(58U)                                              /*!< DMAMUX LPUART RX request */
434 #define DMA_REQUEST_LPUART_TX             RM_CHXCFG_MUXID(59U)                                              /*!< DMAMUX LPUART TX request */
435 
436 /* DMAMUX request generator trigger input identification */
437 #define RG_CHXCFG_TID(regval)             (BITS(0,4) & ((regval) << 0))                                       /*!< trigger input identification */
438 #define DMAMUX_TRIGGER_EXTI0              RG_CHXCFG_TID(0U)                                                   /*!< trigger input is EXTI0 */
439 #define DMAMUX_TRIGGER_EXTI1              RG_CHXCFG_TID(1U)                                                   /*!< trigger input is EXTI1 */
440 #define DMAMUX_TRIGGER_EXTI2              RG_CHXCFG_TID(2U)                                                   /*!< trigger input is EXTI2 */
441 #define DMAMUX_TRIGGER_EXTI3              RG_CHXCFG_TID(3U)                                                   /*!< trigger input is EXTI3 */
442 #define DMAMUX_TRIGGER_EXTI4              RG_CHXCFG_TID(4U)                                                   /*!< trigger input is EXTI4 */
443 #define DMAMUX_TRIGGER_EXTI5              RG_CHXCFG_TID(5U)                                                   /*!< trigger input is EXTI5 */
444 #define DMAMUX_TRIGGER_EXTI6              RG_CHXCFG_TID(6U)                                                   /*!< trigger input is EXTI6 */
445 #define DMAMUX_TRIGGER_EXTI7              RG_CHXCFG_TID(7U)                                                   /*!< trigger input is EXTI7 */
446 #define DMAMUX_TRIGGER_EXTI8              RG_CHXCFG_TID(8U)                                                   /*!< trigger input is EXTI8 */
447 #define DMAMUX_TRIGGER_EXTI9              RG_CHXCFG_TID(9U)                                                   /*!< trigger input is EXTI9 */
448 #define DMAMUX_TRIGGER_EXTI10             RG_CHXCFG_TID(10U)                                                  /*!< trigger input is EXTI10 */
449 #define DMAMUX_TRIGGER_EXTI11             RG_CHXCFG_TID(11U)                                                  /*!< trigger input is EXTI11 */
450 #define DMAMUX_TRIGGER_EXTI12             RG_CHXCFG_TID(12U)                                                  /*!< trigger input is EXTI12 */
451 #define DMAMUX_TRIGGER_EXTI13             RG_CHXCFG_TID(13U)                                                  /*!< trigger input is EXTI13 */
452 #define DMAMUX_TRIGGER_EXTI14             RG_CHXCFG_TID(14U)                                                  /*!< trigger input is EXTI14 */
453 #define DMAMUX_TRIGGER_EXTI15             RG_CHXCFG_TID(15U)                                                  /*!< trigger input is EXTI15 */
454 #define DMAMUX_TRIGGER_EVT0_OUT           RG_CHXCFG_TID(16U)                                                  /*!< trigger input is Evt0_out */
455 #define DMAMUX_TRIGGER_EVT1_OUT           RG_CHXCFG_TID(17U)                                                  /*!< trigger input is Evt1_out */
456 #define DMAMUX_TRIGGER_EVT2_OUT           RG_CHXCFG_TID(18U)                                                  /*!< trigger input is Evt2_out */
457 #define DMAMUX_TRIGGER_EVT3_OUT           RG_CHXCFG_TID(19U)                                                  /*!< trigger input is Evt3_out */
458 #define DMAMUX_TRIGGER_TIMER11_CH0_O      RG_CHXCFG_TID(22U)                                                  /*!< trigger input is TIMER11_CH0_O */
459 
460 /* DMAMUX request generator trigger polarity */
461 #define RG_CHXCFG_RGTP(regval)            (BITS(17,18) & ((regval) << 17))                                    /*!< DMA request generator trigger polarity */
462 #define DMAMUX_GEN_NO_EVENT               RG_CHXCFG_RGTP(0U)                                                  /*!< no event detection */
463 #define DMAMUX_GEN_RISING                 RG_CHXCFG_RGTP(1U)                                                  /*!< rising edge */
464 #define DMAMUX_GEN_FALLING                RG_CHXCFG_RGTP(2U)                                                  /*!< falling edge */
465 #define DMAMUX_GEN_RISING_FALLING         RG_CHXCFG_RGTP(3U)                                                  /*!< rising and falling edges */
466 
467 /* number of DMA requests to be generated */
468 #define RG_CHXCFG_NBRG(regval)            (BITS(19,23) & ((regval) << 19))                                    /*!< number of DMA requests to be generated */
469 
470 /* DMAMUX request multiplexer channel synchronization input identification */
471 #define RM_CHXCFG_SYNCID(regval)          (BITS(24,28) & ((regval) << 24))                                    /*!< synchronization input identification */
472 #define DMAMUX_SYNC_EXTI0                 RM_CHXCFG_SYNCID(0U)                                                /*!< synchronization input is EXTI0 */
473 #define DMAMUX_SYNC_EXTI1                 RM_CHXCFG_SYNCID(1U)                                                /*!< synchronization input is EXTI1 */
474 #define DMAMUX_SYNC_EXTI2                 RM_CHXCFG_SYNCID(2U)                                                /*!< synchronization input is EXTI2 */
475 #define DMAMUX_SYNC_EXTI3                 RM_CHXCFG_SYNCID(3U)                                                /*!< synchronization input is EXTI3 */
476 #define DMAMUX_SYNC_EXTI4                 RM_CHXCFG_SYNCID(4U)                                                /*!< synchronization input is EXTI4 */
477 #define DMAMUX_SYNC_EXTI5                 RM_CHXCFG_SYNCID(5U)                                                /*!< synchronization input is EXTI5 */
478 #define DMAMUX_SYNC_EXTI6                 RM_CHXCFG_SYNCID(6U)                                                /*!< synchronization input is EXTI6 */
479 #define DMAMUX_SYNC_EXTI7                 RM_CHXCFG_SYNCID(7U)                                                /*!< synchronization input is EXTI7 */
480 #define DMAMUX_SYNC_EXTI8                 RM_CHXCFG_SYNCID(8U)                                                /*!< synchronization input is EXTI8 */
481 #define DMAMUX_SYNC_EXTI9                 RM_CHXCFG_SYNCID(9U)                                                /*!< synchronization input is EXTI9 */
482 #define DMAMUX_SYNC_EXTI10                RM_CHXCFG_SYNCID(10U)                                               /*!< synchronization input is EXTI10 */
483 #define DMAMUX_SYNC_EXTI11                RM_CHXCFG_SYNCID(11U)                                               /*!< synchronization input is EXTI11 */
484 #define DMAMUX_SYNC_EXTI12                RM_CHXCFG_SYNCID(12U)                                               /*!< synchronization input is EXTI12 */
485 #define DMAMUX_SYNC_EXTI13                RM_CHXCFG_SYNCID(13U)                                               /*!< synchronization input is EXTI13 */
486 #define DMAMUX_SYNC_EXTI14                RM_CHXCFG_SYNCID(14U)                                               /*!< synchronization input is EXTI14 */
487 #define DMAMUX_SYNC_EXTI15                RM_CHXCFG_SYNCID(15U)                                               /*!< synchronization input is EXTI15 */
488 #define DMAMUX_SYNC_EVT0_OUT              RM_CHXCFG_SYNCID(16U)                                               /*!< synchronization input is Evt0_out */
489 #define DMAMUX_SYNC_EVT1_OUT              RM_CHXCFG_SYNCID(17U)                                               /*!< synchronization input is Evt1_out */
490 #define DMAMUX_SYNC_EVT2_OUT              RM_CHXCFG_SYNCID(18U)                                               /*!< synchronization input is Evt2_out */
491 #define DMAMUX_SYNC_EVT3_OUT              RM_CHXCFG_SYNCID(19U)                                               /*!< synchronization input is Evt3_out */
492 #define DMAMUX_SYNC_TIMER11_CH0_O         RM_CHXCFG_SYNCID(22U)                                               /*!< synchronization input is TIMER11_CH0_O */
493 
494 /* DMAMUX request multiplexer synchronization input polarity */
495 #define RM_CHXCFG_SYNCP(regval)           (BITS(17,18) & ((regval) << 17))                                    /*!< synchronization input polarity */
496 #define DMAMUX_SYNC_NO_EVENT              RM_CHXCFG_SYNCP(0U)                                                 /*!< no event detection */
497 #define DMAMUX_SYNC_RISING                RM_CHXCFG_SYNCP(1U)                                                 /*!< rising edge */
498 #define DMAMUX_SYNC_FALLING               RM_CHXCFG_SYNCP(2U)                                                 /*!< falling edge */
499 #define DMAMUX_SYNC_RISING_FALLING        RM_CHXCFG_SYNCP(3U)                                                 /*!< rising and falling edges */
500 
501 /* number of DMA requests to forward */
502 #define RM_CHXCFG_NBR(regval)            (BITS(19,23) & ((regval) << 19))                                     /*!< number of DMA requests to forward */
503 
504 /* function declarations */
505 /* DMA functions */
506 /* DMA initialization functions */
507 /* deinitialize DMA a channel registers */
508 void dma_deinit(dma_channel_enum channelx);
509 /* initialize the parameters of DMA structure with the default values */
510 void dma_struct_para_init(dma_parameter_struct *init_struct);
511 /* initialize DMA channel */
512 void dma_init(dma_channel_enum channelx, dma_parameter_struct *init_struct);
513 /* enable DMA circulation mode */
514 void dma_circulation_enable(dma_channel_enum channelx);
515 /* disable DMA circulation mode */
516 void dma_circulation_disable(dma_channel_enum channelx);
517 /* enable memory to memory mode */
518 void dma_memory_to_memory_enable(dma_channel_enum channelx);
519 /* disable memory to memory mode */
520 void dma_memory_to_memory_disable(dma_channel_enum channelx);
521 /* enable DMA channel */
522 void dma_channel_enable(dma_channel_enum channelx);
523 /* disable DMA channel */
524 void dma_channel_disable(dma_channel_enum channelx);
525 
526 /* DMA configuration functions */
527 /* set DMA peripheral base address */
528 void dma_periph_address_config(dma_channel_enum channelx, uint32_t address);
529 /* set DMA memory base address */
530 void dma_memory_address_config(dma_channel_enum channelx, uint32_t address);
531 /* set the number of remaining data to be transferred by the DMA */
532 void dma_transfer_number_config(dma_channel_enum channelx, uint32_t number);
533 /* get the number of remaining data to be transferred by the DMA */
534 uint32_t dma_transfer_number_get(dma_channel_enum channelx);
535 /* configure priority level of DMA channel */
536 void dma_priority_config(dma_channel_enum channelx, uint32_t priority);
537 /* configure transfer data size of memory */
538 void dma_memory_width_config(dma_channel_enum channelx, uint32_t mwidth);
539 /* configure transfer data size of peripheral */
540 void dma_periph_width_config(dma_channel_enum channelx, uint32_t pwidth);
541 /* enable next address increasement algorithm of memory */
542 void dma_memory_increase_enable(dma_channel_enum channelx);
543 /* disable next address increasement algorithm of memory */
544 void dma_memory_increase_disable(dma_channel_enum channelx);
545 /* enable next address increasement algorithm of peripheral */
546 void dma_periph_increase_enable(dma_channel_enum channelx);
547 /* disable next address increasement algorithm of peripheral */
548 void dma_periph_increase_disable(dma_channel_enum channelx);
549 /* configure the direction of data transfer on the channel */
550 void dma_transfer_direction_config(dma_channel_enum channelx, uint32_t direction);
551 
552 /* DMA interrupt and flag functions */
553 /* check DMA flag is set or not */
554 FlagStatus dma_flag_get(dma_channel_enum channelx, uint32_t flag);
555 /* clear a DMA channel flag */
556 void dma_flag_clear(dma_channel_enum channelx, uint32_t flag);
557 /* check DMA flag and interrupt enable bit is set or not */
558 FlagStatus dma_interrupt_flag_get(dma_channel_enum channelx, uint32_t int_flag);
559 /* clear a DMA channel interrupt flag */
560 void dma_interrupt_flag_clear(dma_channel_enum channelx, uint32_t int_flag);
561 /* enable DMA interrupt */
562 void dma_interrupt_enable(dma_channel_enum channelx, uint32_t source);
563 /* disable DMA interrupt */
564 void dma_interrupt_disable(dma_channel_enum channelx, uint32_t source);
565 
566 /* DMAMUX functions */
567 /* DMAMUX request multiplexer functions */
568 /* initialize the parameters of DMAMUX synchronization mode structure with the default values */
569 void dmamux_sync_struct_para_init(dmamux_sync_parameter_struct *init_struct);
570 /* initialize DMAMUX request multiplexer channel synchronization mode */
571 void dmamux_synchronization_init(dmamux_multiplexer_channel_enum channelx, dmamux_sync_parameter_struct *init_struct);
572 /* enable synchronization mode */
573 void dmamux_synchronization_enable(dmamux_multiplexer_channel_enum channelx);
574 /* disable synchronization mode */
575 void dmamux_synchronization_disable(dmamux_multiplexer_channel_enum channelx);
576 /* enable event generation */
577 void dmamux_event_generation_enable(dmamux_multiplexer_channel_enum channelx);
578 /* disable event generation */
579 void dmamux_event_generation_disable(dmamux_multiplexer_channel_enum channelx);
580 
581 /* DMAMUX request generator functions */
582 /* initialize the parameters of DMAMUX request generator structure with the default values */
583 void dmamux_gen_struct_para_init(dmamux_gen_parameter_struct *init_struct);
584 /* initialize DMAMUX request generator channel */
585 void dmamux_request_generator_init(dmamux_generator_channel_enum channelx, dmamux_gen_parameter_struct *init_struct);
586 /* enable DMAMUX request generator channel */
587 void dmamux_request_generator_chennel_enable(dmamux_generator_channel_enum channelx);
588 /* disable DMAMUX request generator channel */
589 void dmamux_request_generator_chennel_disable(dmamux_generator_channel_enum channelx);
590 
591 /* DMAMUX configuration functions */
592 /* configure synchronization input polarity */
593 void dmamux_synchronization_polarity_config(dmamux_multiplexer_channel_enum channelx, uint32_t polarity);
594 /* configure number of DMA requests to forward */
595 void dmamux_request_forward_number_config(dmamux_multiplexer_channel_enum channelx, uint32_t number);
596 /* configure synchronization input identification */
597 void dmamux_sync_id_config(dmamux_multiplexer_channel_enum channelx, uint32_t id);
598 /* configure multiplexer input identification */
599 void dmamux_request_id_config(dmamux_multiplexer_channel_enum channelx, uint32_t id);
600 /* configure trigger input polarity */
601 void dmamux_trigger_polarity_config(dmamux_generator_channel_enum channelx, uint32_t polarity);
602 /* configure number of DMA requests to be generated */
603 void dmamux_request_generate_number_config(dmamux_generator_channel_enum channelx, uint32_t number);
604 /* configure trigger input identification */
605 void dmamux_trigger_id_config(dmamux_generator_channel_enum channelx, uint32_t id);
606 
607 /* DMAMUX interrupt and flag functions */
608 /* get DMAMUX flag */
609 FlagStatus dmamux_flag_get(dmamux_flag_enum flag);
610 /* clear DMAMUX flag */
611 void dmamux_flag_clear(dmamux_flag_enum flag);
612 /* get DMAMUX interrupt flag */
613 FlagStatus dmamux_interrupt_flag_get(dmamux_interrupt_flag_enum int_flag);
614 /* clear DMAMUX interrupt flag */
615 void dmamux_interrupt_flag_clear(dmamux_interrupt_flag_enum int_flag);
616 /* enable DMAMUX interrupt */
617 void dmamux_interrupt_enable(dmamux_interrupt_enum interrupt);
618 /* disable DMAMUX interrupt */
619 void dmamux_interrupt_disable(dmamux_interrupt_enum interrupt);
620 
621 #endif /* GD32L23X_DMA_H */
622