1 /***************************************************************************//**
2 * @file
3 * @brief Direct memory access (LDMA) API
4 *******************************************************************************
5 * # License
6 * <b>Copyright 2018 Silicon Laboratories Inc. www.silabs.com</b>
7 *******************************************************************************
8 *
9 * SPDX-License-Identifier: Zlib
10 *
11 * The licensor of this software is Silicon Laboratories Inc.
12 *
13 * This software is provided 'as-is', without any express or implied
14 * warranty. In no event will the authors be held liable for any damages
15 * arising from the use of this software.
16 *
17 * Permission is granted to anyone to use this software for any purpose,
18 * including commercial applications, and to alter it and redistribute it
19 * freely, subject to the following restrictions:
20 *
21 * 1. The origin of this software must not be misrepresented; you must not
22 * claim that you wrote the original software. If you use this software
23 * in a product, an acknowledgment in the product documentation would be
24 * appreciated but is not required.
25 * 2. Altered source versions must be plainly marked as such, and must not be
26 * misrepresented as being the original software.
27 * 3. This notice may not be removed or altered from any source distribution.
28 *
29 ******************************************************************************/
30
31 #ifndef EM_LDMA_H
32 #define EM_LDMA_H
33
34 #include "em_device.h"
35
36 #if defined(LDMA_PRESENT) && (LDMA_COUNT == 1)
37
38 #include <stdbool.h>
39
40 #ifdef __cplusplus
41 extern "C" {
42 #endif
43
44 /***************************************************************************//**
45 * @addtogroup ldma LDMA - Linked DMA
46 * @brief Linked Direct Memory Access (LDMA) Peripheral API
47 *
48 * @details
49 * LDMA API functions provide full support for the LDMA peripheral.
50 *
51 * LDMA supports these DMA transfer types:
52 *
53 * @li Memory to memory.
54 * @li Memory to peripheral.
55 * @li Peripheral to memory.
56 * @li Peripheral to peripheral.
57 * @li Constant value to memory.
58 *
59 * LDMA supports linked lists of DMA descriptors allowing:
60 *
61 * @li Circular and ping-pong buffer transfers.
62 * @li Scatter-gather transfers.
63 * @li Looped transfers.
64 *
65 * LDMA has some advanced features:
66 *
67 * @li Intra-channel synchronization (SYNC), allowing hardware events to
68 * pause and restart a DMA sequence.
69 * @li Immediate-write (WRI), allowing DMA to write a constant anywhere
70 * in the memory map.
71 * @li Complex flow control allowing if-else constructs.
72 *
73 * Basic understanding of LDMA controller is assumed. Please refer to
74 * the reference manual for further details. The LDMA examples described
75 * in the reference manual are particularly helpful in understanding LDMA
76 * operations.
77 *
78 * In order to use the DMA controller, the initialization function @ref
79 * LDMA_Init() must have been executed once (normally during system initialization).
80 *
81 * DMA transfers are initiated by a call to @ref LDMA_StartTransfer(),
82 * transfer properties are controlled by the contents of @ref LDMA_TransferCfg_t
83 * and @ref LDMA_Descriptor_t structure parameters.
84 * The LDMA_Descriptor_t structure parameter may be a
85 * pointer to an array of descriptors, descriptors in array should
86 * be linked together as needed.
87 *
88 * Transfer and descriptor initialization macros are provided for the most common
89 * transfer types. Due to the flexibility of LDMA peripheral, only a small
90 * subset of all possible initializer macros are provided, users should create
91 * new ones when needed.
92 *
93 * <b> Examples of LDMA usage: </b>
94 *
95 * A simple memory to memory transfer:
96 *
97 * @include em_ldma_single.c
98 *
99 * @n A linked list of three memory to memory transfers:
100 *
101 * @include em_ldma_link_memory.c
102 *
103 * @n DMA from serial port peripheral to memory:
104 *
105 * @include em_ldma_peripheral.c
106 *
107 * @n Ping-pong DMA from serial port peripheral to memory:
108 *
109 * @include em_ldma_pingpong.c
110 *
111 * @note LDMA module does not implement LDMA interrupt handler. A
112 * template for an LDMA IRQ handler is included here as an example.
113 *
114 * @include em_ldma_irq.c
115 *
116 * @{
117 ******************************************************************************/
118
119 /*******************************************************************************
120 ******************************** ENUMS ************************************
121 ******************************************************************************/
122
123 /**
124 * Controls the number of unit data transfers per arbitration
125 * cycle, providing a means to balance DMA channels' load on the controller.
126 */
127 typedef enum {
128 ldmaCtrlBlockSizeUnit1 = _LDMA_CH_CTRL_BLOCKSIZE_UNIT1, /**< One transfer per arbitration. */
129 ldmaCtrlBlockSizeUnit2 = _LDMA_CH_CTRL_BLOCKSIZE_UNIT2, /**< Two transfers per arbitration. */
130 ldmaCtrlBlockSizeUnit3 = _LDMA_CH_CTRL_BLOCKSIZE_UNIT3, /**< Three transfers per arbitration. */
131 ldmaCtrlBlockSizeUnit4 = _LDMA_CH_CTRL_BLOCKSIZE_UNIT4, /**< Four transfers per arbitration. */
132 ldmaCtrlBlockSizeUnit6 = _LDMA_CH_CTRL_BLOCKSIZE_UNIT6, /**< Six transfers per arbitration. */
133 ldmaCtrlBlockSizeUnit8 = _LDMA_CH_CTRL_BLOCKSIZE_UNIT8, /**< Eight transfers per arbitration. */
134 ldmaCtrlBlockSizeUnit16 = _LDMA_CH_CTRL_BLOCKSIZE_UNIT16, /**< 16 transfers per arbitration. */
135 ldmaCtrlBlockSizeUnit32 = _LDMA_CH_CTRL_BLOCKSIZE_UNIT32, /**< 32 transfers per arbitration. */
136 ldmaCtrlBlockSizeUnit64 = _LDMA_CH_CTRL_BLOCKSIZE_UNIT64, /**< 64 transfers per arbitration. */
137 ldmaCtrlBlockSizeUnit128 = _LDMA_CH_CTRL_BLOCKSIZE_UNIT128, /**< 128 transfers per arbitration. */
138 ldmaCtrlBlockSizeUnit256 = _LDMA_CH_CTRL_BLOCKSIZE_UNIT256, /**< 256 transfers per arbitration. */
139 ldmaCtrlBlockSizeUnit512 = _LDMA_CH_CTRL_BLOCKSIZE_UNIT512, /**< 512 transfers per arbitration. */
140 ldmaCtrlBlockSizeUnit1024 = _LDMA_CH_CTRL_BLOCKSIZE_UNIT1024, /**< 1024 transfers per arbitration. */
141 ldmaCtrlBlockSizeAll = _LDMA_CH_CTRL_BLOCKSIZE_ALL /**< Lock arbitration during transfer. */
142 } LDMA_CtrlBlockSize_t;
143
144 /** DMA structure type. */
145 typedef enum {
146 ldmaCtrlStructTypeXfer = _LDMA_CH_CTRL_STRUCTTYPE_TRANSFER, /**< TRANSFER transfer type. */
147 ldmaCtrlStructTypeSync = _LDMA_CH_CTRL_STRUCTTYPE_SYNCHRONIZE, /**< SYNCHRONIZE transfer type. */
148 ldmaCtrlStructTypeWrite = _LDMA_CH_CTRL_STRUCTTYPE_WRITE /**< WRITE transfer type. */
149 } LDMA_CtrlStructType_t;
150
151 /** DMA transfer block or cycle selector. */
152 typedef enum {
153 ldmaCtrlReqModeBlock = _LDMA_CH_CTRL_REQMODE_BLOCK, /**< Each DMA request trigger transfer of one block. */
154 ldmaCtrlReqModeAll = _LDMA_CH_CTRL_REQMODE_ALL /**< A DMA request trigger transfer of a complete cycle. */
155 } LDMA_CtrlReqMode_t;
156
157 /** Source address increment unit size. */
158 typedef enum {
159 ldmaCtrlSrcIncOne = _LDMA_CH_CTRL_SRCINC_ONE, /**< Increment source address by one unit data size. */
160 ldmaCtrlSrcIncTwo = _LDMA_CH_CTRL_SRCINC_TWO, /**< Increment source address by two unit data sizes. */
161 ldmaCtrlSrcIncFour = _LDMA_CH_CTRL_SRCINC_FOUR, /**< Increment source address by four unit data sizes. */
162 ldmaCtrlSrcIncNone = _LDMA_CH_CTRL_SRCINC_NONE /**< Do not increment source address. */
163 } LDMA_CtrlSrcInc_t;
164
165 /** DMA transfer unit size. */
166 typedef enum {
167 ldmaCtrlSizeByte = _LDMA_CH_CTRL_SIZE_BYTE, /**< Each unit transfer is a byte. */
168 ldmaCtrlSizeHalf = _LDMA_CH_CTRL_SIZE_HALFWORD, /**< Each unit transfer is a half-word. */
169 ldmaCtrlSizeWord = _LDMA_CH_CTRL_SIZE_WORD /**< Each unit transfer is a word. */
170 } LDMA_CtrlSize_t;
171
172 /** Destination address increment unit size. */
173 typedef enum {
174 ldmaCtrlDstIncOne = _LDMA_CH_CTRL_DSTINC_ONE, /**< Increment destination address by one unit data size. */
175 ldmaCtrlDstIncTwo = _LDMA_CH_CTRL_DSTINC_TWO, /**< Increment destination address by two unit data sizes. */
176 ldmaCtrlDstIncFour = _LDMA_CH_CTRL_DSTINC_FOUR, /**< Increment destination address by four unit data sizes. */
177 ldmaCtrlDstIncNone = _LDMA_CH_CTRL_DSTINC_NONE /**< Do not increment destination address. */
178 } LDMA_CtrlDstInc_t;
179
180 /** Source addressing mode. */
181 typedef enum {
182 ldmaCtrlSrcAddrModeAbs = _LDMA_CH_CTRL_SRCMODE_ABSOLUTE, /**< Address fetched from a linked structure is absolute. */
183 ldmaCtrlSrcAddrModeRel = _LDMA_CH_CTRL_SRCMODE_RELATIVE /**< Address fetched from a linked structure is relative. */
184 } LDMA_CtrlSrcAddrMode_t;
185
186 /** Destination addressing mode. */
187 typedef enum {
188 ldmaCtrlDstAddrModeAbs = _LDMA_CH_CTRL_DSTMODE_ABSOLUTE, /**< Address fetched from a linked structure is absolute. */
189 ldmaCtrlDstAddrModeRel = _LDMA_CH_CTRL_DSTMODE_RELATIVE /**< Address fetched from a linked structure is relative. */
190 } LDMA_CtrlDstAddrMode_t;
191
192 /** DMA link load address mode. */
193 typedef enum {
194 ldmaLinkModeAbs = _LDMA_CH_LINK_LINKMODE_ABSOLUTE, /**< Link address is an absolute address value. */
195 ldmaLinkModeRel = _LDMA_CH_LINK_LINKMODE_RELATIVE /**< Link address is a two's complement relative address. */
196 } LDMA_LinkMode_t;
197
198 /** Insert extra arbitration slots to increase channel arbitration priority. */
199 typedef enum {
200 ldmaCfgArbSlotsAs1 = _LDMA_CH_CFG_ARBSLOTS_ONE, /**< One arbitration slot selected. */
201 ldmaCfgArbSlotsAs2 = _LDMA_CH_CFG_ARBSLOTS_TWO, /**< Two arbitration slots selected. */
202 ldmaCfgArbSlotsAs4 = _LDMA_CH_CFG_ARBSLOTS_FOUR, /**< Four arbitration slots selected. */
203 ldmaCfgArbSlotsAs8 = _LDMA_CH_CFG_ARBSLOTS_EIGHT /**< Eight arbitration slots selected. */
204 } LDMA_CfgArbSlots_t;
205
206 /** Source address increment sign. */
207 typedef enum {
208 ldmaCfgSrcIncSignPos = _LDMA_CH_CFG_SRCINCSIGN_POSITIVE, /**< Increment source address. */
209 ldmaCfgSrcIncSignNeg = _LDMA_CH_CFG_SRCINCSIGN_NEGATIVE /**< Decrement source address. */
210 } LDMA_CfgSrcIncSign_t;
211
212 /** Destination address increment sign. */
213 typedef enum {
214 ldmaCfgDstIncSignPos = _LDMA_CH_CFG_DSTINCSIGN_POSITIVE, /**< Increment destination address. */
215 ldmaCfgDstIncSignNeg = _LDMA_CH_CFG_DSTINCSIGN_NEGATIVE /**< Decrement destination address. */
216 } LDMA_CfgDstIncSign_t;
217
218 #if defined(_LDMA_CH_CFG_STRUCTBUSPORT_MASK)
219 /** Structure fetch operation bus port. */
220 typedef enum {
221 ldmaCfgStructBusPort0 = _LDMA_CH_CFG_STRUCTBUSPORT_AHBM0, /**< AHB Master 0 port. */
222 ldmaCfgStructBusPort1 = _LDMA_CH_CFG_STRUCTBUSPORT_AHBM1 /**< AHB Master 1 port. */
223 } LDMA_CfgStructBusPort_t;
224 #endif
225
226 #if defined(_LDMA_CH_CFG_SRCBUSPORT_MASK)
227 /** Source operation bus port. */
228 typedef enum {
229 ldmaCfgSrcBusPort0 = _LDMA_CH_CFG_SRCBUSPORT_AHBM0, /**< AHB Master 0 port. */
230 ldmaCfgSrcBusPort1 = _LDMA_CH_CFG_SRCBUSPORT_AHBM1 /**< AHB Master 1 port. */
231 } LDMA_CfgSrcBusPort_t;
232 #endif
233
234 #if defined(_LDMA_CH_CFG_DSTBUSPORT_MASK)
235 /** Destination operation bus port. */
236 typedef enum {
237 ldmaCfgDstBusPort0 = _LDMA_CH_CFG_DSTBUSPORT_AHBM0, /**< AHB Master 0 port. */
238 ldmaCfgDstBusPort1 = _LDMA_CH_CFG_DSTBUSPORT_AHBM1 /**< AHB Master 1 port. */
239 } LDMA_CfgDstBusPort_t;
240 #endif
241
242 #if defined(_LDMA_CH_CTRL_EXTEND_MASK)
243 /** Rules table mode (interleaving destination). */
244 typedef enum {
245 ldmaIlModeAbsolute = _LDMA_CH_XCTRL_ILMODE_ABSOLUTE, /**< Address by value in rules. Size of WORD */
246 ldmaIlModeRelative16 = _LDMA_CH_XCTRL_ILMODE_RELATIVE16, /**< Address by adding rules to DST. size of HALFWORD */
247 ldmaIlModeRelative8 = _LDMA_CH_XCTRL_ILMODE_RELATIVE8 /**< Address by adding rules to DST. size of BYTE */
248 } LDMA_RulesTblMode_t;
249 #endif
250
251 #if defined(LDMAXBAR_COUNT) && (LDMAXBAR_COUNT > 0)
252 /** Peripherals that can trigger LDMA transfers. */
253 typedef enum {
254 ldmaPeripheralSignal_NONE = LDMAXBAR_CH_REQSEL_SOURCESEL_NONE, ///< No peripheral selected for DMA triggering.
255 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_LDMAXBARPRSREQ0
256 ldmaPeripheralSignal_LDMAXBAR_PRSREQ0 = LDMAXBAR_CH_REQSEL_SIGSEL_LDMAXBARPRSREQ0 | LDMAXBAR_CH_REQSEL_SOURCESEL_LDMAXBAR, ///< Trigger on PRS REQ0.
257 #endif
258 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_LDMAXBARPRSREQ1
259 ldmaPeripheralSignal_LDMAXBAR_PRSREQ1 = LDMAXBAR_CH_REQSEL_SIGSEL_LDMAXBARPRSREQ1 | LDMAXBAR_CH_REQSEL_SOURCESEL_LDMAXBAR, ///< Trigger on PRS REQ1.
260 #endif
261 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_TIMER0CC0
262 ldmaPeripheralSignal_TIMER0_CC0 = LDMAXBAR_CH_REQSEL_SIGSEL_TIMER0CC0 | LDMAXBAR_CH_REQSEL_SOURCESEL_TIMER0, ///< Trigger on TIMER0_CC0.
263 #endif
264 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_TIMER0CC1
265 ldmaPeripheralSignal_TIMER0_CC1 = LDMAXBAR_CH_REQSEL_SIGSEL_TIMER0CC1 | LDMAXBAR_CH_REQSEL_SOURCESEL_TIMER0, ///< Trigger on TIMER0_CC1.
266 #endif
267 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_TIMER0CC2
268 ldmaPeripheralSignal_TIMER0_CC2 = LDMAXBAR_CH_REQSEL_SIGSEL_TIMER0CC2 | LDMAXBAR_CH_REQSEL_SOURCESEL_TIMER0, ///< Trigger on TIMER0_CC2.
269 #endif
270 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_TIMER0UFOF
271 ldmaPeripheralSignal_TIMER0_UFOF = LDMAXBAR_CH_REQSEL_SIGSEL_TIMER0UFOF | LDMAXBAR_CH_REQSEL_SOURCESEL_TIMER0, ///< Trigger on TIMER0_UFOF.
272 #endif
273 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_TIMER1CC0
274 ldmaPeripheralSignal_TIMER1_CC0 = LDMAXBAR_CH_REQSEL_SIGSEL_TIMER1CC0 | LDMAXBAR_CH_REQSEL_SOURCESEL_TIMER1, ///< Trigger on TIMER1_CC0.
275 #endif
276 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_TIMER1CC1
277 ldmaPeripheralSignal_TIMER1_CC1 = LDMAXBAR_CH_REQSEL_SIGSEL_TIMER1CC1 | LDMAXBAR_CH_REQSEL_SOURCESEL_TIMER1, ///< Trigger on TIMER1_CC1.
278 #endif
279 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_TIMER1CC2
280 ldmaPeripheralSignal_TIMER1_CC2 = LDMAXBAR_CH_REQSEL_SIGSEL_TIMER1CC2 | LDMAXBAR_CH_REQSEL_SOURCESEL_TIMER1, ///< Trigger on TIMER1_CC2.
281 #endif
282 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_TIMER1UFOF
283 ldmaPeripheralSignal_TIMER1_UFOF = LDMAXBAR_CH_REQSEL_SIGSEL_TIMER1UFOF | LDMAXBAR_CH_REQSEL_SOURCESEL_TIMER1, ///< Trigger on TIMER1_UFOF.
284 #endif
285 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_USART0RXDATAV
286 ldmaPeripheralSignal_USART0_RXDATAV = LDMAXBAR_CH_REQSEL_SIGSEL_USART0RXDATAV | LDMAXBAR_CH_REQSEL_SOURCESEL_USART0, ///< Trigger on USART0_RXDATAV.
287 #endif
288 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_USART0RXDATAVRIGHT
289 ldmaPeripheralSignal_USART0_RXDATAVRIGHT = LDMAXBAR_CH_REQSEL_SIGSEL_USART0RXDATAVRIGHT | LDMAXBAR_CH_REQSEL_SOURCESEL_USART0,///< Trigger on USART0_RXDATAVRIGHT.
290 #endif
291 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_USART0TXBL
292 ldmaPeripheralSignal_USART0_TXBL = LDMAXBAR_CH_REQSEL_SIGSEL_USART0TXBL | LDMAXBAR_CH_REQSEL_SOURCESEL_USART0, ///< Trigger on USART0_TXBL.
293 #endif
294 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_USART0TXBLRIGHT
295 ldmaPeripheralSignal_USART0_TXBLRIGHT = LDMAXBAR_CH_REQSEL_SIGSEL_USART0TXBLRIGHT | LDMAXBAR_CH_REQSEL_SOURCESEL_USART0, ///< Trigger on USART0_TXBLRIGHT.
296 #endif
297 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_USART0TXEMPTY
298 ldmaPeripheralSignal_USART0_TXEMPTY = LDMAXBAR_CH_REQSEL_SIGSEL_USART0TXEMPTY | LDMAXBAR_CH_REQSEL_SOURCESEL_USART0, ///< Trigger on USART0_TXEMPTY.
299 #endif
300 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_USART1RXDATAV
301 ldmaPeripheralSignal_USART1_RXDATAV = LDMAXBAR_CH_REQSEL_SIGSEL_USART1RXDATAV | LDMAXBAR_CH_REQSEL_SOURCESEL_USART1, ///< Trigger on USART1_RXDATAV.
302 #endif
303 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_USART1RXDATAVRIGHT
304 ldmaPeripheralSignal_USART1_RXDATAVRIGHT = LDMAXBAR_CH_REQSEL_SIGSEL_USART1RXDATAVRIGHT | LDMAXBAR_CH_REQSEL_SOURCESEL_USART1,///< Trigger on USART1_RXDATAVRIGHT.
305 #endif
306 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_USART1TXBL
307 ldmaPeripheralSignal_USART1_TXBL = LDMAXBAR_CH_REQSEL_SIGSEL_USART1TXBL | LDMAXBAR_CH_REQSEL_SOURCESEL_USART1, ///< Trigger on USART1_TXBL.
308 #endif
309 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_USART1TXBLRIGHT
310 ldmaPeripheralSignal_USART1_TXBLRIGHT = LDMAXBAR_CH_REQSEL_SIGSEL_USART1TXBLRIGHT | LDMAXBAR_CH_REQSEL_SOURCESEL_USART1, ///< Trigger on USART1_TXBLRIGHT.
311 #endif
312 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_USART1TXEMPTY
313 ldmaPeripheralSignal_USART1_TXEMPTY = LDMAXBAR_CH_REQSEL_SIGSEL_USART1TXEMPTY | LDMAXBAR_CH_REQSEL_SOURCESEL_USART1, ///< Trigger on USART1_TXEMPTY.
314 #endif
315 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_USART2RXDATAV
316 ldmaPeripheralSignal_USART2_RXDATAV = LDMAXBAR_CH_REQSEL_SIGSEL_USART2RXDATAV | LDMAXBAR_CH_REQSEL_SOURCESEL_USART2, ///< Trigger on USART2_RXDATAV.
317 #endif
318 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_USART2RXDATAVRIGHT
319 ldmaPeripheralSignal_USART2_RXDATAVRIGHT = LDMAXBAR_CH_REQSEL_SIGSEL_USART2RXDATAVRIGHT | LDMAXBAR_CH_REQSEL_SOURCESEL_USART2,///< Trigger on USART2_RXDATAVRIGHT.
320 #endif
321 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_USART2TXBL
322 ldmaPeripheralSignal_USART2_TXBL = LDMAXBAR_CH_REQSEL_SIGSEL_USART2TXBL | LDMAXBAR_CH_REQSEL_SOURCESEL_USART2, ///< Trigger on USART2_TXBL.
323 #endif
324 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_USART2TXBLRIGHT
325 ldmaPeripheralSignal_USART2_TXBLRIGHT = LDMAXBAR_CH_REQSEL_SIGSEL_USART2TXBLRIGHT | LDMAXBAR_CH_REQSEL_SOURCESEL_USART2, ///< Trigger on USART2_TXBLRIGHT.
326 #endif
327 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_USART2TXEMPTY
328 ldmaPeripheralSignal_USART2_TXEMPTY = LDMAXBAR_CH_REQSEL_SIGSEL_USART2TXEMPTY | LDMAXBAR_CH_REQSEL_SOURCESEL_USART2, ///< Trigger on USART2_TXEMPTY.
329 #endif
330 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_I2C0RXDATAV
331 ldmaPeripheralSignal_I2C0_RXDATAV = LDMAXBAR_CH_REQSEL_SIGSEL_I2C0RXDATAV | LDMAXBAR_CH_REQSEL_SOURCESEL_I2C0, ///< Trigger on I2C0_RXDATAV.
332 #endif
333 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_I2C0TXBL
334 ldmaPeripheralSignal_I2C0_TXBL = LDMAXBAR_CH_REQSEL_SIGSEL_I2C0TXBL | LDMAXBAR_CH_REQSEL_SOURCESEL_I2C0, ///< Trigger on I2C0_TXBL.
335 #endif
336 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_I2C1RXDATAV
337 ldmaPeripheralSignal_I2C1_RXDATAV = LDMAXBAR_CH_REQSEL_SIGSEL_I2C1RXDATAV | LDMAXBAR_CH_REQSEL_SOURCESEL_I2C1, ///< Trigger on I2C1_RXDATAV.
338 #endif
339 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_I2C1TXBL
340 ldmaPeripheralSignal_I2C1_TXBL = LDMAXBAR_CH_REQSEL_SIGSEL_I2C1TXBL | LDMAXBAR_CH_REQSEL_SOURCESEL_I2C1, ///< Trigger on I2C1_TXBL.
341 #endif
342 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_AGCRSSI
343 ldmaPeripheralSignal_AGC_RSSI = LDMAXBAR_CH_REQSEL_SIGSEL_AGCRSSI | LDMAXBAR_CH_REQSEL_SOURCESEL_AGC, ///< Trigger on AGC_RSSI.
344 #endif
345 #if defined(LDMAXBAR_CH_REQSEL_SIGSEL_PDMRXDATAV)
346 ldmaPeripheralSignal_PDM_RXDATAV = LDMAXBAR_CH_REQSEL_SIGSEL_PDMRXDATAV | LDMAXBAR_CH_REQSEL_SOURCESEL_PDM, ///< Trigger on PDM_RXDATAV.
347 #endif
348 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_PROTIMERBOF
349 ldmaPeripheralSignal_PROTIMER_BOF = LDMAXBAR_CH_REQSEL_SIGSEL_PROTIMERBOF | LDMAXBAR_CH_REQSEL_SOURCESEL_PROTIMER, ///< Trigger on PROTIMER_BOF.
350 #endif
351 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_PROTIMERCC0
352 ldmaPeripheralSignal_PROTIMER_CC0 = LDMAXBAR_CH_REQSEL_SIGSEL_PROTIMERCC0 | LDMAXBAR_CH_REQSEL_SOURCESEL_PROTIMER, ///< Trigger on PROTIMER_CC0.
353 #endif
354 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_PROTIMERCC1
355 ldmaPeripheralSignal_PROTIMER_CC1 = LDMAXBAR_CH_REQSEL_SIGSEL_PROTIMERCC1 | LDMAXBAR_CH_REQSEL_SOURCESEL_PROTIMER, ///< Trigger on PROTIMER_CC1.
356 #endif
357 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_PROTIMERCC2
358 ldmaPeripheralSignal_PROTIMER_CC2 = LDMAXBAR_CH_REQSEL_SIGSEL_PROTIMERCC2 | LDMAXBAR_CH_REQSEL_SOURCESEL_PROTIMER, ///< Trigger on PROTIMER_CC2.
359 #endif
360 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_PROTIMERCC3
361 ldmaPeripheralSignal_PROTIMER_CC3 = LDMAXBAR_CH_REQSEL_SIGSEL_PROTIMERCC3 | LDMAXBAR_CH_REQSEL_SOURCESEL_PROTIMER, ///< Trigger on PROTIMER_CC3.
362 #endif
363 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_PROTIMERCC4
364 ldmaPeripheralSignal_PROTIMER_CC4 = LDMAXBAR_CH_REQSEL_SIGSEL_PROTIMERCC4 | LDMAXBAR_CH_REQSEL_SOURCESEL_PROTIMER, ///< Trigger on PROTIMER_CC4.
365 #endif
366 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_PROTIMERPOF
367 ldmaPeripheralSignal_PROTIMER_POF = LDMAXBAR_CH_REQSEL_SIGSEL_PROTIMERPOF | LDMAXBAR_CH_REQSEL_SOURCESEL_PROTIMER, ///< Trigger on PROTIMER_POF.
368 #endif
369 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_PROTIMERWOF
370 ldmaPeripheralSignal_PROTIMER_WOF = LDMAXBAR_CH_REQSEL_SIGSEL_PROTIMERWOF | LDMAXBAR_CH_REQSEL_SOURCESEL_PROTIMER, ///< Trigger on PROTIMER_WOF.
371 #endif
372 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_MODEMDEBUG
373 ldmaPeripheralSignal_MODEM_DEBUG = LDMAXBAR_CH_REQSEL_SIGSEL_MODEMDEBUG | LDMAXBAR_CH_REQSEL_SOURCESEL_MODEM, ///< Trigger on MODEM_DEBUG.
374 #endif
375 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_IADC0IADC_SCAN
376 ldmaPeripheralSignal_IADC0_IADC_SCAN = LDMAXBAR_CH_REQSEL_SIGSEL_IADC0IADC_SCAN | LDMAXBAR_CH_REQSEL_SOURCESEL_IADC0, ///< Trigger on IADC0_IADC_SCAN.
377 #endif
378 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_IADC0IADC_SINGLE
379 ldmaPeripheralSignal_IADC0_IADC_SINGLE = LDMAXBAR_CH_REQSEL_SIGSEL_IADC0IADC_SINGLE | LDMAXBAR_CH_REQSEL_SOURCESEL_IADC0, ///< Trigger on IADC0_IADC_SINGLE.
380 #endif
381 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_MSCWDATA
382 ldmaPeripheralSignal_MSC_WDATA = LDMAXBAR_CH_REQSEL_SIGSEL_MSCWDATA | LDMAXBAR_CH_REQSEL_SOURCESEL_MSC, ///< Trigger on MSC_WDATA.
383 #endif
384 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_TIMER2CC0
385 ldmaPeripheralSignal_TIMER2_CC0 = LDMAXBAR_CH_REQSEL_SIGSEL_TIMER2CC0 | LDMAXBAR_CH_REQSEL_SOURCESEL_TIMER2, ///< Trigger on TIMER2_CC0.
386 #endif
387 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_TIMER2CC1
388 ldmaPeripheralSignal_TIMER2_CC1 = LDMAXBAR_CH_REQSEL_SIGSEL_TIMER2CC1 | LDMAXBAR_CH_REQSEL_SOURCESEL_TIMER2, ///< Trigger on TIMER2_CC1.
389 #endif
390 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_TIMER2CC2
391 ldmaPeripheralSignal_TIMER2_CC2 = LDMAXBAR_CH_REQSEL_SIGSEL_TIMER2CC2 | LDMAXBAR_CH_REQSEL_SOURCESEL_TIMER2, ///< Trigger on TIMER2_CC2.
392 #endif
393 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_TIMER2UFOF
394 ldmaPeripheralSignal_TIMER2_UFOF = LDMAXBAR_CH_REQSEL_SIGSEL_TIMER2UFOF | LDMAXBAR_CH_REQSEL_SOURCESEL_TIMER2, ///< Trigger on TIMER2_UFOF.
395 #endif
396 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_TIMER3CC0
397 ldmaPeripheralSignal_TIMER3_CC0 = LDMAXBAR_CH_REQSEL_SIGSEL_TIMER3CC0 | LDMAXBAR_CH_REQSEL_SOURCESEL_TIMER3, ///< Trigger on TIMER3_CC0.
398 #endif
399 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_TIMER3CC1
400 ldmaPeripheralSignal_TIMER3_CC1 = LDMAXBAR_CH_REQSEL_SIGSEL_TIMER3CC1 | LDMAXBAR_CH_REQSEL_SOURCESEL_TIMER3, ///< Trigger on TIMER3_CC1.
401 #endif
402 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_TIMER3CC2
403 ldmaPeripheralSignal_TIMER3_CC2 = LDMAXBAR_CH_REQSEL_SIGSEL_TIMER3CC2 | LDMAXBAR_CH_REQSEL_SOURCESEL_TIMER3, ///< Trigger on TIMER3_CC2.
404 #endif
405 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_TIMER3UFOF
406 ldmaPeripheralSignal_TIMER3_UFOF = LDMAXBAR_CH_REQSEL_SIGSEL_TIMER3UFOF | LDMAXBAR_CH_REQSEL_SOURCESEL_TIMER3, ///< Trigger on TIMER3_UFOF.
407 #endif
408 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_TIMER5CC0
409 ldmaPeripheralSignal_TIMER5_CC0 = LDMAXBAR_CH_REQSEL_SIGSEL_TIMER5CC0 | LDMAXBAR_CH_REQSEL_SOURCESEL_TIMER5, ///< Trigger on TIMER5_CC0.
410 #endif
411 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_TIMER5CC1
412 ldmaPeripheralSignal_TIMER5_CC1 = LDMAXBAR_CH_REQSEL_SIGSEL_TIMER5CC1 | LDMAXBAR_CH_REQSEL_SOURCESEL_TIMER5, ///< Trigger on TIMER5_CC1.
413 #endif
414 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_TIMER5CC2
415 ldmaPeripheralSignal_TIMER5_CC2 = LDMAXBAR_CH_REQSEL_SIGSEL_TIMER5CC2 | LDMAXBAR_CH_REQSEL_SOURCESEL_TIMER5, ///< Trigger on TIMER5_CC2.
416 #endif
417 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_TIMER5UFOF
418 ldmaPeripheralSignal_TIMER5_UFOF = LDMAXBAR_CH_REQSEL_SIGSEL_TIMER5UFOF | LDMAXBAR_CH_REQSEL_SOURCESEL_TIMER5, ///< Trigger on TIMER5_UFOF.
419 #endif
420 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_TIMER6CC0
421 ldmaPeripheralSignal_TIMER6_CC0 = LDMAXBAR_CH_REQSEL_SIGSEL_TIMER6CC0 | LDMAXBAR_CH_REQSEL_SOURCESEL_TIMER6, ///< Trigger on TIMER6_CC0.
422 #endif
423 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_TIMER6CC1
424 ldmaPeripheralSignal_TIMER6_CC1 = LDMAXBAR_CH_REQSEL_SIGSEL_TIMER6CC1 | LDMAXBAR_CH_REQSEL_SOURCESEL_TIMER6, ///< Trigger on TIMER6_CC1.
425 #endif
426 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_TIMER6CC2
427 ldmaPeripheralSignal_TIMER6_CC2 = LDMAXBAR_CH_REQSEL_SIGSEL_TIMER6CC2 | LDMAXBAR_CH_REQSEL_SOURCESEL_TIMER6, ///< Trigger on TIMER6_CC2.
428 #endif
429 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_TIMER6UFOF
430 ldmaPeripheralSignal_TIMER6_UFOF = LDMAXBAR_CH_REQSEL_SIGSEL_TIMER6UFOF | LDMAXBAR_CH_REQSEL_SOURCESEL_TIMER6, ///< Trigger on TIMER6_UFOF.
431 #endif
432 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_TIMER7CC0
433 ldmaPeripheralSignal_TIMER7_CC0 = LDMAXBAR_CH_REQSEL_SIGSEL_TIMER7CC0 | LDMAXBAR_CH_REQSEL_SOURCESEL_TIMER7, ///< Trigger on TIMER7_CC0.
434 #endif
435 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_TIMER7CC1
436 ldmaPeripheralSignal_TIMER7_CC1 = LDMAXBAR_CH_REQSEL_SIGSEL_TIMER7CC1 | LDMAXBAR_CH_REQSEL_SOURCESEL_TIMER7, ///< Trigger on TIMER7_CC1.
437 #endif
438 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_TIMER7CC2
439 ldmaPeripheralSignal_TIMER7_CC2 = LDMAXBAR_CH_REQSEL_SIGSEL_TIMER7CC2 | LDMAXBAR_CH_REQSEL_SOURCESEL_TIMER7, ///< Trigger on TIMER7_CC2.
440 #endif
441 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_TIMER7UFOF
442 ldmaPeripheralSignal_TIMER7_UFOF = LDMAXBAR_CH_REQSEL_SIGSEL_TIMER7UFOF | LDMAXBAR_CH_REQSEL_SOURCESEL_TIMER7, ///< Trigger on TIMER7_UFOF.
443 #endif
444 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_LCD
445 ldmaPeripheralSignal_LCD = LDMAXBAR_CH_REQSEL_SIGSEL_LCD | LDMAXBAR_CH_REQSEL_SOURCESEL_LCD,
446 #endif
447 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_TIMER4CC0
448 ldmaPeripheralSignal_TIMER4_CC0 = LDMAXBAR_CH_REQSEL_SIGSEL_TIMER4CC0 | LDMAXBAR_CH_REQSEL_SOURCESEL_TIMER4, ///< Trigger on TIMER4_CC0.
449 #endif
450 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_TIMER4CC1
451 ldmaPeripheralSignal_TIMER4_CC1 = LDMAXBAR_CH_REQSEL_SIGSEL_TIMER4CC1 | LDMAXBAR_CH_REQSEL_SOURCESEL_TIMER4, ///< Trigger on TIMER4_CC1.
452 #endif
453 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_TIMER4CC2
454 ldmaPeripheralSignal_TIMER4_CC2 = LDMAXBAR_CH_REQSEL_SIGSEL_TIMER4CC2 | LDMAXBAR_CH_REQSEL_SOURCESEL_TIMER4, ///< Trigger on TIMER4_CC2.
455 #endif
456 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_TIMER4UFOF
457 ldmaPeripheralSignal_TIMER4_UFOF = LDMAXBAR_CH_REQSEL_SIGSEL_TIMER4UFOF | LDMAXBAR_CH_REQSEL_SOURCESEL_TIMER4, ///< Trigger on TIMER4_UFOF.
458 #endif
459 #if defined(LDMAXBAR_CH_REQSEL_SIGSEL_VDAC0CH0_REQ)
460 ldmaPeripheralSignal_VDAC0CH0REQ = LDMAXBAR_CH_REQSEL_SIGSEL_VDAC0CH0_REQ | LDMAXBAR_CH_REQSEL_SOURCESEL_VDAC0, ///< Trigger on VDAC0_CH0REQ.
461 #endif
462 #if defined(LDMAXBAR_CH_REQSEL_SIGSEL_VDAC0CH1_REQ)
463 ldmaPeripheralSignal_VDAC0CH1REQ = LDMAXBAR_CH_REQSEL_SIGSEL_VDAC0CH1_REQ | LDMAXBAR_CH_REQSEL_SOURCESEL_VDAC0, ///< Trigger on VDAC0_CH1REQ.
464 #endif
465 #if defined(LDMAXBAR_CH_REQSEL_SIGSEL_VDAC1CH0_REQ)
466 ldmaPeripheralSignal_VDAC1CH0REQ = LDMAXBAR_CH_REQSEL_SIGSEL_VDAC1CH0_REQ | LDMAXBAR_CH_REQSEL_SOURCESEL_VDAC1, ///< Trigger on VDAC1_CH0REQ.
467 #endif
468 #if defined(LDMAXBAR_CH_REQSEL_SIGSEL_VDAC1CH1_REQ)
469 ldmaPeripheralSignal_VDAC1CH1REQ = LDMAXBAR_CH_REQSEL_SIGSEL_VDAC1CH1_REQ | LDMAXBAR_CH_REQSEL_SOURCESEL_VDAC1, ///< Trigger on VDAC1_CH1REQ.
470 #endif
471 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_EUART0RXFL
472 ldmaPeripheralSignal_EUART0_RXFL = LDMAXBAR_CH_REQSEL_SIGSEL_EUART0RXFL | LDMAXBAR_CH_REQSEL_SOURCESEL_EUART0, ///< Trigger on EUART0_RXFL.
473 #endif
474 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_EUART0TXFL
475 ldmaPeripheralSignal_EUART0_TXFL = LDMAXBAR_CH_REQSEL_SIGSEL_EUART0TXFL | LDMAXBAR_CH_REQSEL_SOURCESEL_EUART0, ///< Trigger on EUART0_TXFL.
476 #endif
477 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_EUSART0RXFL
478 ldmaPeripheralSignal_EUSART0_RXFL = LDMAXBAR_CH_REQSEL_SIGSEL_EUSART0RXFL | LDMAXBAR_CH_REQSEL_SOURCESEL_EUSART0, ///< Trigger on EUSART0_RXFL.
479 #endif
480 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_EUSART0TXFL
481 ldmaPeripheralSignal_EUSART0_TXFL = LDMAXBAR_CH_REQSEL_SIGSEL_EUSART0TXFL | LDMAXBAR_CH_REQSEL_SOURCESEL_EUSART0, ///< Trigger on EUSART0_TXFL.
482 #endif
483 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_EUSART1RXFL
484 ldmaPeripheralSignal_EUSART1_RXFL = LDMAXBAR_CH_REQSEL_SIGSEL_EUSART1RXFL | LDMAXBAR_CH_REQSEL_SOURCESEL_EUSART1, ///< Trigger on EUSART1_RXFL.
485 #endif
486 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_EUSART1TXFL
487 ldmaPeripheralSignal_EUSART1_TXFL = LDMAXBAR_CH_REQSEL_SIGSEL_EUSART1TXFL | LDMAXBAR_CH_REQSEL_SOURCESEL_EUSART1, ///< Trigger on EUSART1_TXFL.
488 #endif
489 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_EUSART2RXFL
490 ldmaPeripheralSignal_EUSART2_RXFL = LDMAXBAR_CH_REQSEL_SIGSEL_EUSART2RXFL | LDMAXBAR_CH_REQSEL_SOURCESEL_EUSART2, ///< Trigger on EUSART2_RXFL.
491 #endif
492 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_EUSART2TXFL
493 ldmaPeripheralSignal_EUSART2_TXFL = LDMAXBAR_CH_REQSEL_SIGSEL_EUSART2TXFL | LDMAXBAR_CH_REQSEL_SOURCESEL_EUSART2, ///< Trigger on EUSART2_TXFL.
494 #endif
495 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_EUSART3RXFL
496 ldmaPeripheralSignal_EUSART3_RXFL = LDMAXBAR_CH_REQSEL_SIGSEL_EUSART3RXFL | LDMAXBAR_CH_REQSEL_SOURCESEL_EUSART3, ///< Trigger on EUSART3_RXFL.
497 #endif
498 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_EUSART3TXFL
499 ldmaPeripheralSignal_EUSART3_TXFL = LDMAXBAR_CH_REQSEL_SIGSEL_EUSART3TXFL | LDMAXBAR_CH_REQSEL_SOURCESEL_EUSART3, ///< Trigger on EUSART3_TXFL.
500 #endif
501 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_EUSART4RXFL
502 ldmaPeripheralSignal_EUSART4_RXFL = LDMAXBAR_CH_REQSEL_SIGSEL_EUSART4RXFL | LDMAXBAR_CH_REQSEL_SOURCESEL_EUSART4, ///< Trigger on EUSART4_RXFL.
503 #endif
504 #if defined LDMAXBAR_CH_REQSEL_SIGSEL_EUSART4TXFL
505 ldmaPeripheralSignal_EUSART4_TXFL = LDMAXBAR_CH_REQSEL_SIGSEL_EUSART4TXFL | LDMAXBAR_CH_REQSEL_SOURCESEL_EUSART4, ///< Trigger on EUSART4_TXFL.
506 #endif
507 #if defined(LDMAXBAR_CH_REQSEL_SIGSEL_LESENSEFIFO)
508 ldmaPeripheralSignal_LESENSE_BUFDATAV = LDMAXBAR_CH_REQSEL_SIGSEL_LESENSEFIFO | LDMAXBAR_CH_REQSEL_SOURCESEL_LESENSE, ///< Trigger on LESENSEFIFO.
509 #endif
510 } LDMA_PeripheralSignal_t;
511
512 #else
513 /** Peripherals that can trigger LDMA transfers. */
514 typedef enum {
515 ldmaPeripheralSignal_NONE = LDMA_CH_REQSEL_SOURCESEL_NONE, ///< No peripheral selected for DMA triggering.
516 #if defined(LDMA_CH_REQSEL_SIGSEL_ADC0SCAN)
517 ldmaPeripheralSignal_ADC0_SCAN = LDMA_CH_REQSEL_SIGSEL_ADC0SCAN | LDMA_CH_REQSEL_SOURCESEL_ADC0, ///< Trigger on ADC0_SCAN.
518 #endif
519 #if defined(LDMA_CH_REQSEL_SIGSEL_ADC0SINGLE)
520 ldmaPeripheralSignal_ADC0_SINGLE = LDMA_CH_REQSEL_SIGSEL_ADC0SINGLE | LDMA_CH_REQSEL_SOURCESEL_ADC0, ///< Trigger on ADC0_SINGLE.
521 #endif
522 #if defined(LDMA_CH_REQSEL_SIGSEL_ADC1SCAN)
523 ldmaPeripheralSignal_ADC1_SCAN = LDMA_CH_REQSEL_SIGSEL_ADC1SCAN | LDMA_CH_REQSEL_SOURCESEL_ADC1, ///< Trigger on ADC1_SCAN.
524 #endif
525 #if defined(LDMA_CH_REQSEL_SIGSEL_ADC1SINGLE)
526 ldmaPeripheralSignal_ADC1_SINGLE = LDMA_CH_REQSEL_SIGSEL_ADC1SINGLE | LDMA_CH_REQSEL_SOURCESEL_ADC1, ///< Trigger on ADC1_SINGLE.
527 #endif
528 #if defined(LDMA_CH_REQSEL_SIGSEL_CRYPTODATA0RD)
529 ldmaPeripheralSignal_CRYPTO_DATA0RD = LDMA_CH_REQSEL_SIGSEL_CRYPTODATA0RD | LDMA_CH_REQSEL_SOURCESEL_CRYPTO, ///< Trigger on CRYPTO_DATA0RD.
530 #endif
531 #if defined(LDMA_CH_REQSEL_SIGSEL_CRYPTODATA0WR)
532 ldmaPeripheralSignal_CRYPTO_DATA0WR = LDMA_CH_REQSEL_SIGSEL_CRYPTODATA0WR | LDMA_CH_REQSEL_SOURCESEL_CRYPTO, ///< Trigger on CRYPTO_DATA0WR.
533 #endif
534 #if defined(LDMA_CH_REQSEL_SIGSEL_CRYPTODATA0XWR)
535 ldmaPeripheralSignal_CRYPTO_DATA0XWR = LDMA_CH_REQSEL_SIGSEL_CRYPTODATA0XWR | LDMA_CH_REQSEL_SOURCESEL_CRYPTO, ///< Trigger on CRYPTO_DATA0XWR.
536 #endif
537 #if defined(LDMA_CH_REQSEL_SIGSEL_CRYPTODATA1RD)
538 ldmaPeripheralSignal_CRYPTO_DATA1RD = LDMA_CH_REQSEL_SIGSEL_CRYPTODATA1RD | LDMA_CH_REQSEL_SOURCESEL_CRYPTO, ///< Trigger on CRYPTO_DATA1RD.
539 #endif
540 #if defined(LDMA_CH_REQSEL_SIGSEL_CRYPTODATA1WR)
541 ldmaPeripheralSignal_CRYPTO_DATA1WR = LDMA_CH_REQSEL_SIGSEL_CRYPTODATA1WR | LDMA_CH_REQSEL_SOURCESEL_CRYPTO, ///< Trigger on CRYPTO_DATA1WR.
542 #endif
543 #if defined(LDMA_CH_REQSEL_SIGSEL_CRYPTO0DATA0RD)
544 ldmaPeripheralSignal_CRYPTO0_DATA0RD = LDMA_CH_REQSEL_SIGSEL_CRYPTO0DATA0RD | LDMA_CH_REQSEL_SOURCESEL_CRYPTO0, ///< Trigger on CRYPTO0_DATA0RD.
545 #endif
546 #if defined(LDMA_CH_REQSEL_SIGSEL_CRYPTO0DATA0WR)
547 ldmaPeripheralSignal_CRYPTO0_DATA0WR = LDMA_CH_REQSEL_SIGSEL_CRYPTO0DATA0WR | LDMA_CH_REQSEL_SOURCESEL_CRYPTO0, ///< Trigger on CRYPTO0_DATA0WR.
548 #endif
549 #if defined(LDMA_CH_REQSEL_SIGSEL_CRYPTO0DATA0XWR)
550 ldmaPeripheralSignal_CRYPTO0_DATA0XWR = LDMA_CH_REQSEL_SIGSEL_CRYPTO0DATA0XWR | LDMA_CH_REQSEL_SOURCESEL_CRYPTO0, ///< Trigger on CRYPTO0_DATA0XWR.
551 #endif
552 #if defined(LDMA_CH_REQSEL_SIGSEL_CRYPTO0DATA1RD)
553 ldmaPeripheralSignal_CRYPTO0_DATA1RD = LDMA_CH_REQSEL_SIGSEL_CRYPTO0DATA1RD | LDMA_CH_REQSEL_SOURCESEL_CRYPTO0, ///< Trigger on CRYPTO0_DATA1RD.
554 #endif
555 #if defined(LDMA_CH_REQSEL_SIGSEL_CRYPTO0DATA1WR)
556 ldmaPeripheralSignal_CRYPTO0_DATA1WR = LDMA_CH_REQSEL_SIGSEL_CRYPTO0DATA1WR | LDMA_CH_REQSEL_SOURCESEL_CRYPTO0, ///< Trigger on CRYPTO0_DATA1WR.
557 #endif
558 #if defined(LDMA_CH_REQSEL_SIGSEL_CRYPTO1DATA0RD)
559 ldmaPeripheralSignal_CRYPTO1_DATA0RD = LDMA_CH_REQSEL_SIGSEL_CRYPTO1DATA0RD | LDMA_CH_REQSEL_SOURCESEL_CRYPTO1, ///< Trigger on CRYPTO1_DATA0RD.
560 #endif
561 #if defined(LDMA_CH_REQSEL_SIGSEL_CRYPTO1DATA0WR)
562 ldmaPeripheralSignal_CRYPTO1_DATA0WR = LDMA_CH_REQSEL_SIGSEL_CRYPTO1DATA0WR | LDMA_CH_REQSEL_SOURCESEL_CRYPTO1, ///< Trigger on CRYPTO1_DATA0WR.
563 #endif
564 #if defined(LDMA_CH_REQSEL_SIGSEL_CRYPTO1DATA0XWR)
565 ldmaPeripheralSignal_CRYPTO1_DATA0XWR = LDMA_CH_REQSEL_SIGSEL_CRYPTO1DATA0XWR | LDMA_CH_REQSEL_SOURCESEL_CRYPTO1, ///< Trigger on CRYPTO1_DATA0XWR.
566 #endif
567 #if defined(LDMA_CH_REQSEL_SIGSEL_CRYPTO1DATA1RD)
568 ldmaPeripheralSignal_CRYPTO1_DATA1RD = LDMA_CH_REQSEL_SIGSEL_CRYPTO1DATA1RD | LDMA_CH_REQSEL_SOURCESEL_CRYPTO1, ///< Trigger on CRYPTO1_DATA1RD.
569 #endif
570 #if defined(LDMA_CH_REQSEL_SIGSEL_CRYPTO1DATA1WR)
571 ldmaPeripheralSignal_CRYPTO1_DATA1WR = LDMA_CH_REQSEL_SIGSEL_CRYPTO1DATA1WR | LDMA_CH_REQSEL_SOURCESEL_CRYPTO1, ///< Trigger on CRYPTO1_DATA1WR.
572 #endif
573 #if defined(LDMA_CH_REQSEL_SIGSEL_CSENBSLN)
574 ldmaPeripheralSignal_CSEN_BSLN = LDMA_CH_REQSEL_SIGSEL_CSENBSLN | LDMA_CH_REQSEL_SOURCESEL_CSEN, ///< Trigger on CSEN_BSLN.
575 #endif
576 #if defined(LDMA_CH_REQSEL_SIGSEL_CSENDATA)
577 ldmaPeripheralSignal_CSEN_DATA = LDMA_CH_REQSEL_SIGSEL_CSENDATA | LDMA_CH_REQSEL_SOURCESEL_CSEN, ///< Trigger on CSEN_DATA.
578 #endif
579 #if defined(LDMA_CH_REQSEL_SIGSEL_EBIPXL0EMPTY)
580 ldmaPeripheralSignal_EBI_PXL0EMPTY = LDMA_CH_REQSEL_SIGSEL_EBIPXL0EMPTY | LDMA_CH_REQSEL_SOURCESEL_EBI, ///< Trigger on EBI_PXL0EMPTY.
581 #endif
582 #if defined(LDMA_CH_REQSEL_SIGSEL_EBIPXL1EMPTY)
583 ldmaPeripheralSignal_EBI_PXL1EMPTY = LDMA_CH_REQSEL_SIGSEL_EBIPXL1EMPTY | LDMA_CH_REQSEL_SOURCESEL_EBI, ///< Trigger on EBI_PXL1EMPTY.
584 #endif
585 #if defined(LDMA_CH_REQSEL_SIGSEL_EBIPXLFULL)
586 ldmaPeripheralSignal_EBI_PXLFULL = LDMA_CH_REQSEL_SIGSEL_EBIPXLFULL | LDMA_CH_REQSEL_SOURCESEL_EBI, ///< Trigger on EBI_PXLFULL.
587 #endif
588 #if defined(LDMA_CH_REQSEL_SIGSEL_EBIDDEMPTY)
589 ldmaPeripheralSignal_EBI_DDEMPTY = LDMA_CH_REQSEL_SIGSEL_EBIDDEMPTY | LDMA_CH_REQSEL_SOURCESEL_EBI, ///< Trigger on EBI_DDEMPTY.
590 #endif
591 #if defined(LDMA_CH_REQSEL_SIGSEL_EBIVSYNC)
592 ldmaPeripheralSignal_EBI_VSYNC = LDMA_CH_REQSEL_SIGSEL_EBIVSYNC | LDMA_CH_REQSEL_SOURCESEL_EBI, ///< Trigger on EBI_VSYNC.
593 #endif
594 #if defined(LDMA_CH_REQSEL_SIGSEL_EBIHSYNC)
595 ldmaPeripheralSignal_EBI_HSYNC = LDMA_CH_REQSEL_SIGSEL_EBIHSYNC | LDMA_CH_REQSEL_SOURCESEL_EBI, ///< Trigger on EBI_HSYNC.
596 #endif
597 #if defined(LDMA_CH_REQSEL_SIGSEL_I2C0RXDATAV)
598 ldmaPeripheralSignal_I2C0_RXDATAV = LDMA_CH_REQSEL_SIGSEL_I2C0RXDATAV | LDMA_CH_REQSEL_SOURCESEL_I2C0, ///< Trigger on I2C0_RXDATAV.
599 #endif
600 #if defined(LDMA_CH_REQSEL_SIGSEL_I2C0TXBL)
601 ldmaPeripheralSignal_I2C0_TXBL = LDMA_CH_REQSEL_SIGSEL_I2C0TXBL | LDMA_CH_REQSEL_SOURCESEL_I2C0, ///< Trigger on I2C0_TXBL.
602 #endif
603 #if defined(LDMA_CH_REQSEL_SIGSEL_I2C1RXDATAV)
604 ldmaPeripheralSignal_I2C1_RXDATAV = LDMA_CH_REQSEL_SIGSEL_I2C1RXDATAV | LDMA_CH_REQSEL_SOURCESEL_I2C1, ///< Trigger on I2C1_RXDATAV.
605 #endif
606 #if defined(LDMA_CH_REQSEL_SIGSEL_I2C1TXBL)
607 ldmaPeripheralSignal_I2C1_TXBL = LDMA_CH_REQSEL_SIGSEL_I2C1TXBL | LDMA_CH_REQSEL_SOURCESEL_I2C1, ///< Trigger on I2C1_TXBL.
608 #endif
609 #if defined(LDMA_CH_REQSEL_SIGSEL_I2C2RXDATAV)
610 ldmaPeripheralSignal_I2C2_RXDATAV = LDMA_CH_REQSEL_SIGSEL_I2C2RXDATAV | LDMA_CH_REQSEL_SOURCESEL_I2C2, ///< Trigger on I2C2_RXDATAV.
611 #endif
612 #if defined(LDMA_CH_REQSEL_SIGSEL_I2C2TXBL)
613 ldmaPeripheralSignal_I2C2_TXBL = LDMA_CH_REQSEL_SIGSEL_I2C2TXBL | LDMA_CH_REQSEL_SOURCESEL_I2C2, ///< Trigger on I2C2_TXBL.
614 #endif
615 #if defined(LDMA_CH_REQSEL_SIGSEL_LESENSEBUFDATAV)
616 ldmaPeripheralSignal_LESENSE_BUFDATAV = LDMA_CH_REQSEL_SIGSEL_LESENSEBUFDATAV | LDMA_CH_REQSEL_SOURCESEL_LESENSE, ///< Trigger on LESENSE_BUFDATAV.
617 #endif
618 #if defined(LDMA_CH_REQSEL_SIGSEL_LEUART0RXDATAV)
619 ldmaPeripheralSignal_LEUART0_RXDATAV = LDMA_CH_REQSEL_SIGSEL_LEUART0RXDATAV | LDMA_CH_REQSEL_SOURCESEL_LEUART0, ///< Trigger on LEUART0_RXDATAV.
620 #endif
621 #if defined(LDMA_CH_REQSEL_SIGSEL_LEUART0TXBL)
622 ldmaPeripheralSignal_LEUART0_TXBL = LDMA_CH_REQSEL_SIGSEL_LEUART0TXBL | LDMA_CH_REQSEL_SOURCESEL_LEUART0, ///< Trigger on LEUART0_TXBL.
623 #endif
624 #if defined(LDMA_CH_REQSEL_SIGSEL_LEUART0TXEMPTY)
625 ldmaPeripheralSignal_LEUART0_TXEMPTY = LDMA_CH_REQSEL_SIGSEL_LEUART0TXEMPTY | LDMA_CH_REQSEL_SOURCESEL_LEUART0, ///< Trigger on LEUART0_TXEMPTY.
626 #endif
627 #if defined(LDMA_CH_REQSEL_SIGSEL_LEUART1RXDATAV)
628 ldmaPeripheralSignal_LEUART1_RXDATAV = LDMA_CH_REQSEL_SIGSEL_LEUART1RXDATAV | LDMA_CH_REQSEL_SOURCESEL_LEUART1, ///< Trigger on LEUART1_RXDATAV.
629 #endif
630 #if defined(LDMA_CH_REQSEL_SIGSEL_LEUART1TXBL)
631 ldmaPeripheralSignal_LEUART1_TXBL = LDMA_CH_REQSEL_SIGSEL_LEUART1TXBL | LDMA_CH_REQSEL_SOURCESEL_LEUART1, ///< Trigger on LEUART1_TXBL.
632 #endif
633 #if defined(LDMA_CH_REQSEL_SIGSEL_LEUART1TXEMPTY)
634 ldmaPeripheralSignal_LEUART1_TXEMPTY = LDMA_CH_REQSEL_SIGSEL_LEUART1TXEMPTY | LDMA_CH_REQSEL_SOURCESEL_LEUART1, ///< Trigger on LEUART1_TXEMPTY.
635 #endif
636 #if defined(LDMA_CH_REQSEL_SIGSEL_MSCWDATA)
637 ldmaPeripheralSignal_MSC_WDATA = LDMA_CH_REQSEL_SIGSEL_MSCWDATA | LDMA_CH_REQSEL_SOURCESEL_MSC, ///< Trigger on MSC_WDATA.
638 #endif
639 #if defined(LDMA_CH_REQSEL_SIGSEL_PDMRXDATAV)
640 ldmaPeripheralSignal_PDM_RXDATAV = LDMA_CH_REQSEL_SIGSEL_PDMRXDATAV | LDMA_CH_REQSEL_SOURCESEL_PDM, ///< Trigger on PDM_RXDATAV.
641 #endif
642 #if defined(LDMA_CH_REQSEL_SIGSEL_PRSREQ0)
643 ldmaPeripheralSignal_PRS_REQ0 = LDMA_CH_REQSEL_SIGSEL_PRSREQ0 | LDMA_CH_REQSEL_SOURCESEL_PRS, ///< Trigger on PRS_REQ0.
644 #endif
645 #if defined(LDMA_CH_REQSEL_SIGSEL_PRSREQ1)
646 ldmaPeripheralSignal_PRS_REQ1 = LDMA_CH_REQSEL_SIGSEL_PRSREQ1 | LDMA_CH_REQSEL_SOURCESEL_PRS, ///< Trigger on PRS_REQ1.
647 #endif
648 #if defined(LDMA_CH_REQSEL_SIGSEL_TIMER0CC0)
649 ldmaPeripheralSignal_TIMER0_CC0 = LDMA_CH_REQSEL_SIGSEL_TIMER0CC0 | LDMA_CH_REQSEL_SOURCESEL_TIMER0, ///< Trigger on TIMER0_CC0.
650 #endif
651 #if defined(LDMA_CH_REQSEL_SIGSEL_TIMER0CC1)
652 ldmaPeripheralSignal_TIMER0_CC1 = LDMA_CH_REQSEL_SIGSEL_TIMER0CC1 | LDMA_CH_REQSEL_SOURCESEL_TIMER0, ///< Trigger on TIMER0_CC1.
653 #endif
654 #if defined(LDMA_CH_REQSEL_SIGSEL_TIMER0CC2)
655 ldmaPeripheralSignal_TIMER0_CC2 = LDMA_CH_REQSEL_SIGSEL_TIMER0CC2 | LDMA_CH_REQSEL_SOURCESEL_TIMER0, ///< Trigger on TIMER0_CC2.
656 #endif
657 #if defined(LDMA_CH_REQSEL_SIGSEL_TIMER0UFOF)
658 ldmaPeripheralSignal_TIMER0_UFOF = LDMA_CH_REQSEL_SIGSEL_TIMER0UFOF | LDMA_CH_REQSEL_SOURCESEL_TIMER0, ///< Trigger on TIMER0_UFOF.
659 #endif
660 #if defined(LDMA_CH_REQSEL_SIGSEL_TIMER1CC0)
661 ldmaPeripheralSignal_TIMER1_CC0 = LDMA_CH_REQSEL_SIGSEL_TIMER1CC0 | LDMA_CH_REQSEL_SOURCESEL_TIMER1, ///< Trigger on TIMER1_CC0.
662 #endif
663 #if defined(LDMA_CH_REQSEL_SIGSEL_TIMER1CC1)
664 ldmaPeripheralSignal_TIMER1_CC1 = LDMA_CH_REQSEL_SIGSEL_TIMER1CC1 | LDMA_CH_REQSEL_SOURCESEL_TIMER1, ///< Trigger on TIMER1_CC1.
665 #endif
666 #if defined(LDMA_CH_REQSEL_SIGSEL_TIMER1CC2)
667 ldmaPeripheralSignal_TIMER1_CC2 = LDMA_CH_REQSEL_SIGSEL_TIMER1CC2 | LDMA_CH_REQSEL_SOURCESEL_TIMER1, ///< Trigger on TIMER1_CC2.
668 #endif
669 #if defined(LDMA_CH_REQSEL_SIGSEL_TIMER1CC3)
670 ldmaPeripheralSignal_TIMER1_CC3 = LDMA_CH_REQSEL_SIGSEL_TIMER1CC3 | LDMA_CH_REQSEL_SOURCESEL_TIMER1, ///< Trigger on TIMER1_CC3.
671 #endif
672 #if defined(LDMA_CH_REQSEL_SIGSEL_TIMER1UFOF)
673 ldmaPeripheralSignal_TIMER1_UFOF = LDMA_CH_REQSEL_SIGSEL_TIMER1UFOF | LDMA_CH_REQSEL_SOURCESEL_TIMER1, ///< Trigger on TIMER1_UFOF.
674 #endif
675 #if defined(LDMA_CH_REQSEL_SIGSEL_TIMER2CC0)
676 ldmaPeripheralSignal_TIMER2_CC0 = LDMA_CH_REQSEL_SIGSEL_TIMER2CC0 | LDMA_CH_REQSEL_SOURCESEL_TIMER2, ///< Trigger on TIMER2_CC0.
677 #endif
678 #if defined(LDMA_CH_REQSEL_SIGSEL_TIMER2CC1)
679 ldmaPeripheralSignal_TIMER2_CC1 = LDMA_CH_REQSEL_SIGSEL_TIMER2CC1 | LDMA_CH_REQSEL_SOURCESEL_TIMER2, ///< Trigger on TIMER2_CC1.
680 #endif
681 #if defined(LDMA_CH_REQSEL_SIGSEL_TIMER2CC2)
682 ldmaPeripheralSignal_TIMER2_CC2 = LDMA_CH_REQSEL_SIGSEL_TIMER2CC2 | LDMA_CH_REQSEL_SOURCESEL_TIMER2, ///< Trigger on TIMER2_CC2.
683 #endif
684 #if defined(LDMA_CH_REQSEL_SIGSEL_TIMER2UFOF)
685 ldmaPeripheralSignal_TIMER2_UFOF = LDMA_CH_REQSEL_SIGSEL_TIMER2UFOF | LDMA_CH_REQSEL_SOURCESEL_TIMER2, ///< Trigger on TIMER2_UFOF.
686 #endif
687 #if defined(LDMA_CH_REQSEL_SIGSEL_TIMER3CC0)
688 ldmaPeripheralSignal_TIMER3_CC0 = LDMA_CH_REQSEL_SIGSEL_TIMER3CC0 | LDMA_CH_REQSEL_SOURCESEL_TIMER3, ///< Trigger on TIMER3_CC0.
689 #endif
690 #if defined(LDMA_CH_REQSEL_SIGSEL_TIMER3CC1)
691 ldmaPeripheralSignal_TIMER3_CC1 = LDMA_CH_REQSEL_SIGSEL_TIMER3CC1 | LDMA_CH_REQSEL_SOURCESEL_TIMER3, ///< Trigger on TIMER3_CC1.
692 #endif
693 #if defined(LDMA_CH_REQSEL_SIGSEL_TIMER3CC2)
694 ldmaPeripheralSignal_TIMER3_CC2 = LDMA_CH_REQSEL_SIGSEL_TIMER3CC2 | LDMA_CH_REQSEL_SOURCESEL_TIMER3, ///< Trigger on TIMER3_CC2.
695 #endif
696 #if defined(LDMA_CH_REQSEL_SIGSEL_TIMER3UFOF)
697 ldmaPeripheralSignal_TIMER3_UFOF = LDMA_CH_REQSEL_SIGSEL_TIMER3UFOF | LDMA_CH_REQSEL_SOURCESEL_TIMER3, ///< Trigger on TIMER3_UFOF.
698 #endif
699 #if defined(LDMA_CH_REQSEL_SIGSEL_TIMER4CC0)
700 ldmaPeripheralSignal_TIMER4_CC0 = LDMA_CH_REQSEL_SIGSEL_TIMER4CC0 | LDMA_CH_REQSEL_SOURCESEL_TIMER4, ///< Trigger on TIMER4_CC0.
701 #endif
702 #if defined(LDMA_CH_REQSEL_SIGSEL_TIMER4CC1)
703 ldmaPeripheralSignal_TIMER4_CC1 = LDMA_CH_REQSEL_SIGSEL_TIMER4CC1 | LDMA_CH_REQSEL_SOURCESEL_TIMER4, ///< Trigger on TIMER4_CC1.
704 #endif
705 #if defined(LDMA_CH_REQSEL_SIGSEL_TIMER4CC2)
706 ldmaPeripheralSignal_TIMER4_CC2 = LDMA_CH_REQSEL_SIGSEL_TIMER4CC2 | LDMA_CH_REQSEL_SOURCESEL_TIMER4, ///< Trigger on TIMER4_CC2.
707 #endif
708 #if defined(LDMA_CH_REQSEL_SIGSEL_TIMER4UFOF)
709 ldmaPeripheralSignal_TIMER4_UFOF = LDMA_CH_REQSEL_SIGSEL_TIMER4UFOF | LDMA_CH_REQSEL_SOURCESEL_TIMER4, ///< Trigger on TIMER4_UFOF.
710 #endif
711 #if defined(LDMA_CH_REQSEL_SIGSEL_TIMER5CC0)
712 ldmaPeripheralSignal_TIMER5_CC0 = LDMA_CH_REQSEL_SIGSEL_TIMER5CC0 | LDMA_CH_REQSEL_SOURCESEL_TIMER5, ///< Trigger on TIMER5_CC0.
713 #endif
714 #if defined(LDMA_CH_REQSEL_SIGSEL_TIMER5CC1)
715 ldmaPeripheralSignal_TIMER5_CC1 = LDMA_CH_REQSEL_SIGSEL_TIMER5CC1 | LDMA_CH_REQSEL_SOURCESEL_TIMER5, ///< Trigger on TIMER5_CC1.
716 #endif
717 #if defined(LDMA_CH_REQSEL_SIGSEL_TIMER5CC2)
718 ldmaPeripheralSignal_TIMER5_CC2 = LDMA_CH_REQSEL_SIGSEL_TIMER5CC2 | LDMA_CH_REQSEL_SOURCESEL_TIMER5, ///< Trigger on TIMER5_CC2.
719 #endif
720 #if defined(LDMA_CH_REQSEL_SIGSEL_TIMER5UFOF)
721 ldmaPeripheralSignal_TIMER5_UFOF = LDMA_CH_REQSEL_SIGSEL_TIMER5UFOF | LDMA_CH_REQSEL_SOURCESEL_TIMER5, ///< Trigger on TIMER5_UFOF.
722 #endif
723 #if defined(LDMA_CH_REQSEL_SIGSEL_TIMER6CC0)
724 ldmaPeripheralSignal_TIMER6_CC0 = LDMA_CH_REQSEL_SIGSEL_TIMER6CC0 | LDMA_CH_REQSEL_SOURCESEL_TIMER6, ///< Trigger on TIMER6_CC0.
725 #endif
726 #if defined(LDMA_CH_REQSEL_SIGSEL_TIMER6CC1)
727 ldmaPeripheralSignal_TIMER6_CC1 = LDMA_CH_REQSEL_SIGSEL_TIMER6CC1 | LDMA_CH_REQSEL_SOURCESEL_TIMER6, ///< Trigger on TIMER6_CC1.
728 #endif
729 #if defined(LDMA_CH_REQSEL_SIGSEL_TIMER6CC2)
730 ldmaPeripheralSignal_TIMER6_CC2 = LDMA_CH_REQSEL_SIGSEL_TIMER6CC2 | LDMA_CH_REQSEL_SOURCESEL_TIMER6, ///< Trigger on TIMER6_CC2.
731 #endif
732 #if defined(LDMA_CH_REQSEL_SIGSEL_TIMER6UFOF)
733 ldmaPeripheralSignal_TIMER6_UFOF = LDMA_CH_REQSEL_SIGSEL_TIMER6UFOF | LDMA_CH_REQSEL_SOURCESEL_TIMER6, ///< Trigger on TIMER6_UFOF.
734 #endif
735 #if defined(LDMA_CH_REQSEL_SIGSEL_UART0RXDATAV)
736 ldmaPeripheralSignal_UART0_RXDATAV = LDMA_CH_REQSEL_SIGSEL_UART0RXDATAV | LDMA_CH_REQSEL_SOURCESEL_UART0, ///< Trigger on UART0_RXDATAV.
737 #endif
738 #if defined(LDMA_CH_REQSEL_SIGSEL_UART0TXBL)
739 ldmaPeripheralSignal_UART0_TXBL = LDMA_CH_REQSEL_SIGSEL_UART0TXBL | LDMA_CH_REQSEL_SOURCESEL_UART0, ///< Trigger on UART0_TXBL.
740 #endif
741 #if defined(LDMA_CH_REQSEL_SIGSEL_UART0TXEMPTY)
742 ldmaPeripheralSignal_UART0_TXEMPTY = LDMA_CH_REQSEL_SIGSEL_UART0TXEMPTY | LDMA_CH_REQSEL_SOURCESEL_UART0, ///< Trigger on UART0_TXEMPTY.
743 #endif
744 #if defined(LDMA_CH_REQSEL_SIGSEL_UART1RXDATAV)
745 ldmaPeripheralSignal_UART1_RXDATAV = LDMA_CH_REQSEL_SIGSEL_UART1RXDATAV | LDMA_CH_REQSEL_SOURCESEL_UART1, ///< Trigger on UART1_RXDATAV.
746 #endif
747 #if defined(LDMA_CH_REQSEL_SIGSEL_UART1TXBL)
748 ldmaPeripheralSignal_UART1_TXBL = LDMA_CH_REQSEL_SIGSEL_UART1TXBL | LDMA_CH_REQSEL_SOURCESEL_UART1, ///< Trigger on UART1_TXBL.
749 #endif
750 #if defined(LDMA_CH_REQSEL_SIGSEL_UART1TXEMPTY)
751 ldmaPeripheralSignal_UART1_TXEMPTY = LDMA_CH_REQSEL_SIGSEL_UART1TXEMPTY | LDMA_CH_REQSEL_SOURCESEL_UART1, ///< Trigger on UART1_TXEMPTY.
752 #endif
753 #if defined(LDMA_CH_REQSEL_SIGSEL_USART0RXDATAV)
754 ldmaPeripheralSignal_USART0_RXDATAV = LDMA_CH_REQSEL_SIGSEL_USART0RXDATAV | LDMA_CH_REQSEL_SOURCESEL_USART0, ///< Trigger on USART0_RXDATAV.
755 #endif
756 #if defined(LDMA_CH_REQSEL_SIGSEL_USART0TXBL)
757 ldmaPeripheralSignal_USART0_TXBL = LDMA_CH_REQSEL_SIGSEL_USART0TXBL | LDMA_CH_REQSEL_SOURCESEL_USART0, ///< Trigger on USART0_TXBL.
758 #endif
759 #if defined(LDMA_CH_REQSEL_SIGSEL_USART0TXEMPTY)
760 ldmaPeripheralSignal_USART0_TXEMPTY = LDMA_CH_REQSEL_SIGSEL_USART0TXEMPTY | LDMA_CH_REQSEL_SOURCESEL_USART0, ///< Trigger on USART0_TXEMPTY.
761 #endif
762 #if defined(LDMA_CH_REQSEL_SIGSEL_USART1RXDATAV)
763 ldmaPeripheralSignal_USART1_RXDATAV = LDMA_CH_REQSEL_SIGSEL_USART1RXDATAV | LDMA_CH_REQSEL_SOURCESEL_USART1, ///< Trigger on USART1_RXDATAV.
764 #endif
765 #if defined(LDMA_CH_REQSEL_SIGSEL_USART1RXDATAVRIGHT)
766 ldmaPeripheralSignal_USART1_RXDATAVRIGHT = LDMA_CH_REQSEL_SIGSEL_USART1RXDATAVRIGHT | LDMA_CH_REQSEL_SOURCESEL_USART1, ///< Trigger on USART1_RXDATAVRIGHT.
767 #endif
768 #if defined(LDMA_CH_REQSEL_SIGSEL_USART1TXBL)
769 ldmaPeripheralSignal_USART1_TXBL = LDMA_CH_REQSEL_SIGSEL_USART1TXBL | LDMA_CH_REQSEL_SOURCESEL_USART1, ///< Trigger on USART1_TXBL.
770 #endif
771 #if defined(LDMA_CH_REQSEL_SIGSEL_USART1TXBLRIGHT)
772 ldmaPeripheralSignal_USART1_TXBLRIGHT = LDMA_CH_REQSEL_SIGSEL_USART1TXBLRIGHT | LDMA_CH_REQSEL_SOURCESEL_USART1, ///< Trigger on USART1_TXBLRIGHT.
773 #endif
774 #if defined(LDMA_CH_REQSEL_SIGSEL_USART1TXEMPTY)
775 ldmaPeripheralSignal_USART1_TXEMPTY = LDMA_CH_REQSEL_SIGSEL_USART1TXEMPTY | LDMA_CH_REQSEL_SOURCESEL_USART1, ///< Trigger on USART1_TXEMPTY.
776 #endif
777 #if defined(LDMA_CH_REQSEL_SIGSEL_USART2RXDATAV)
778 ldmaPeripheralSignal_USART2_RXDATAV = LDMA_CH_REQSEL_SIGSEL_USART2RXDATAV | LDMA_CH_REQSEL_SOURCESEL_USART2, ///< Trigger on USART2_RXDATAV.
779 #endif
780 #if defined(LDMA_CH_REQSEL_SIGSEL_USART2TXBL)
781 ldmaPeripheralSignal_USART2_TXBL = LDMA_CH_REQSEL_SIGSEL_USART2TXBL | LDMA_CH_REQSEL_SOURCESEL_USART2, ///< Trigger on USART2_TXBL.
782 #endif
783 #if defined(LDMA_CH_REQSEL_SIGSEL_USART2TXEMPTY)
784 ldmaPeripheralSignal_USART2_TXEMPTY = LDMA_CH_REQSEL_SIGSEL_USART2TXEMPTY | LDMA_CH_REQSEL_SOURCESEL_USART2, ///< Trigger on USART2_TXEMPTY.
785 #endif
786 #if defined(LDMA_CH_REQSEL_SIGSEL_USART3RXDATAV)
787 ldmaPeripheralSignal_USART3_RXDATAV = LDMA_CH_REQSEL_SIGSEL_USART3RXDATAV | LDMA_CH_REQSEL_SOURCESEL_USART3, ///< Trigger on USART3_RXDATAV.
788 #endif
789 #if defined(LDMA_CH_REQSEL_SIGSEL_USART3RXDATAVRIGHT)
790 ldmaPeripheralSignal_USART3_RXDATAVRIGHT = LDMA_CH_REQSEL_SIGSEL_USART3RXDATAVRIGHT | LDMA_CH_REQSEL_SOURCESEL_USART3, ///< Trigger on USART3_RXDATAVRIGHT.
791 #endif
792 #if defined(LDMA_CH_REQSEL_SIGSEL_USART3TXBL)
793 ldmaPeripheralSignal_USART3_TXBL = LDMA_CH_REQSEL_SIGSEL_USART3TXBL | LDMA_CH_REQSEL_SOURCESEL_USART3, ///< Trigger on USART3_TXBL.
794 #endif
795 #if defined(LDMA_CH_REQSEL_SIGSEL_USART3TXBLRIGHT)
796 ldmaPeripheralSignal_USART3_TXBLRIGHT = LDMA_CH_REQSEL_SIGSEL_USART3TXBLRIGHT | LDMA_CH_REQSEL_SOURCESEL_USART3, ///< Trigger on USART3_TXBLRIGHT.
797 #endif
798 #if defined(LDMA_CH_REQSEL_SIGSEL_USART3TXEMPTY)
799 ldmaPeripheralSignal_USART3_TXEMPTY = LDMA_CH_REQSEL_SIGSEL_USART3TXEMPTY | LDMA_CH_REQSEL_SOURCESEL_USART3, ///< Trigger on USART3_TXEMPTY.
800 #endif
801 #if defined(LDMA_CH_REQSEL_SIGSEL_USART4RXDATAV)
802 ldmaPeripheralSignal_USART4_RXDATAV = LDMA_CH_REQSEL_SIGSEL_USART4RXDATAV | LDMA_CH_REQSEL_SOURCESEL_USART4, ///< Trigger on USART4_RXDATAV.
803 #endif
804 #if defined(LDMA_CH_REQSEL_SIGSEL_USART4RXDATAVRIGHT)
805 ldmaPeripheralSignal_USART4_RXDATAVRIGHT = LDMA_CH_REQSEL_SIGSEL_USART4RXDATAVRIGHT | LDMA_CH_REQSEL_SOURCESEL_USART4, ///< Trigger on USART4_RXDATAVRIGHT.
806 #endif
807 #if defined(LDMA_CH_REQSEL_SIGSEL_USART4TXBL)
808 ldmaPeripheralSignal_USART4_TXBL = LDMA_CH_REQSEL_SIGSEL_USART4TXBL | LDMA_CH_REQSEL_SOURCESEL_USART4, ///< Trigger on USART4_TXBL.
809 #endif
810 #if defined(LDMA_CH_REQSEL_SIGSEL_USART4TXBLRIGHT)
811 ldmaPeripheralSignal_USART4_TXBLRIGHT = LDMA_CH_REQSEL_SIGSEL_USART4TXBLRIGHT | LDMA_CH_REQSEL_SOURCESEL_USART4, ///< Trigger on USART4_TXBLRIGHT.
812 #endif
813 #if defined(LDMA_CH_REQSEL_SIGSEL_USART4TXEMPTY)
814 ldmaPeripheralSignal_USART4_TXEMPTY = LDMA_CH_REQSEL_SIGSEL_USART4TXEMPTY | LDMA_CH_REQSEL_SOURCESEL_USART4, ///< Trigger on USART4_TXEMPTY.
815 #endif
816 #if defined(LDMA_CH_REQSEL_SIGSEL_USART5RXDATAV)
817 ldmaPeripheralSignal_USART5_RXDATAV = LDMA_CH_REQSEL_SIGSEL_USART5RXDATAV | LDMA_CH_REQSEL_SOURCESEL_USART5, ///< Trigger on USART5_RXDATAV.
818 #endif
819 #if defined(LDMA_CH_REQSEL_SIGSEL_USART5TXBL)
820 ldmaPeripheralSignal_USART5_TXBL = LDMA_CH_REQSEL_SIGSEL_USART5TXBL | LDMA_CH_REQSEL_SOURCESEL_USART5, ///< Trigger on USART5_TXBL.
821 #endif
822 #if defined(LDMA_CH_REQSEL_SIGSEL_USART5TXEMPTY)
823 ldmaPeripheralSignal_USART5_TXEMPTY = LDMA_CH_REQSEL_SIGSEL_USART5TXEMPTY | LDMA_CH_REQSEL_SOURCESEL_USART5, ///< Trigger on USART5_TXEMPTY.
824 #endif
825 #if defined(LDMA_CH_REQSEL_SIGSEL_VDAC0CH0)
826 ldmaPeripheralSignal_VDAC0_CH0 = LDMA_CH_REQSEL_SIGSEL_VDAC0CH0 | LDMA_CH_REQSEL_SOURCESEL_VDAC0, ///< Trigger on VDAC0_CH0.
827 #endif
828 #if defined(LDMA_CH_REQSEL_SIGSEL_VDAC0CH1)
829 ldmaPeripheralSignal_VDAC0_CH1 = LDMA_CH_REQSEL_SIGSEL_VDAC0CH1 | LDMA_CH_REQSEL_SOURCESEL_VDAC0, ///< Trigger on VDAC0_CH1.
830 #endif
831 #if defined(LDMA_CH_REQSEL_SIGSEL_WTIMER0CC0)
832 ldmaPeripheralSignal_WTIMER0_CC0 = LDMA_CH_REQSEL_SIGSEL_WTIMER0CC0 | LDMA_CH_REQSEL_SOURCESEL_WTIMER0, ///< Trigger on WTIMER0_CC0.
833 #endif
834 #if defined(LDMA_CH_REQSEL_SIGSEL_WTIMER0CC1)
835 ldmaPeripheralSignal_WTIMER0_CC1 = LDMA_CH_REQSEL_SIGSEL_WTIMER0CC1 | LDMA_CH_REQSEL_SOURCESEL_WTIMER0, ///< Trigger on WTIMER0_CC1.
836 #endif
837 #if defined(LDMA_CH_REQSEL_SIGSEL_WTIMER0CC2)
838 ldmaPeripheralSignal_WTIMER0_CC2 = LDMA_CH_REQSEL_SIGSEL_WTIMER0CC2 | LDMA_CH_REQSEL_SOURCESEL_WTIMER0, ///< Trigger on WTIMER0_CC2.
839 #endif
840 #if defined(LDMA_CH_REQSEL_SIGSEL_WTIMER0UFOF)
841 ldmaPeripheralSignal_WTIMER0_UFOF = LDMA_CH_REQSEL_SIGSEL_WTIMER0UFOF | LDMA_CH_REQSEL_SOURCESEL_WTIMER0, ///< Trigger on WTIMER0_UFOF.
842 #endif
843 #if defined(LDMA_CH_REQSEL_SIGSEL_WTIMER1CC0)
844 ldmaPeripheralSignal_WTIMER1_CC0 = LDMA_CH_REQSEL_SIGSEL_WTIMER1CC0 | LDMA_CH_REQSEL_SOURCESEL_WTIMER1, ///< Trigger on WTIMER1_CC0.
845 #endif
846 #if defined(LDMA_CH_REQSEL_SIGSEL_WTIMER1CC1)
847 ldmaPeripheralSignal_WTIMER1_CC1 = LDMA_CH_REQSEL_SIGSEL_WTIMER1CC1 | LDMA_CH_REQSEL_SOURCESEL_WTIMER1, ///< Trigger on WTIMER1_CC1.
848 #endif
849 #if defined(LDMA_CH_REQSEL_SIGSEL_WTIMER1CC2)
850 ldmaPeripheralSignal_WTIMER1_CC2 = LDMA_CH_REQSEL_SIGSEL_WTIMER1CC2 | LDMA_CH_REQSEL_SOURCESEL_WTIMER1, ///< Trigger on WTIMER1_CC2.
851 #endif
852 #if defined(LDMA_CH_REQSEL_SIGSEL_WTIMER1CC3)
853 ldmaPeripheralSignal_WTIMER1_CC3 = LDMA_CH_REQSEL_SIGSEL_WTIMER1CC3 | LDMA_CH_REQSEL_SOURCESEL_WTIMER1, ///< Trigger on WTIMER1_CC3.
854 #endif
855 #if defined(LDMA_CH_REQSEL_SIGSEL_WTIMER1UFOF)
856 ldmaPeripheralSignal_WTIMER1_UFOF = LDMA_CH_REQSEL_SIGSEL_WTIMER1UFOF | LDMA_CH_REQSEL_SOURCESEL_WTIMER1, ///< Trigger on WTIMER1_UFOF.
857 #endif
858 #if defined(LDMA_CH_REQSEL_SIGSEL_WTIMER2CC0)
859 ldmaPeripheralSignal_WTIMER2_CC0 = LDMA_CH_REQSEL_SIGSEL_WTIMER2CC0 | LDMA_CH_REQSEL_SOURCESEL_WTIMER2, ///< Trigger on WTIMER2_CC0.
860 #endif
861 #if defined(LDMA_CH_REQSEL_SIGSEL_WTIMER2CC1)
862 ldmaPeripheralSignal_WTIMER2_CC1 = LDMA_CH_REQSEL_SIGSEL_WTIMER2CC1 | LDMA_CH_REQSEL_SOURCESEL_WTIMER2, ///< Trigger on WTIMER2_CC1.
863 #endif
864 #if defined(LDMA_CH_REQSEL_SIGSEL_WTIMER2CC2)
865 ldmaPeripheralSignal_WTIMER2_CC2 = LDMA_CH_REQSEL_SIGSEL_WTIMER2CC2 | LDMA_CH_REQSEL_SOURCESEL_WTIMER2, ///< Trigger on WTIMER2_CC2.
866 #endif
867 #if defined(LDMA_CH_REQSEL_SIGSEL_WTIMER2UFOF)
868 ldmaPeripheralSignal_WTIMER2_UFOF = LDMA_CH_REQSEL_SIGSEL_WTIMER2UFOF | LDMA_CH_REQSEL_SOURCESEL_WTIMER2, ///< Trigger on WTIMER2_UFOF.
869 #endif
870 #if defined(LDMA_CH_REQSEL_SIGSEL_WTIMER3CC0)
871 ldmaPeripheralSignal_WTIMER3_CC0 = LDMA_CH_REQSEL_SIGSEL_WTIMER3CC0 | LDMA_CH_REQSEL_SOURCESEL_WTIMER3, ///< Trigger on WTIMER3_CC0.
872 #endif
873 #if defined(LDMA_CH_REQSEL_SIGSEL_WTIMER3CC1)
874 ldmaPeripheralSignal_WTIMER3_CC1 = LDMA_CH_REQSEL_SIGSEL_WTIMER3CC1 | LDMA_CH_REQSEL_SOURCESEL_WTIMER3, ///< Trigger on WTIMER3_CC1.
875 #endif
876 #if defined(LDMA_CH_REQSEL_SIGSEL_WTIMER3CC2)
877 ldmaPeripheralSignal_WTIMER3_CC2 = LDMA_CH_REQSEL_SIGSEL_WTIMER3CC2 | LDMA_CH_REQSEL_SOURCESEL_WTIMER3, ///< Trigger on WTIMER3_CC2.
878 #endif
879 #if defined(LDMA_CH_REQSEL_SIGSEL_WTIMER3UFOF)
880 ldmaPeripheralSignal_WTIMER3_UFOF = LDMA_CH_REQSEL_SIGSEL_WTIMER3UFOF | LDMA_CH_REQSEL_SOURCESEL_WTIMER3, ///< Trigger on WTIMER3_UFOF.
881 #endif
882 } LDMA_PeripheralSignal_t;
883 #endif
884
885 /*******************************************************************************
886 ******************************* STRUCTS ***********************************
887 ******************************************************************************/
888
889 /**
890 * @brief
891 * DMA descriptor.
892 * @details
893 * The LDMA DMA controller supports three different DMA descriptors. Each
894 * consists of four WORDs which map directly onto HW control registers for a
895 * given DMA channel. The three descriptor types are XFER, SYNC and WRI.
896 * Refer to the reference manual for further information.
897 */
898 typedef union {
899 /**
900 * TRANSFER DMA descriptor, this is the only descriptor type which can be
901 * used to start a DMA transfer.
902 */
903 struct {
904 uint32_t structType : 2; /**< Set to 0 to select XFER descriptor type. */
905 uint32_t reserved0 : 1; /**< Reserved. */
906 uint32_t structReq : 1; /**< DMA transfer trigger during LINKLOAD. */
907 uint32_t xferCnt : 11; /**< Transfer count minus one. */
908 uint32_t byteSwap : 1; /**< Enable byte swapping transfers. */
909 uint32_t blockSize : 4; /**< Number of unit transfers per arbitration cycle. */
910 uint32_t doneIfs : 1; /**< Generate interrupt when done. */
911 uint32_t reqMode : 1; /**< Block or cycle transfer selector. */
912 uint32_t decLoopCnt : 1; /**< Enable looped transfers. */
913 uint32_t ignoreSrec : 1; /**< Ignore single requests. */
914 uint32_t srcInc : 2; /**< Source address increment unit size. */
915 uint32_t size : 2; /**< DMA transfer unit size. */
916 uint32_t dstInc : 2; /**< Destination address increment unit size. */
917 uint32_t srcAddrMode : 1; /**< Source addressing mode. */
918 uint32_t dstAddrMode : 1; /**< Destination addressing mode. */
919
920 uint32_t srcAddr; /**< DMA source address. */
921 uint32_t dstAddr; /**< DMA destination address. */
922
923 uint32_t linkMode : 1; /**< Select absolute or relative link address. */
924 uint32_t link : 1; /**< Enable LINKLOAD when transfer is done. */
925 int32_t linkAddr : 30; /**< Address of next (linked) descriptor. */
926 } xfer;
927
928 /** SYNCHRONIZE DMA descriptor, used for intra channel transfer
929 * synchronization.
930 */
931 struct {
932 uint32_t structType : 2; /**< Set to 1 to select SYNC descriptor type. */
933 uint32_t reserved0 : 1; /**< Reserved. */
934 uint32_t structReq : 1; /**< DMA transfer trigger during LINKLOAD. */
935 uint32_t xferCnt : 11; /**< Transfer count minus one. */
936 uint32_t byteSwap : 1; /**< Enable byte swapping transfers. */
937 uint32_t blockSize : 4; /**< Number of unit transfers per arbitration cycle. */
938 uint32_t doneIfs : 1; /**< Generate interrupt when done. */
939 uint32_t reqMode : 1; /**< Block or cycle transfer selector. */
940 uint32_t decLoopCnt : 1; /**< Enable looped transfers. */
941 uint32_t ignoreSrec : 1; /**< Ignore single requests. */
942 uint32_t srcInc : 2; /**< Source address increment unit size. */
943 uint32_t size : 2; /**< DMA transfer unit size. */
944 uint32_t dstInc : 2; /**< Destination address increment unit size. */
945 uint32_t srcAddrMode : 1; /**< Source addressing mode. */
946 uint32_t dstAddrMode : 1; /**< Destination addressing mode. */
947
948 uint32_t syncSet : 8; /**< Set bits in LDMA_CTRL.SYNCTRIG register. */
949 uint32_t syncClr : 8; /**< Clear bits in LDMA_CTRL.SYNCTRIG register. */
950 uint32_t reserved1 : 16; /**< Reserved. */
951 uint32_t matchVal : 8; /**< Sync trigger match value. */
952 uint32_t matchEn : 8; /**< Sync trigger match enable. */
953 uint32_t reserved2 : 16; /**< Reserved. */
954
955 uint32_t linkMode : 1; /**< Select absolute or relative link address. */
956 uint32_t link : 1; /**< Enable LINKLOAD when transfer is done. */
957 int32_t linkAddr : 30; /**< Address of next (linked) descriptor. */
958 } sync;
959
960 /** WRITE DMA descriptor, used for write immediate operations. */
961 struct {
962 uint32_t structType : 2; /**< Set to 2 to select WRITE descriptor type. */
963 uint32_t reserved0 : 1; /**< Reserved. */
964 uint32_t structReq : 1; /**< DMA transfer trigger during LINKLOAD. */
965 uint32_t xferCnt : 11; /**< Transfer count minus one. */
966 uint32_t byteSwap : 1; /**< Enable byte swapping transfers. */
967 uint32_t blockSize : 4; /**< Number of unit transfers per arbitration cycle. */
968 uint32_t doneIfs : 1; /**< Generate interrupt when done. */
969 uint32_t reqMode : 1; /**< Block or cycle transfer selector. */
970 uint32_t decLoopCnt : 1; /**< Enable looped transfers. */
971 uint32_t ignoreSrec : 1; /**< Ignore single requests. */
972 uint32_t srcInc : 2; /**< Source address increment unit size. */
973 uint32_t size : 2; /**< DMA transfer unit size. */
974 uint32_t dstInc : 2; /**< Destination address increment unit size. */
975 uint32_t srcAddrMode : 1; /**< Source addressing mode. */
976 uint32_t dstAddrMode : 1; /**< Destination addressing mode. */
977
978 uint32_t immVal; /**< Data to be written at dstAddr. */
979 uint32_t dstAddr; /**< DMA write destination address. */
980
981 uint32_t linkMode : 1; /**< Select absolute or relative link address. */
982 uint32_t link : 1; /**< Enable LINKLOAD when transfer is done. */
983 int32_t linkAddr : 30; /**< Address of next (linked) descriptor. */
984 } wri;
985 } LDMA_Descriptor_t;
986
987 #if defined(_LDMA_CH_CTRL_EXTEND_MASK)
988 /**
989 * @brief
990 * DMA extended descriptor.
991 * @details
992 * The extended descriptor adds additional fields for the extended features
993 * available on the MMLDMA peripheral: destination interleaving and bufferable.
994 * The same three different DMA descriptors supported by the LDMA DMA controller
995 * are available. Each consists of seven WORDs (instead of four in non-extended
996 * descriptors) which map directly onto HW control registers for a given DMA
997 * channel. The three descriptor types are XFER, SYNC and WRI. But the
998 * extended fields are true only for XFER. The extended fields are the following:
999 *
1000 * +- +- CTRL
1001 * | Original | SRC
1002 * | Structure | DST
1003 * Extended | +- LINK
1004 * Structure | XCTRL
1005 * | Reserved for future usage
1006 * +- ILSRC
1007 *
1008 * Refer to the reference manual for further information.
1009 */
1010 typedef struct {
1011 uint32_t structType : 2; /**< Set to 0 to select XFER descriptor type. */
1012 uint32_t extend : 1; /**< Extend data structure. */
1013 uint32_t structReq : 1; /**< DMA transfer trigger during LINKLOAD. */
1014 uint32_t xferCnt : 11; /**< Transfer count minus one. */
1015 uint32_t byteSwap : 1; /**< Enable byte swapping transfers. */
1016 uint32_t blockSize : 4; /**< Number of unit transfers per arbitration cycle. */
1017 uint32_t doneIfs : 1; /**< Generate interrupt when done. */
1018 uint32_t reqMode : 1; /**< Block or cycle transfer selector. */
1019 uint32_t decLoopCnt : 1; /**< Enable looped transfers. */
1020 uint32_t ignoreSrec : 1; /**< Ignore single requests. */
1021 uint32_t srcInc : 2; /**< Source address increment unit size. */
1022 uint32_t size : 2; /**< DMA transfer unit size. */
1023 uint32_t dstInc : 2; /**< Destination address increment unit size. */
1024 uint32_t srcAddrMode : 1; /**< Source addressing mode. */
1025 uint32_t dstAddrMode : 1; /**< Destination addressing mode. */
1026
1027 uint32_t srcAddr; /**< DMA source address. */
1028 uint32_t dstAddr; /**< DMA destination address. */
1029
1030 uint32_t linkMode : 1; /**< Select absolute or relative link address. */
1031 uint32_t link : 1; /**< Enable LINKLOAD when transfer is done. */
1032 int32_t linkAddr : 30; /**< Address of next (linked) descriptor. */
1033
1034 uint32_t reserved1 : 4; /**< Reserved */
1035 uint32_t dstIlEn : 1; /**< Destination interleave. */
1036 uint32_t IlMode : 2; /**< Interleave mode. */
1037 uint32_t bufferable : 1; /**< Allow AHB buffering. */
1038 uint32_t reserved2 : 24; /**< Reserved */
1039
1040 uint32_t reserved3; /**< Reserved */
1041 uint32_t IlSrc; /**< DMA rules table base address in memory. */
1042 } LDMA_DescriptorExtend_t;
1043 #endif
1044
1045 /** @brief LDMA initialization configuration structure. */
1046 typedef struct {
1047 uint8_t ldmaInitCtrlNumFixed; /**< Arbitration mode separator. */
1048 uint8_t ldmaInitCtrlSyncPrsClrEn; /**< PRS Synctrig clear enable. */
1049 uint8_t ldmaInitCtrlSyncPrsSetEn; /**< PRS Synctrig set enable. */
1050 uint8_t ldmaInitIrqPriority; /**< LDMA IRQ priority (0..7). */
1051 } LDMA_Init_t;
1052
1053 /**
1054 * @brief
1055 * DMA transfer configuration structure.
1056 * @details
1057 * This structure configures all aspects of a DMA transfer.
1058 */
1059 typedef struct {
1060 uint32_t ldmaReqSel; /**< Selects DMA trigger source. */
1061 uint8_t ldmaCtrlSyncPrsClrOff; /**< PRS Synctrig clear enables to clear. */
1062 uint8_t ldmaCtrlSyncPrsClrOn; /**< PRS Synctrig clear enables to set. */
1063 uint8_t ldmaCtrlSyncPrsSetOff; /**< PRS Synctrig set enables to clear. */
1064 uint8_t ldmaCtrlSyncPrsSetOn; /**< PRS Synctrig set enables to set. */
1065 bool ldmaReqDis; /**< Mask the PRS trigger input. */
1066 bool ldmaDbgHalt; /**< Dis. DMA trig when CPU is halted. */
1067 LDMA_CfgArbSlots_t ldmaCfgArbSlots; /**< Arbitration slot number. */
1068 LDMA_CfgSrcIncSign_t ldmaCfgSrcIncSign; /**< Source address increment sign. */
1069 LDMA_CfgDstIncSign_t ldmaCfgDstIncSign; /**< Destination address increment sign. */
1070 uint8_t ldmaLoopCnt; /**< Counter for looped transfers. */
1071 #if defined(_LDMA_CH_CFG_SRCBUSPORT_MASK)
1072 LDMA_CfgStructBusPort_t ldmaCfgStructBusPort; /**< Structure fetch operation bus port. */
1073 LDMA_CfgSrcBusPort_t ldmaCfgSrcBusPort; /**< Source operation bus port. */
1074 LDMA_CfgDstBusPort_t ldmaCfgDstBusPort; /**< Destination operation bus port. */
1075 #endif
1076 } LDMA_TransferCfg_t;
1077
1078 /*******************************************************************************
1079 ******************************** DEFINES **********************************
1080 ******************************************************************************/
1081
1082 /** @brief Size in words of a non-extended DMA descriptor. */
1083 #define LDMA_DESCRIPTOR_NON_EXTEND_SIZE_WORD 4
1084
1085 /** @brief Size in words of an extended DMA descriptor. */
1086 #define LDMA_DESCRIPTOR_EXTEND_SIZE_WORD 7
1087
1088 /** @brief Maximum transfer size possible per descriptor. */
1089 #define LDMA_DESCRIPTOR_MAX_XFER_SIZE (((_LDMA_CH_CTRL_XFERCNT_MASK >> _LDMA_CH_CTRL_XFERCNT_SHIFT) + 1))
1090
1091 /** @brief Converts a LDMA_Descriptor_t pointer to the value suitable to write to the linkAddr field of a LDMA_Descriptor_t. */
1092 #define LDMA_DESCRIPTOR_LINKABS_ADDR_TO_LINKADDR(addr) (int32_t) ((((uintptr_t)addr) & _LDMA_CH_LINK_LINKADDR_MASK) >> _LDMA_CH_LINK_LINKADDR_SHIFT)
1093
1094 /** @brief Converts a LDMA_Descriptor_t linkAddr field value back to a LDMA_Descriptor_t pointer. */
1095 #define LDMA_DESCRIPTOR_LINKABS_LINKADDR_TO_ADDR(linkAddr) (LDMA_Descriptor_t *) (linkAddr << _LDMA_CH_LINK_LINKADDR_SHIFT)
1096
1097 /*******************************************************************************
1098 ************************** STRUCT INITIALIZERS ****************************
1099 ******************************************************************************/
1100
1101 /** @brief Default DMA initialization structure. */
1102 #define LDMA_INIT_DEFAULT \
1103 { \
1104 .ldmaInitCtrlNumFixed = _LDMA_CTRL_NUMFIXED_DEFAULT,/* Fixed priority arbitration.*/ \
1105 .ldmaInitCtrlSyncPrsClrEn = 0, /* No PRS Synctrig clear enable*/ \
1106 .ldmaInitCtrlSyncPrsSetEn = 0, /* No PRS Synctrig set enable. */ \
1107 .ldmaInitIrqPriority = 3 /* IRQ priority level 3. */ \
1108 }
1109
1110 /**
1111 * @brief
1112 * Generic DMA transfer configuration for memory to memory transfers.
1113 */
1114 #if defined(_LDMA_CH_CFG_SRCBUSPORT_MASK)
1115 #define LDMA_TRANSFER_CFG_MEMORY() \
1116 { \
1117 0, 0, 0, 0, 0, \
1118 false, false, ldmaCfgArbSlotsAs1, \
1119 ldmaCfgSrcIncSignPos, ldmaCfgDstIncSignPos, 0, \
1120 ldmaCfgStructBusPort0, ldmaCfgSrcBusPort0, ldmaCfgDstBusPort0 \
1121 }
1122 #else
1123 #define LDMA_TRANSFER_CFG_MEMORY() \
1124 { \
1125 0, 0, 0, 0, 0, \
1126 false, false, ldmaCfgArbSlotsAs1, \
1127 ldmaCfgSrcIncSignPos, ldmaCfgDstIncSignPos, 0 \
1128 }
1129 #endif
1130
1131 /**
1132 * @brief
1133 * Generic DMA transfer configuration for looped memory to memory transfers.
1134 */
1135 #if defined(_LDMA_CH_CFG_SRCBUSPORT_MASK)
1136 #define LDMA_TRANSFER_CFG_MEMORY_LOOP(loopCnt) \
1137 { \
1138 0, 0, 0, 0, 0, \
1139 false, false, ldmaCfgArbSlotsAs1, \
1140 ldmaCfgSrcIncSignPos, ldmaCfgDstIncSignPos, \
1141 loopCnt, \
1142 ldmaCfgStructBusPort0, ldmaCfgSrcBusPort0, ldmaCfgDstBusPort0 \
1143 }
1144 #else
1145 #define LDMA_TRANSFER_CFG_MEMORY_LOOP(loopCnt) \
1146 { \
1147 0, 0, 0, 0, 0, \
1148 false, false, ldmaCfgArbSlotsAs1, \
1149 ldmaCfgSrcIncSignPos, ldmaCfgDstIncSignPos, \
1150 loopCnt \
1151 }
1152 #endif
1153
1154 /**
1155 * @brief
1156 * Generic DMA transfer configuration for memory to/from peripheral transfers.
1157 */
1158 #if defined(_LDMA_CH_CFG_SRCBUSPORT_MASK)
1159 #define LDMA_TRANSFER_CFG_PERIPHERAL(signal) \
1160 { \
1161 signal, 0, 0, 0, 0, \
1162 false, false, ldmaCfgArbSlotsAs1, \
1163 ldmaCfgSrcIncSignPos, ldmaCfgDstIncSignPos, 0, \
1164 ldmaCfgStructBusPort0, ldmaCfgSrcBusPort0, ldmaCfgDstBusPort0 \
1165 }
1166 #else
1167 #define LDMA_TRANSFER_CFG_PERIPHERAL(signal) \
1168 { \
1169 signal, 0, 0, 0, 0, \
1170 false, false, ldmaCfgArbSlotsAs1, \
1171 ldmaCfgSrcIncSignPos, ldmaCfgDstIncSignPos, 0 \
1172 }
1173 #endif
1174
1175 /**
1176 * @brief
1177 * Generic DMA transfer configuration for looped memory to/from peripheral transfers.
1178 */
1179 #if defined(_LDMA_CH_CFG_SRCBUSPORT_MASK)
1180 #define LDMA_TRANSFER_CFG_PERIPHERAL_LOOP(signal, loopCnt) \
1181 { \
1182 signal, 0, 0, 0, 0, \
1183 false, false, ldmaCfgArbSlotsAs1, \
1184 ldmaCfgSrcIncSignPos, ldmaCfgDstIncSignPos, loopCnt, \
1185 ldmaCfgStructBusPort0, ldmaCfgSrcBusPort0, ldmaCfgDstBusPort0 \
1186 }
1187 #else
1188 #define LDMA_TRANSFER_CFG_PERIPHERAL_LOOP(signal, loopCnt) \
1189 { \
1190 signal, 0, 0, 0, 0, \
1191 false, false, ldmaCfgArbSlotsAs1, \
1192 ldmaCfgSrcIncSignPos, ldmaCfgDstIncSignPos, loopCnt \
1193 }
1194 #endif
1195
1196 /**
1197 * @brief
1198 * DMA descriptor initializer for single memory to memory word transfer.
1199 * @param[in] src Source data address.
1200 * @param[in] dest Destination data address.
1201 * @param[in] count Number of words to transfer.
1202 */
1203 #define LDMA_DESCRIPTOR_SINGLE_M2M_WORD(src, dest, count) \
1204 { \
1205 .xfer = \
1206 { \
1207 .structType = ldmaCtrlStructTypeXfer, \
1208 .structReq = 1, \
1209 .xferCnt = (count) - 1, \
1210 .byteSwap = 0, \
1211 .blockSize = ldmaCtrlBlockSizeUnit1, \
1212 .doneIfs = 1, \
1213 .reqMode = ldmaCtrlReqModeAll, \
1214 .decLoopCnt = 0, \
1215 .ignoreSrec = 0, \
1216 .srcInc = ldmaCtrlSrcIncOne, \
1217 .size = ldmaCtrlSizeWord, \
1218 .dstInc = ldmaCtrlDstIncOne, \
1219 .srcAddrMode = ldmaCtrlSrcAddrModeAbs, \
1220 .dstAddrMode = ldmaCtrlDstAddrModeAbs, \
1221 .srcAddr = (uint32_t)(src), \
1222 .dstAddr = (uint32_t)(dest), \
1223 .linkMode = 0, \
1224 .link = 0, \
1225 .linkAddr = 0 \
1226 } \
1227 }
1228
1229 #if defined(_LDMA_CH_CTRL_EXTEND_MASK)
1230 /**
1231 * @brief
1232 * DMA descriptor initializer for single memory to memory word transfer
1233 * using the extended descriptor fields.
1234 * @param[in] src Source data address.
1235 * @param[in] dest Destination data address.
1236 * @param[in] count Number of words to transfer.
1237 */
1238 #define LDMA_DESCRIPTOR_SINGLE_M2M_WORD_EXTEND(src, dest, count) \
1239 { \
1240 .structType = ldmaCtrlStructTypeXfer, \
1241 .extend = 1, \
1242 .structReq = 1, \
1243 .xferCnt = (count) - 1, \
1244 .byteSwap = 0, \
1245 .blockSize = ldmaCtrlBlockSizeUnit1, \
1246 .doneIfs = 1, \
1247 .reqMode = ldmaCtrlReqModeAll, \
1248 .decLoopCnt = 0, \
1249 .ignoreSrec = 0, \
1250 .srcInc = ldmaCtrlSrcIncOne, \
1251 .size = ldmaCtrlSizeWord, \
1252 .dstInc = ldmaCtrlDstIncNone, /* Ignored since destination addressing is non-sequential */ \
1253 .srcAddrMode = ldmaCtrlSrcAddrModeAbs, \
1254 .dstAddrMode = ldmaCtrlDstAddrModeAbs, \
1255 .srcAddr = (uint32_t)(src), \
1256 .dstAddr = (uint32_t)(dest), \
1257 .linkMode = 0, \
1258 .link = 0, \
1259 .linkAddr = 0, \
1260 .dstIlEn = 0, \
1261 .IlMode = 0, \
1262 .bufferable = 0, \
1263 .IlSrc = 0 \
1264 }
1265 #endif
1266
1267 /**
1268 * @brief
1269 * DMA descriptor initializer for single memory to memory half-word transfer.
1270 * @param[in] src Source data address.
1271 * @param[in] dest Destination data address.
1272 * @param[in] count Number of half-words to transfer.
1273 */
1274 #define LDMA_DESCRIPTOR_SINGLE_M2M_HALF(src, dest, count) \
1275 { \
1276 .xfer = \
1277 { \
1278 .structType = ldmaCtrlStructTypeXfer, \
1279 .structReq = 1, \
1280 .xferCnt = (count) - 1, \
1281 .byteSwap = 0, \
1282 .blockSize = ldmaCtrlBlockSizeUnit1, \
1283 .doneIfs = 1, \
1284 .reqMode = ldmaCtrlReqModeAll, \
1285 .decLoopCnt = 0, \
1286 .ignoreSrec = 0, \
1287 .srcInc = ldmaCtrlSrcIncOne, \
1288 .size = ldmaCtrlSizeHalf, \
1289 .dstInc = ldmaCtrlDstIncOne, \
1290 .srcAddrMode = ldmaCtrlSrcAddrModeAbs, \
1291 .dstAddrMode = ldmaCtrlDstAddrModeAbs, \
1292 .srcAddr = (uint32_t)(src), \
1293 .dstAddr = (uint32_t)(dest), \
1294 .linkMode = 0, \
1295 .link = 0, \
1296 .linkAddr = 0 \
1297 } \
1298 }
1299
1300 #if defined(_LDMA_CH_CTRL_EXTEND_MASK)
1301 /**
1302 * @brief
1303 * DMA descriptor initializer for single memory to memory half-word transfer
1304 * using the extended descriptor fields.
1305 * @param[in] src Source data address.
1306 * @param[in] dest Destination data address.
1307 * @param[in] count Number of half-words to transfer.
1308 */
1309 #define LDMA_DESCRIPTOR_SINGLE_M2M_HALF_EXTEND(src, dest, count) \
1310 { \
1311 .structType = ldmaCtrlStructTypeXfer, \
1312 .extend = 1, \
1313 .structReq = 1, \
1314 .xferCnt = (count) - 1, \
1315 .byteSwap = 0, \
1316 .blockSize = ldmaCtrlBlockSizeUnit1, \
1317 .doneIfs = 1, \
1318 .reqMode = ldmaCtrlReqModeAll, \
1319 .decLoopCnt = 0, \
1320 .ignoreSrec = 0, \
1321 .srcInc = ldmaCtrlSrcIncOne, \
1322 .size = ldmaCtrlSizeHalf, \
1323 .dstInc = ldmaCtrlDstIncNone, \
1324 .srcAddrMode = ldmaCtrlSrcAddrModeAbs, \
1325 .dstAddrMode = ldmaCtrlDstAddrModeAbs, \
1326 .srcAddr = (uint32_t)(src), \
1327 .dstAddr = (uint32_t)(dest), \
1328 .linkMode = 0, \
1329 .link = 0, \
1330 .linkAddr = 0, \
1331 .dstIlEn = 0, \
1332 .IlMode = 0, \
1333 .bufferable = 0, \
1334 .IlSrc = 0 \
1335 }
1336 #endif
1337
1338 /**
1339 * @brief
1340 * DMA descriptor initializer for single memory to memory byte transfer.
1341 * @param[in] src Source data address.
1342 * @param[in] dest Destination data address.
1343 * @param[in] count Number of bytes to transfer.
1344 */
1345 #define LDMA_DESCRIPTOR_SINGLE_M2M_BYTE(src, dest, count) \
1346 { \
1347 .xfer = \
1348 { \
1349 .structType = ldmaCtrlStructTypeXfer, \
1350 .structReq = 1, \
1351 .xferCnt = (count) - 1, \
1352 .byteSwap = 0, \
1353 .blockSize = ldmaCtrlBlockSizeUnit1, \
1354 .doneIfs = 1, \
1355 .reqMode = ldmaCtrlReqModeAll, \
1356 .decLoopCnt = 0, \
1357 .ignoreSrec = 0, \
1358 .srcInc = ldmaCtrlSrcIncOne, \
1359 .size = ldmaCtrlSizeByte, \
1360 .dstInc = ldmaCtrlDstIncOne, \
1361 .srcAddrMode = ldmaCtrlSrcAddrModeAbs, \
1362 .dstAddrMode = ldmaCtrlDstAddrModeAbs, \
1363 .srcAddr = (uint32_t)(src), \
1364 .dstAddr = (uint32_t)(dest), \
1365 .linkMode = 0, \
1366 .link = 0, \
1367 .linkAddr = 0 \
1368 } \
1369 }
1370
1371 #if defined(_LDMA_CH_CTRL_EXTEND_MASK)
1372 /**
1373 * @brief
1374 * DMA descriptor initializer for single memory to memory byte transfer
1375 * using the extended descriptor fields.
1376 * @param[in] src Source data address.
1377 * @param[in] dest Destination data address.
1378 * @param[in] count Number of bytes to transfer.
1379 */
1380 #define LDMA_DESCRIPTOR_SINGLE_M2M_BYTE_EXTEND(src, dest, count) \
1381 { \
1382 .structType = ldmaCtrlStructTypeXfer, \
1383 .extend = 1, \
1384 .structReq = 1, \
1385 .xferCnt = (count) - 1, \
1386 .byteSwap = 0, \
1387 .blockSize = ldmaCtrlBlockSizeUnit1, \
1388 .doneIfs = 1, \
1389 .reqMode = ldmaCtrlReqModeAll, \
1390 .decLoopCnt = 0, \
1391 .ignoreSrec = 0, \
1392 .srcInc = ldmaCtrlSrcIncOne, \
1393 .size = ldmaCtrlSizeByte, \
1394 .dstInc = ldmaCtrlDstIncNone, \
1395 .srcAddrMode = ldmaCtrlSrcAddrModeAbs, \
1396 .dstAddrMode = ldmaCtrlDstAddrModeAbs, \
1397 .srcAddr = (uint32_t)(src), \
1398 .dstAddr = (uint32_t)(dest), \
1399 .linkMode = 0, \
1400 .link = 0, \
1401 .linkAddr = 0, \
1402 .dstIlEn = 0, \
1403 .IlMode = 0, \
1404 .bufferable = 0, \
1405 .IlSrc = 0 \
1406 }
1407 #endif
1408
1409 /**
1410 * @brief
1411 * DMA descriptor initializer for linked memory to memory word transfer.
1412 *
1413 * Link address must be an absolute address.
1414 * @note
1415 * The linkAddr member of the transfer descriptor is not initialized.
1416 * linkAddr must be initialized by using the proper bits right-shift
1417 * to get the correct bits from the absolute address.
1418 * LDMA_DESCRIPTOR_LINKABS_ADDR_TO_LINKADDR macro should be used for that operation:
1419 * @code
1420 desc.linkAddr = LDMA_DESCRIPTOR_LINKABS_ADDR_TO_LINKADDR(&next_desc);@endcode
1421 * The opposite bit shift (left) must be done with LDMA_DESCRIPTOR_LINKABS_ADDR_TO_LINKADDR
1422 * if linkAddr is read.
1423 * @param[in] src Source data address.
1424 * @param[in] dest Destination data address.
1425 * @param[in] count Number of words to transfer.
1426 */
1427 #define LDMA_DESCRIPTOR_LINKABS_M2M_WORD(src, dest, count) \
1428 { \
1429 .xfer = \
1430 { \
1431 .structType = ldmaCtrlStructTypeXfer, \
1432 .structReq = 1, \
1433 .xferCnt = (count) - 1, \
1434 .byteSwap = 0, \
1435 .blockSize = ldmaCtrlBlockSizeUnit1, \
1436 .doneIfs = 0, \
1437 .reqMode = ldmaCtrlReqModeAll, \
1438 .decLoopCnt = 0, \
1439 .ignoreSrec = 0, \
1440 .srcInc = ldmaCtrlSrcIncOne, \
1441 .size = ldmaCtrlSizeWord, \
1442 .dstInc = ldmaCtrlDstIncOne, \
1443 .srcAddrMode = ldmaCtrlSrcAddrModeAbs, \
1444 .dstAddrMode = ldmaCtrlDstAddrModeAbs, \
1445 .srcAddr = (uint32_t)(src), \
1446 .dstAddr = (uint32_t)(dest), \
1447 .linkMode = ldmaLinkModeAbs, \
1448 .link = 1, \
1449 .linkAddr = 0 /* Must be set runtime ! */ \
1450 } \
1451 }
1452
1453 #if defined(_LDMA_CH_CTRL_EXTEND_MASK)
1454 /**
1455 * @brief
1456 * DMA descriptor initializer for linked memory to memory word transfer
1457 * using the extended descriptor fields.
1458 *
1459 * Link address must be an absolute address.
1460 * @note
1461 * The linkAddr member of the transfer descriptor is not initialized.
1462 * linkAddr must be initialized by using the proper bits right-shift
1463 * to get the correct bits from the absolute address.
1464 * LDMA_DESCRIPTOR_LINKABS_ADDR_TO_LINKADDR macro should be used for that operation:
1465 * @code
1466 desc.linkAddr = LDMA_DESCRIPTOR_LINKABS_ADDR_TO_LINKADDR(&next_desc);@endcode
1467 * The opposite bit shift (left) must be done with LDMA_DESCRIPTOR_LINKABS_ADDR_TO_LINKADDR
1468 * if linkAddr is read.
1469 * @param[in] src Source data address.
1470 * @param[in] dest Destination data address.
1471 * @param[in] count Number of words to transfer.
1472 */
1473 #define LDMA_DESCRIPTOR_LINKABS_M2M_WORD_EXTEND(src, dest, count) \
1474 { \
1475 .structType = ldmaCtrlStructTypeXfer, \
1476 .extend = 1, \
1477 .structReq = 1, \
1478 .xferCnt = (count) - 1, \
1479 .byteSwap = 0, \
1480 .blockSize = ldmaCtrlBlockSizeUnit1, \
1481 .doneIfs = 0, \
1482 .reqMode = ldmaCtrlReqModeAll, \
1483 .decLoopCnt = 0, \
1484 .ignoreSrec = 0, \
1485 .srcInc = ldmaCtrlSrcIncOne, \
1486 .size = ldmaCtrlSizeWord, \
1487 .dstInc = ldmaCtrlDstIncNone, \
1488 .srcAddrMode = ldmaCtrlSrcAddrModeAbs, \
1489 .dstAddrMode = ldmaCtrlDstAddrModeAbs, \
1490 .srcAddr = (uint32_t)(src), \
1491 .dstAddr = (uint32_t)(dest), \
1492 .linkMode = ldmaLinkModeAbs, \
1493 .link = 1, \
1494 .linkAddr = 0, /* Must be set runtime ! */ \
1495 .dstIlEn = 0, \
1496 .IlMode = 0, \
1497 .bufferable = 0, \
1498 .IlSrc = 0 \
1499 }
1500 #endif
1501
1502 /**
1503 * @brief
1504 * DMA descriptor initializer for linked memory to memory half-word transfer.
1505 *
1506 * Link address must be an absolute address.
1507 * @note
1508 * The linkAddr member of the transfer descriptor is not initialized.
1509 * linkAddr must be initialized by using the proper bits right-shift
1510 * to get the correct bits from the absolute address.
1511 * LDMA_DESCRIPTOR_LINKABS_ADDR_TO_LINKADDR macro should be used for that operation:
1512 * @code
1513 desc.linkAddr = LDMA_DESCRIPTOR_LINKABS_ADDR_TO_LINKADDR(&next_desc);@endcode
1514 * The opposite bit shift (left) must be done with LDMA_DESCRIPTOR_LINKABS_ADDR_TO_LINKADDR
1515 * if linkAddr is read.
1516 * @param[in] src Source data address.
1517 * @param[in] dest Destination data address.
1518 * @param[in] count Number of half-words to transfer.
1519 */
1520 #define LDMA_DESCRIPTOR_LINKABS_M2M_HALF(src, dest, count) \
1521 { \
1522 .xfer = \
1523 { \
1524 .structType = ldmaCtrlStructTypeXfer, \
1525 .structReq = 1, \
1526 .xferCnt = (count) - 1, \
1527 .byteSwap = 0, \
1528 .blockSize = ldmaCtrlBlockSizeUnit1, \
1529 .doneIfs = 0, \
1530 .reqMode = ldmaCtrlReqModeAll, \
1531 .decLoopCnt = 0, \
1532 .ignoreSrec = 0, \
1533 .srcInc = ldmaCtrlSrcIncOne, \
1534 .size = ldmaCtrlSizeHalf, \
1535 .dstInc = ldmaCtrlDstIncOne, \
1536 .srcAddrMode = ldmaCtrlSrcAddrModeAbs, \
1537 .dstAddrMode = ldmaCtrlDstAddrModeAbs, \
1538 .srcAddr = (uint32_t)(src), \
1539 .dstAddr = (uint32_t)(dest), \
1540 .linkMode = ldmaLinkModeAbs, \
1541 .link = 1, \
1542 .linkAddr = 0 /* Must be set runtime ! */ \
1543 } \
1544 }
1545
1546 #if defined(_LDMA_CH_CTRL_EXTEND_MASK)
1547 /**
1548 * @brief
1549 * DMA descriptor initializer for linked memory to memory half-word transfer
1550 * using the extended descriptor fields.
1551 *
1552 * Link address must be an absolute address.
1553 * @note
1554 * The linkAddr member of the transfer descriptor is not initialized.
1555 * linkAddr must be initialized by using the proper bits right-shift
1556 * to get the correct bits from the absolute address.
1557 * LDMA_DESCRIPTOR_LINKABS_ADDR_TO_LINKADDR macro should be used for that operation:
1558 * @code
1559 desc.linkAddr = LDMA_DESCRIPTOR_LINKABS_ADDR_TO_LINKADDR(&next_desc);@endcode
1560 * The opposite bit shift (left) must be done with LDMA_DESCRIPTOR_LINKABS_ADDR_TO_LINKADDR
1561 * if linkAddr is read.
1562 * @param[in] src Source data address.
1563 * @param[in] dest Destination data address.
1564 * @param[in] count Number of half-words to transfer.
1565 */
1566 #define LDMA_DESCRIPTOR_LINKABS_M2M_HALF_EXTEND(src, dest, count) \
1567 { \
1568 .structType = ldmaCtrlStructTypeXfer, \
1569 .extend = 1, \
1570 .structReq = 1, \
1571 .xferCnt = (count) - 1, \
1572 .byteSwap = 0, \
1573 .blockSize = ldmaCtrlBlockSizeUnit1, \
1574 .doneIfs = 0, \
1575 .reqMode = ldmaCtrlReqModeAll, \
1576 .decLoopCnt = 0, \
1577 .ignoreSrec = 0, \
1578 .srcInc = ldmaCtrlSrcIncOne, \
1579 .size = ldmaCtrlSizeHalf, \
1580 .dstInc = ldmaCtrlDstIncNone, \
1581 .srcAddrMode = ldmaCtrlSrcAddrModeAbs, \
1582 .dstAddrMode = ldmaCtrlDstAddrModeAbs, \
1583 .srcAddr = (uint32_t)(src), \
1584 .dstAddr = (uint32_t)(dest), \
1585 .linkMode = ldmaLinkModeAbs, \
1586 .link = 1, \
1587 .linkAddr = 0, /* Must be set runtime ! */ \
1588 .dstIlEn = 0, \
1589 .IlMode = 0, \
1590 .bufferable = 0, \
1591 .IlSrc = 0 \
1592 }
1593 #endif
1594
1595 /**
1596 * @brief
1597 * DMA descriptor initializer for linked memory to memory byte transfer.
1598 *
1599 * Link address must be an absolute address.
1600 * @note
1601 * The linkAddr member of the transfer descriptor is not initialized.
1602 * linkAddr must be initialized by using the proper bits right-shift
1603 * to get the correct bits from the absolute address.
1604 * LDMA_DESCRIPTOR_LINKABS_ADDR_TO_LINKADDR macro should be used for that operation:
1605 * @code
1606 desc.linkAddr = LDMA_DESCRIPTOR_LINKABS_ADDR_TO_LINKADDR(&next_desc);@endcode
1607 * The opposite bit shift (left) must be done with LDMA_DESCRIPTOR_LINKABS_ADDR_TO_LINKADDR
1608 * if linkAddr is read.
1609 * @param[in] src Source data address.
1610 * @param[in] dest Destination data address.
1611 * @param[in] count Number of bytes to transfer.
1612 */
1613 #define LDMA_DESCRIPTOR_LINKABS_M2M_BYTE(src, dest, count) \
1614 { \
1615 .xfer = \
1616 { \
1617 .structType = ldmaCtrlStructTypeXfer, \
1618 .structReq = 1, \
1619 .xferCnt = (count) - 1, \
1620 .byteSwap = 0, \
1621 .blockSize = ldmaCtrlBlockSizeUnit1, \
1622 .doneIfs = 0, \
1623 .reqMode = ldmaCtrlReqModeAll, \
1624 .decLoopCnt = 0, \
1625 .ignoreSrec = 0, \
1626 .srcInc = ldmaCtrlSrcIncOne, \
1627 .size = ldmaCtrlSizeByte, \
1628 .dstInc = ldmaCtrlDstIncOne, \
1629 .srcAddrMode = ldmaCtrlSrcAddrModeAbs, \
1630 .dstAddrMode = ldmaCtrlDstAddrModeAbs, \
1631 .srcAddr = (uint32_t)(src), \
1632 .dstAddr = (uint32_t)(dest), \
1633 .linkMode = ldmaLinkModeAbs, \
1634 .link = 1, \
1635 .linkAddr = 0 /* Must be set runtime ! */ \
1636 } \
1637 }
1638
1639 #if defined(_LDMA_CH_CTRL_EXTEND_MASK)
1640 /**
1641 * @brief
1642 * DMA descriptor initializer for linked memory to memory byte transfer
1643 * using the extended descriptor fields.
1644 *
1645 * Link address must be an absolute address.
1646 * @note
1647 * The linkAddr member of the transfer descriptor is not initialized.
1648 * linkAddr must be initialized by using the proper bits right-shift
1649 * to get the correct bits from the absolute address.
1650 * LDMA_DESCRIPTOR_LINKABS_ADDR_TO_LINKADDR macro should be used for that operation:
1651 * @code
1652 desc.linkAddr = LDMA_DESCRIPTOR_LINKABS_ADDR_TO_LINKADDR(&next_desc);@endcode
1653 * The opposite bit shift (left) must be done with LDMA_DESCRIPTOR_LINKABS_ADDR_TO_LINKADDR
1654 * if linkAddr is read.
1655 * @param[in] src Source data address.
1656 * @param[in] dest Destination data address.
1657 * @param[in] count Number of bytes to transfer.
1658 */
1659 #define LDMA_DESCRIPTOR_LINKABS_M2M_BYTE_EXTEND(src, dest, count) \
1660 { \
1661 .structType = ldmaCtrlStructTypeXfer, \
1662 .extend = 1, \
1663 .structReq = 1, \
1664 .xferCnt = (count) - 1, \
1665 .byteSwap = 0, \
1666 .blockSize = ldmaCtrlBlockSizeUnit1, \
1667 .doneIfs = 0, \
1668 .reqMode = ldmaCtrlReqModeAll, \
1669 .decLoopCnt = 0, \
1670 .ignoreSrec = 0, \
1671 .srcInc = ldmaCtrlSrcIncOne, \
1672 .size = ldmaCtrlSizeByte, \
1673 .dstInc = ldmaCtrlDstIncNone, \
1674 .srcAddrMode = ldmaCtrlSrcAddrModeAbs, \
1675 .dstAddrMode = ldmaCtrlDstAddrModeAbs, \
1676 .srcAddr = (uint32_t)(src), \
1677 .dstAddr = (uint32_t)(dest), \
1678 .linkMode = ldmaLinkModeAbs, \
1679 .link = 1, \
1680 .linkAddr = 0, /* Must be set runtime ! */ \
1681 .dstIlEn = 0, \
1682 .IlMode = 0, \
1683 .bufferable = 0, \
1684 .IlSrc = 0 \
1685 }
1686 #endif
1687
1688 /**
1689 * @brief
1690 * DMA descriptor initializer for linked memory to memory word transfer.
1691 *
1692 * Link address is a relative address.
1693 * @note
1694 * The linkAddr member of the transfer descriptor is initialized to 4
1695 * (regular descriptor) or 7 (extended descriptor), assuming that
1696 * the next descriptor immediately follows this descriptor (in memory).
1697 * @param[in] src Source data address.
1698 * @param[in] dest Destination data address.
1699 * @param[in] count Number of words to transfer.
1700 * @param[in] linkjmp Address of descriptor to link to, expressed as a
1701 * signed number of descriptors from "here".
1702 * 1=one descriptor forward in memory,
1703 * 0=this descriptor,
1704 * -1=one descriptor back in memory.
1705 */
1706 #define LDMA_DESCRIPTOR_LINKREL_M2M_WORD(src, dest, count, linkjmp) \
1707 { \
1708 .xfer = \
1709 { \
1710 .structType = ldmaCtrlStructTypeXfer, \
1711 .structReq = 1, \
1712 .xferCnt = (count) - 1, \
1713 .byteSwap = 0, \
1714 .blockSize = ldmaCtrlBlockSizeUnit1, \
1715 .doneIfs = 0, \
1716 .reqMode = ldmaCtrlReqModeAll, \
1717 .decLoopCnt = 0, \
1718 .ignoreSrec = 0, \
1719 .srcInc = ldmaCtrlSrcIncOne, \
1720 .size = ldmaCtrlSizeWord, \
1721 .dstInc = ldmaCtrlDstIncOne, \
1722 .srcAddrMode = ldmaCtrlSrcAddrModeAbs, \
1723 .dstAddrMode = ldmaCtrlDstAddrModeAbs, \
1724 .srcAddr = (uint32_t)(src), \
1725 .dstAddr = (uint32_t)(dest), \
1726 .linkMode = ldmaLinkModeRel, \
1727 .link = 1, \
1728 .linkAddr = (linkjmp) * LDMA_DESCRIPTOR_NON_EXTEND_SIZE_WORD \
1729 } \
1730 }
1731
1732 #if defined(_LDMA_CH_CTRL_EXTEND_MASK)
1733 /**
1734 * @brief
1735 * DMA descriptor initializer for linked memory to memory word transfer
1736 * using the extended descriptor fields.
1737 *
1738 * Link address is a relative address.
1739 * @note
1740 * The linkAddr member of the transfer descriptor is initialized to 4
1741 * (regular descriptor) or 7 (extended descriptor), assuming that
1742 * the next descriptor immediately follows this descriptor (in memory).
1743 * @param[in] src Source data address.
1744 * @param[in] dest Destination data address.
1745 * @param[in] count Number of words to transfer.
1746 * @param[in] linkjmp Address of descriptor to link to, expressed as a
1747 * signed number of descriptors from "here".
1748 * 1=one descriptor forward in memory,
1749 * 0=this descriptor,
1750 * -1=one descriptor back in memory.
1751 */
1752 #define LDMA_DESCRIPTOR_LINKREL_M2M_WORD_EXTEND(src, dest, count, linkjmp) \
1753 { \
1754 .structType = ldmaCtrlStructTypeXfer, \
1755 .extend = 1, \
1756 .structReq = 1, \
1757 .xferCnt = (count) - 1, \
1758 .byteSwap = 0, \
1759 .blockSize = ldmaCtrlBlockSizeUnit1, \
1760 .doneIfs = 0, \
1761 .reqMode = ldmaCtrlReqModeAll, \
1762 .decLoopCnt = 0, \
1763 .ignoreSrec = 0, \
1764 .srcInc = ldmaCtrlSrcIncOne, \
1765 .size = ldmaCtrlSizeWord, \
1766 .dstInc = ldmaCtrlDstIncNone, \
1767 .srcAddrMode = ldmaCtrlSrcAddrModeAbs, \
1768 .dstAddrMode = ldmaCtrlDstAddrModeAbs, \
1769 .srcAddr = (uint32_t)(src), \
1770 .dstAddr = (uint32_t)(dest), \
1771 .linkMode = ldmaLinkModeRel, \
1772 .link = 1, \
1773 .linkAddr = (linkjmp) * LDMA_DESCRIPTOR_EXTEND_SIZE_WORD, \
1774 .dstIlEn = 0, \
1775 .IlMode = 0, \
1776 .bufferable = 0, \
1777 .IlSrc = 0 \
1778 }
1779 #endif
1780
1781 /**
1782 * @brief
1783 * DMA descriptor initializer for linked memory to memory half-word transfer.
1784 *
1785 * Link address is a relative address.
1786 * @note
1787 * The linkAddr member of the transfer descriptor is initialized to 4
1788 * (regular descriptor) or 7 (extended descriptor), assuming that
1789 * the next descriptor immediately follows this descriptor (in memory).
1790 * @param[in] src Source data address.
1791 * @param[in] dest Destination data address.
1792 * @param[in] count Number of half-words to transfer.
1793 * @param[in] linkjmp Address of descriptor to link to, expressed as a
1794 * signed number of descriptors from "here".
1795 * 1=one descriptor forward in memory,
1796 * 0=this descriptor,
1797 * -1=one descriptor back in memory.
1798 */
1799 #define LDMA_DESCRIPTOR_LINKREL_M2M_HALF(src, dest, count, linkjmp) \
1800 { \
1801 .xfer = \
1802 { \
1803 .structType = ldmaCtrlStructTypeXfer, \
1804 .structReq = 1, \
1805 .xferCnt = (count) - 1, \
1806 .byteSwap = 0, \
1807 .blockSize = ldmaCtrlBlockSizeUnit1, \
1808 .doneIfs = 0, \
1809 .reqMode = ldmaCtrlReqModeAll, \
1810 .decLoopCnt = 0, \
1811 .ignoreSrec = 0, \
1812 .srcInc = ldmaCtrlSrcIncOne, \
1813 .size = ldmaCtrlSizeHalf, \
1814 .dstInc = ldmaCtrlDstIncOne, \
1815 .srcAddrMode = ldmaCtrlSrcAddrModeAbs, \
1816 .dstAddrMode = ldmaCtrlDstAddrModeAbs, \
1817 .srcAddr = (uint32_t)(src), \
1818 .dstAddr = (uint32_t)(dest), \
1819 .linkMode = ldmaLinkModeRel, \
1820 .link = 1, \
1821 .linkAddr = (linkjmp) * LDMA_DESCRIPTOR_NON_EXTEND_SIZE_WORD \
1822 } \
1823 }
1824
1825 #if defined(_LDMA_CH_CTRL_EXTEND_MASK)
1826 /**
1827 * @brief
1828 * DMA descriptor initializer for linked memory to memory half-word transfer
1829 * using the extended descriptor fields.
1830 *
1831 * Link address is a relative address.
1832 * @note
1833 * The linkAddr member of the transfer descriptor is initialized to 4
1834 * (regular descriptor) or 7 (extended descriptor), assuming that
1835 * the next descriptor immediately follows this descriptor (in memory).
1836 * @param[in] src Source data address.
1837 * @param[in] dest Destination data address.
1838 * @param[in] count Number of half-words to transfer.
1839 * @param[in] linkjmp Address of descriptor to link to, expressed as a
1840 * signed number of descriptors from "here".
1841 * 1=one descriptor forward in memory,
1842 * 0=this descriptor,
1843 * -1=one descriptor back in memory.
1844 */
1845 #define LDMA_DESCRIPTOR_LINKREL_M2M_HALF_EXTEND(src, dest, count, linkjmp) \
1846 { \
1847 .structType = ldmaCtrlStructTypeXfer, \
1848 .extend = 1, \
1849 .structReq = 1, \
1850 .xferCnt = (count) - 1, \
1851 .byteSwap = 0, \
1852 .blockSize = ldmaCtrlBlockSizeUnit1, \
1853 .doneIfs = 0, \
1854 .reqMode = ldmaCtrlReqModeAll, \
1855 .decLoopCnt = 0, \
1856 .ignoreSrec = 0, \
1857 .srcInc = ldmaCtrlSrcIncOne, \
1858 .size = ldmaCtrlSizeHalf, \
1859 .dstInc = ldmaCtrlDstIncNone, \
1860 .srcAddrMode = ldmaCtrlSrcAddrModeAbs, \
1861 .dstAddrMode = ldmaCtrlDstAddrModeAbs, \
1862 .srcAddr = (uint32_t)(src), \
1863 .dstAddr = (uint32_t)(dest), \
1864 .linkMode = ldmaLinkModeRel, \
1865 .link = 1, \
1866 .linkAddr = (linkjmp) * LDMA_DESCRIPTOR_EXTEND_SIZE_WORD, \
1867 .dstIlEn = 0, \
1868 .IlMode = 0, \
1869 .bufferable = 0, \
1870 .IlSrc = 0 \
1871 }
1872 #endif
1873
1874 /**
1875 * @brief
1876 * DMA descriptor initializer for linked memory to memory byte transfer.
1877 *
1878 * Link address is a relative address.
1879 * @note
1880 * The linkAddr member of the transfer descriptor is initialized to 4
1881 * (regular descriptor) or 7 (extended descriptor), assuming that
1882 * the next descriptor immediately follows this descriptor (in memory).
1883 * @param[in] src Source data address.
1884 * @param[in] dest Destination data address.
1885 * @param[in] count Number of bytes to transfer.
1886 * @param[in] linkjmp Address of descriptor to link to, expressed as a
1887 * signed number of descriptors from "here".
1888 * 1=one descriptor forward in memory,
1889 * 0=this descriptor,
1890 * -1=one descriptor back in memory.
1891 */
1892 #define LDMA_DESCRIPTOR_LINKREL_M2M_BYTE(src, dest, count, linkjmp) \
1893 { \
1894 .xfer = \
1895 { \
1896 .structType = ldmaCtrlStructTypeXfer, \
1897 .structReq = 1, \
1898 .xferCnt = (count) - 1, \
1899 .byteSwap = 0, \
1900 .blockSize = ldmaCtrlBlockSizeUnit1, \
1901 .doneIfs = 0, \
1902 .reqMode = ldmaCtrlReqModeAll, \
1903 .decLoopCnt = 0, \
1904 .ignoreSrec = 0, \
1905 .srcInc = ldmaCtrlSrcIncOne, \
1906 .size = ldmaCtrlSizeByte, \
1907 .dstInc = ldmaCtrlDstIncOne, \
1908 .srcAddrMode = ldmaCtrlSrcAddrModeAbs, \
1909 .dstAddrMode = ldmaCtrlDstAddrModeAbs, \
1910 .srcAddr = (uint32_t)(src), \
1911 .dstAddr = (uint32_t)(dest), \
1912 .linkMode = ldmaLinkModeRel, \
1913 .link = 1, \
1914 .linkAddr = (linkjmp) * LDMA_DESCRIPTOR_NON_EXTEND_SIZE_WORD \
1915 } \
1916 }
1917
1918 #if defined(_LDMA_CH_CTRL_EXTEND_MASK)
1919 /**
1920 * @brief
1921 * DMA descriptor initializer for linked memory to memory byte transfer
1922 * using the extended descriptor fields.
1923 *
1924 * Link address is a relative address.
1925 * @note
1926 * The linkAddr member of the transfer descriptor is initialized to 4
1927 * (regular descriptor) or 7 (extended descriptor), assuming that
1928 * the next descriptor immediately follows this descriptor (in memory).
1929 * @param[in] src Source data address.
1930 * @param[in] dest Destination data address.
1931 * @param[in] count Number of bytes to transfer.
1932 * @param[in] linkjmp Address of descriptor to link to, expressed as a
1933 * signed number of descriptors from "here".
1934 * 1=one descriptor forward in memory,
1935 * 0=this descriptor,
1936 * -1=one descriptor back in memory.
1937 */
1938 #define LDMA_DESCRIPTOR_LINKREL_M2M_BYTE_EXTEND(src, dest, count, linkjmp) \
1939 { \
1940 .structType = ldmaCtrlStructTypeXfer, \
1941 .extend = 1, \
1942 .structReq = 1, \
1943 .xferCnt = (count) - 1, \
1944 .byteSwap = 0, \
1945 .blockSize = ldmaCtrlBlockSizeUnit1, \
1946 .doneIfs = 0, \
1947 .reqMode = ldmaCtrlReqModeAll, \
1948 .decLoopCnt = 0, \
1949 .ignoreSrec = 0, \
1950 .srcInc = ldmaCtrlSrcIncOne, \
1951 .size = ldmaCtrlSizeByte, \
1952 .dstInc = ldmaCtrlDstIncNone, \
1953 .srcAddrMode = ldmaCtrlSrcAddrModeAbs, \
1954 .dstAddrMode = ldmaCtrlDstAddrModeAbs, \
1955 .srcAddr = (uint32_t)(src), \
1956 .dstAddr = (uint32_t)(dest), \
1957 .linkMode = ldmaLinkModeRel, \
1958 .link = 1, \
1959 .linkAddr = (linkjmp) * LDMA_DESCRIPTOR_EXTEND_SIZE_WORD, \
1960 .dstIlEn = 0, \
1961 .IlMode = 0, \
1962 .bufferable = 0, \
1963 .IlSrc = 0 \
1964 }
1965 #endif
1966
1967 /**
1968 * @brief
1969 * DMA descriptor initializer for byte transfers from a peripheral to memory.
1970 * @param[in] src Peripheral data source register address.
1971 * @param[in] dest Destination data address.
1972 * @param[in] count Number of bytes to transfer.
1973 */
1974 #define LDMA_DESCRIPTOR_SINGLE_P2M_BYTE(src, dest, count) \
1975 { \
1976 .xfer = \
1977 { \
1978 .structType = ldmaCtrlStructTypeXfer, \
1979 .structReq = 0, \
1980 .xferCnt = (count) - 1, \
1981 .byteSwap = 0, \
1982 .blockSize = ldmaCtrlBlockSizeUnit1, \
1983 .doneIfs = 1, \
1984 .reqMode = ldmaCtrlReqModeBlock, \
1985 .decLoopCnt = 0, \
1986 .ignoreSrec = 0, \
1987 .srcInc = ldmaCtrlSrcIncNone, \
1988 .size = ldmaCtrlSizeByte, \
1989 .dstInc = ldmaCtrlDstIncOne, \
1990 .srcAddrMode = ldmaCtrlSrcAddrModeAbs, \
1991 .dstAddrMode = ldmaCtrlDstAddrModeAbs, \
1992 .srcAddr = (uint32_t)(src), \
1993 .dstAddr = (uint32_t)(dest), \
1994 .linkMode = 0, \
1995 .link = 0, \
1996 .linkAddr = 0 \
1997 } \
1998 }
1999
2000 #if defined(_LDMA_CH_CTRL_EXTEND_MASK)
2001 /**
2002 * @brief
2003 * DMA descriptor initializer for byte transfers from a peripheral to memory
2004 * using the extended descriptor fields.
2005 * @param[in] src Peripheral data source register address.
2006 * @param[in] dest Destination data address.
2007 * @param[in] count Number of bytes to transfer.
2008 */
2009 #define LDMA_DESCRIPTOR_SINGLE_P2M_BYTE_EXTEND(src, dest, count) \
2010 { \
2011 .structType = ldmaCtrlStructTypeXfer, \
2012 .extend = 1, \
2013 .structReq = 0, \
2014 .xferCnt = (count) - 1, \
2015 .byteSwap = 0, \
2016 .blockSize = ldmaCtrlBlockSizeUnit1, \
2017 .doneIfs = 1, \
2018 .reqMode = ldmaCtrlReqModeBlock, \
2019 .decLoopCnt = 0, \
2020 .ignoreSrec = 0, \
2021 .srcInc = ldmaCtrlSrcIncNone, \
2022 .size = ldmaCtrlSizeByte, \
2023 .dstInc = ldmaCtrlDstIncNone, \
2024 .srcAddrMode = ldmaCtrlSrcAddrModeAbs, \
2025 .dstAddrMode = ldmaCtrlDstAddrModeAbs, \
2026 .srcAddr = (uint32_t)(src), \
2027 .dstAddr = (uint32_t)(dest), \
2028 .linkMode = 0, \
2029 .link = 0, \
2030 .linkAddr = 0, \
2031 .dstIlEn = 0, \
2032 .IlMode = 0, \
2033 .bufferable = 0, \
2034 .IlSrc = 0 \
2035 }
2036 #endif
2037
2038 /**
2039 * @brief
2040 * DMA descriptor initializer for byte transfers from a peripheral to a peripheral.
2041 * @param[in] src Peripheral data source register address.
2042 * @param[in] dest Peripheral data destination register address.
2043 * @param[in] count Number of bytes to transfer.
2044 */
2045 #define LDMA_DESCRIPTOR_SINGLE_P2P_BYTE(src, dest, count) \
2046 { \
2047 .xfer = \
2048 { \
2049 .structType = ldmaCtrlStructTypeXfer, \
2050 .structReq = 0, \
2051 .xferCnt = (count) - 1, \
2052 .byteSwap = 0, \
2053 .blockSize = ldmaCtrlBlockSizeUnit1, \
2054 .doneIfs = 1, \
2055 .reqMode = ldmaCtrlReqModeBlock, \
2056 .decLoopCnt = 0, \
2057 .ignoreSrec = 0, \
2058 .srcInc = ldmaCtrlSrcIncNone, \
2059 .size = ldmaCtrlSizeByte, \
2060 .dstInc = ldmaCtrlDstIncNone, \
2061 .srcAddrMode = ldmaCtrlSrcAddrModeAbs, \
2062 .dstAddrMode = ldmaCtrlDstAddrModeAbs, \
2063 .srcAddr = (uint32_t)(src), \
2064 .dstAddr = (uint32_t)(dest), \
2065 .linkMode = 0, \
2066 .link = 0, \
2067 .linkAddr = 0 \
2068 } \
2069 }
2070
2071 /**
2072 * @brief
2073 * DMA descriptor initializer for byte transfers from memory to a peripheral.
2074 * @param[in] src Source data address.
2075 * @param[in] dest Peripheral data register destination address.
2076 * @param[in] count Number of bytes to transfer.
2077 */
2078 #define LDMA_DESCRIPTOR_SINGLE_M2P_BYTE(src, dest, count) \
2079 { \
2080 .xfer = \
2081 { \
2082 .structType = ldmaCtrlStructTypeXfer, \
2083 .structReq = 0, \
2084 .xferCnt = (count) - 1, \
2085 .byteSwap = 0, \
2086 .blockSize = ldmaCtrlBlockSizeUnit1, \
2087 .doneIfs = 1, \
2088 .reqMode = ldmaCtrlReqModeBlock, \
2089 .decLoopCnt = 0, \
2090 .ignoreSrec = 0, \
2091 .srcInc = ldmaCtrlSrcIncOne, \
2092 .size = ldmaCtrlSizeByte, \
2093 .dstInc = ldmaCtrlDstIncNone, \
2094 .srcAddrMode = ldmaCtrlSrcAddrModeAbs, \
2095 .dstAddrMode = ldmaCtrlDstAddrModeAbs, \
2096 .srcAddr = (uint32_t)(src), \
2097 .dstAddr = (uint32_t)(dest), \
2098 .linkMode = 0, \
2099 .link = 0, \
2100 .linkAddr = 0 \
2101 } \
2102 }
2103
2104 #if defined(_LDMA_CH_CTRL_EXTEND_MASK)
2105 /**
2106 * @brief
2107 * DMA descriptor initializer for byte transfers from memory to a peripheral
2108 * using the extended descriptor fields.
2109 * @note
2110 * For the extended descriptor, if IlMode uses the absolute addressing, the
2111 * rules are used directly as the destination addresses of the corresponding
2112 * data. Thus the argument 'dest' will be ignored by the DMA engine.
2113 * @param[in] src Source data address.
2114 * @param[in] dest Peripheral data register destination address.
2115 * @param[in] count Number of bytes to transfer.
2116 */
2117 #define LDMA_DESCRIPTOR_SINGLE_M2P_BYTE_EXTEND(src, dest, count) \
2118 { \
2119 .structType = ldmaCtrlStructTypeXfer, \
2120 .extend = 1, \
2121 .structReq = 0, \
2122 .xferCnt = (count) - 1, \
2123 .byteSwap = 0, \
2124 .blockSize = ldmaCtrlBlockSizeUnit1, \
2125 .doneIfs = 1, \
2126 .reqMode = ldmaCtrlReqModeBlock, \
2127 .decLoopCnt = 0, \
2128 .ignoreSrec = 0, \
2129 .srcInc = ldmaCtrlSrcIncOne, \
2130 .size = ldmaCtrlSizeByte, \
2131 .dstInc = ldmaCtrlDstIncNone, \
2132 .srcAddrMode = ldmaCtrlSrcAddrModeAbs, \
2133 .dstAddrMode = ldmaCtrlDstAddrModeAbs, \
2134 .srcAddr = (uint32_t)(src), \
2135 .dstAddr = (uint32_t)(dest), \
2136 .linkMode = 0, \
2137 .link = 0, \
2138 .linkAddr = 0, \
2139 .dstIlEn = 0, \
2140 .IlMode = 0, \
2141 .bufferable = 0, \
2142 .IlSrc = 0 \
2143 }
2144 #endif
2145
2146 /**
2147 * @brief
2148 * DMA descriptor initializer for byte transfers from a peripheral to memory.
2149 * @param[in] src Peripheral data source register address.
2150 * @param[in] dest Destination data address.
2151 * @param[in] count Number of bytes to transfer.
2152 * @param[in] linkjmp Address of descriptor to link to, expressed as a
2153 * signed number of descriptors from "here".
2154 * 1=one descriptor forward in memory,
2155 * 0=this descriptor,
2156 * -1=one descriptor back in memory.
2157 */
2158 #define LDMA_DESCRIPTOR_LINKREL_P2M_BYTE(src, dest, count, linkjmp) \
2159 { \
2160 .xfer = \
2161 { \
2162 .structType = ldmaCtrlStructTypeXfer, \
2163 .structReq = 0, \
2164 .xferCnt = (count) - 1, \
2165 .byteSwap = 0, \
2166 .blockSize = ldmaCtrlBlockSizeUnit1, \
2167 .doneIfs = 1, \
2168 .reqMode = ldmaCtrlReqModeBlock, \
2169 .decLoopCnt = 0, \
2170 .ignoreSrec = 0, \
2171 .srcInc = ldmaCtrlSrcIncNone, \
2172 .size = ldmaCtrlSizeByte, \
2173 .dstInc = ldmaCtrlDstIncOne, \
2174 .srcAddrMode = ldmaCtrlSrcAddrModeAbs, \
2175 .dstAddrMode = ldmaCtrlDstAddrModeAbs, \
2176 .srcAddr = (uint32_t)(src), \
2177 .dstAddr = (uint32_t)(dest), \
2178 .linkMode = ldmaLinkModeRel, \
2179 .link = 1, \
2180 .linkAddr = (linkjmp) * LDMA_DESCRIPTOR_NON_EXTEND_SIZE_WORD \
2181 } \
2182 }
2183
2184 #if defined(_LDMA_CH_CTRL_EXTEND_MASK)
2185 /**
2186 * @brief
2187 * DMA descriptor initializer for byte transfers from a peripheral to memory
2188 * using the extended descriptor fields.
2189 * @param[in] src Peripheral data source register address.
2190 * @param[in] dest Destination data address.
2191 * @param[in] count Number of bytes to transfer.
2192 * @param[in] linkjmp Address of descriptor to link to, expressed as a
2193 * signed number of descriptors from "here".
2194 * 1=one descriptor forward in memory,
2195 * 0=this descriptor,
2196 * -1=one descriptor back in memory.
2197 */
2198 #define LDMA_DESCRIPTOR_LINKREL_P2M_BYTE_EXTEND(src, dest, count, linkjmp) \
2199 { \
2200 .structType = ldmaCtrlStructTypeXfer, \
2201 .extend = 1, \
2202 .structReq = 0, \
2203 .xferCnt = (count) - 1, \
2204 .byteSwap = 0, \
2205 .blockSize = ldmaCtrlBlockSizeUnit1, \
2206 .doneIfs = 1, \
2207 .reqMode = ldmaCtrlReqModeBlock, \
2208 .decLoopCnt = 0, \
2209 .ignoreSrec = 0, \
2210 .srcInc = ldmaCtrlSrcIncNone, \
2211 .size = ldmaCtrlSizeByte, \
2212 .dstInc = ldmaCtrlDstIncNone, \
2213 .srcAddrMode = ldmaCtrlSrcAddrModeAbs, \
2214 .dstAddrMode = ldmaCtrlDstAddrModeAbs, \
2215 .srcAddr = (uint32_t)(src), \
2216 .dstAddr = (uint32_t)(dest), \
2217 .linkMode = ldmaLinkModeRel, \
2218 .link = 1, \
2219 .linkAddr = (linkjmp) * LDMA_DESCRIPTOR_EXTEND_SIZE_WORD, \
2220 .dstIlEn = 0, \
2221 .IlMode = 0, \
2222 .bufferable = 0, \
2223 .IlSrc = 0 \
2224 }
2225 #endif
2226
2227 /**
2228 * @brief
2229 * DMA descriptor initializer for word transfers from a peripheral to memory.
2230 * @param[in] src Peripheral data source register address.
2231 * @param[in] dest Destination data address.
2232 * @param[in] count Number of words to transfer.
2233 * @param[in] linkjmp Address of descriptor to link to, expressed as a
2234 * signed number of descriptors from "here".
2235 * 1=one descriptor forward in memory,
2236 * 0=this descriptor,
2237 * -1=one descriptor back in memory.
2238 */
2239 #define LDMA_DESCRIPTOR_LINKREL_P2M_WORD(src, dest, count, linkjmp) \
2240 { \
2241 .xfer = \
2242 { \
2243 .structType = ldmaCtrlStructTypeXfer, \
2244 .structReq = 0, \
2245 .xferCnt = (count) - 1, \
2246 .byteSwap = 0, \
2247 .blockSize = ldmaCtrlBlockSizeUnit1, \
2248 .doneIfs = 1, \
2249 .reqMode = ldmaCtrlReqModeBlock, \
2250 .decLoopCnt = 0, \
2251 .ignoreSrec = 0, \
2252 .srcInc = ldmaCtrlSrcIncNone, \
2253 .size = ldmaCtrlSizeWord, \
2254 .dstInc = ldmaCtrlDstIncOne, \
2255 .srcAddrMode = ldmaCtrlSrcAddrModeAbs, \
2256 .dstAddrMode = ldmaCtrlDstAddrModeAbs, \
2257 .srcAddr = (uint32_t)(src), \
2258 .dstAddr = (uint32_t)(dest), \
2259 .linkMode = ldmaLinkModeRel, \
2260 .link = 1, \
2261 .linkAddr = (linkjmp) * LDMA_DESCRIPTOR_NON_EXTEND_SIZE_WORD \
2262 } \
2263 }
2264
2265 #if defined(_LDMA_CH_CTRL_EXTEND_MASK)
2266 /**
2267 * @brief
2268 * DMA descriptor initializer for word transfers from a peripheral to memory
2269 * using the extended descriptor fields.
2270 * @param[in] src Peripheral data source register address.
2271 * @param[in] dest Destination data address.
2272 * @param[in] count Number of words to transfer.
2273 * @param[in] linkjmp Address of descriptor to link to, expressed as a
2274 * signed number of descriptors from "here".
2275 * 1=one descriptor forward in memory,
2276 * 0=this descriptor,
2277 * -1=one descriptor back in memory.
2278 */
2279 #define LDMA_DESCRIPTOR_LINKREL_P2M_WORD_EXTEND(src, dest, count, linkjmp) \
2280 { \
2281 .structType = ldmaCtrlStructTypeXfer, \
2282 .extend = 1, \
2283 .structReq = 0, \
2284 .xferCnt = (count) - 1, \
2285 .byteSwap = 0, \
2286 .blockSize = ldmaCtrlBlockSizeUnit1, \
2287 .doneIfs = 1, \
2288 .reqMode = ldmaCtrlReqModeBlock, \
2289 .decLoopCnt = 0, \
2290 .ignoreSrec = 0, \
2291 .srcInc = ldmaCtrlSrcIncNone, \
2292 .size = ldmaCtrlSizeWord, \
2293 .dstInc = ldmaCtrlDstIncNone, \
2294 .srcAddrMode = ldmaCtrlSrcAddrModeAbs, \
2295 .dstAddrMode = ldmaCtrlDstAddrModeAbs, \
2296 .srcAddr = (uint32_t)(src), \
2297 .dstAddr = (uint32_t)(dest), \
2298 .linkMode = ldmaLinkModeRel, \
2299 .link = 1, \
2300 .linkAddr = (linkjmp) * LDMA_DESCRIPTOR_EXTEND_SIZE_WORD, \
2301 .dstIlEn = 0, \
2302 .IlMode = 0, \
2303 .bufferable = 0, \
2304 .IlSrc = 0 \
2305 }
2306 #endif
2307
2308 /**
2309 * @brief
2310 * DMA descriptor initializer for byte transfers from memory to a peripheral.
2311 * @param[in] src Source data address.
2312 * @param[in] dest Peripheral data register destination address.
2313 * @param[in] count Number of bytes to transfer.
2314 * @param[in] linkjmp Address of descriptor to link to, expressed as a
2315 * signed number of descriptors from "here".
2316 * 1=one descriptor forward in memory,
2317 * 0=this descriptor,
2318 * -1=one descriptor back in memory.
2319 */
2320 #define LDMA_DESCRIPTOR_LINKREL_M2P_BYTE(src, dest, count, linkjmp) \
2321 { \
2322 .xfer = \
2323 { \
2324 .structType = ldmaCtrlStructTypeXfer, \
2325 .structReq = 0, \
2326 .xferCnt = (count) - 1, \
2327 .byteSwap = 0, \
2328 .blockSize = ldmaCtrlBlockSizeUnit1, \
2329 .doneIfs = 1, \
2330 .reqMode = ldmaCtrlReqModeBlock, \
2331 .decLoopCnt = 0, \
2332 .ignoreSrec = 0, \
2333 .srcInc = ldmaCtrlSrcIncOne, \
2334 .size = ldmaCtrlSizeByte, \
2335 .dstInc = ldmaCtrlDstIncNone, \
2336 .srcAddrMode = ldmaCtrlSrcAddrModeAbs, \
2337 .dstAddrMode = ldmaCtrlDstAddrModeAbs, \
2338 .srcAddr = (uint32_t)(src), \
2339 .dstAddr = (uint32_t)(dest), \
2340 .linkMode = ldmaLinkModeRel, \
2341 .link = 1, \
2342 .linkAddr = (linkjmp) * LDMA_DESCRIPTOR_NON_EXTEND_SIZE_WORD \
2343 } \
2344 }
2345
2346 #if defined(_LDMA_CH_CTRL_EXTEND_MASK)
2347 /**
2348 * @brief
2349 * DMA descriptor initializer for byte transfers from memory to a peripheral
2350 * using the extended descriptor fields.
2351 * @note
2352 * For the extended descriptor, if IlMode uses the absolute addressing, the
2353 * rules are used directly as the destination addresses of the corresponding
2354 * data. Thus the argument 'dest' will be ignored by the DMA engine.
2355 * @param[in] src Source data address.
2356 * @param[in] dest Peripheral data register destination address.
2357 * @param[in] count Number of bytes to transfer.
2358 * @param[in] linkjmp Address of descriptor to link to, expressed as a
2359 * signed number of descriptors from "here".
2360 * 1=one descriptor forward in memory,
2361 * 0=this descriptor,
2362 * -1=one descriptor back in memory.
2363 */
2364 #define LDMA_DESCRIPTOR_LINKREL_M2P_BYTE_EXTEND(src, dest, count, linkjmp) \
2365 { \
2366 .structType = ldmaCtrlStructTypeXfer, \
2367 .extend = 1, \
2368 .structReq = 0, \
2369 .xferCnt = (count) - 1, \
2370 .byteSwap = 0, \
2371 .blockSize = ldmaCtrlBlockSizeUnit1, \
2372 .doneIfs = 1, \
2373 .reqMode = ldmaCtrlReqModeBlock, \
2374 .decLoopCnt = 0, \
2375 .ignoreSrec = 0, \
2376 .srcInc = ldmaCtrlSrcIncOne, \
2377 .size = ldmaCtrlSizeByte, \
2378 .dstInc = ldmaCtrlDstIncNone, \
2379 .srcAddrMode = ldmaCtrlSrcAddrModeAbs, \
2380 .dstAddrMode = ldmaCtrlDstAddrModeAbs, \
2381 .srcAddr = (uint32_t)(src), \
2382 .dstAddr = (uint32_t)(dest), \
2383 .linkMode = ldmaLinkModeRel, \
2384 .link = 1, \
2385 .linkAddr = (linkjmp) * LDMA_DESCRIPTOR_EXTEND_SIZE_WORD, \
2386 .dstIlEn = 0, \
2387 .IlMode = 0, \
2388 .bufferable = 0, \
2389 .IlSrc = 0 \
2390 }
2391 #endif
2392
2393 /**
2394 * @brief
2395 * DMA descriptor initializer for Immediate WRITE transfer
2396 * @param[in] value Immediate value to write.
2397 * @param[in] address Write address.
2398 */
2399 #define LDMA_DESCRIPTOR_SINGLE_WRITE(value, address) \
2400 { \
2401 .wri = \
2402 { \
2403 .structType = ldmaCtrlStructTypeWrite, \
2404 .structReq = 1, \
2405 .xferCnt = 0, \
2406 .byteSwap = 0, \
2407 .blockSize = 0, \
2408 .doneIfs = 1, \
2409 .reqMode = 0, \
2410 .decLoopCnt = 0, \
2411 .ignoreSrec = 0, \
2412 .srcInc = 0, \
2413 .size = 0, \
2414 .dstInc = 0, \
2415 .srcAddrMode = 0, \
2416 .dstAddrMode = 0, \
2417 .immVal = (value), \
2418 .dstAddr = (uint32_t)(address), \
2419 .linkMode = 0, \
2420 .link = 0, \
2421 .linkAddr = 0 \
2422 } \
2423 }
2424
2425 /**
2426 * @brief
2427 * DMA descriptor initializer for Immediate WRITE transfer
2428 *
2429 * Link address must be an absolute address.
2430 * @note
2431 * The linkAddr member of the transfer descriptor is not initialized.
2432 * linkAddr must be initialized by using the proper bits right-shift
2433 * to get the correct bits from the absolute address.
2434 * LDMA_DESCRIPTOR_LINKABS_ADDR_TO_LINKADDR should be used for that operation:
2435 * @code
2436 desc.linkAddr = LDMA_DESCRIPTOR_LINKABS_ADDR_TO_LINKADDR(&next_desc);@endcode
2437 * The opposite bit shift (left) must be done with LDMA_DESCRIPTOR_LINKABS_ADDR_TO_LINKADDR
2438 * if linkAddr is read.
2439 * @param[in] value Immediate value to write.
2440 * @param[in] address Write address.
2441 */
2442 #define LDMA_DESCRIPTOR_LINKABS_WRITE(value, address) \
2443 { \
2444 .wri = \
2445 { \
2446 .structType = ldmaCtrlStructTypeWrite, \
2447 .structReq = 1, \
2448 .xferCnt = 0, \
2449 .byteSwap = 0, \
2450 .blockSize = 0, \
2451 .doneIfs = 0, \
2452 .reqMode = 0, \
2453 .decLoopCnt = 0, \
2454 .ignoreSrec = 0, \
2455 .srcInc = 0, \
2456 .size = 0, \
2457 .dstInc = 0, \
2458 .srcAddrMode = 0, \
2459 .dstAddrMode = 0, \
2460 .immVal = (value), \
2461 .dstAddr = (uint32_t)(address), \
2462 .linkMode = ldmaLinkModeAbs, \
2463 .link = 1, \
2464 .linkAddr = 0 /* Must be set runtime ! */ \
2465 } \
2466 }
2467
2468 /**
2469 * @brief
2470 * DMA descriptor initializer for Immediate WRITE transfer
2471 * @param[in] value Immediate value to write.
2472 * @param[in] address Write address.
2473 * @param[in] linkjmp Address of descriptor to link to, expressed as a
2474 * signed number of descriptors from "here".
2475 * 1=one descriptor forward in memory,
2476 * 0=this descriptor,
2477 * -1=one descriptor back in memory.
2478 */
2479 #define LDMA_DESCRIPTOR_LINKREL_WRITE(value, address, linkjmp) \
2480 { \
2481 .wri = \
2482 { \
2483 .structType = ldmaCtrlStructTypeWrite, \
2484 .structReq = 1, \
2485 .xferCnt = 0, \
2486 .byteSwap = 0, \
2487 .blockSize = 0, \
2488 .doneIfs = 0, \
2489 .reqMode = 0, \
2490 .decLoopCnt = 0, \
2491 .ignoreSrec = 0, \
2492 .srcInc = 0, \
2493 .size = 0, \
2494 .dstInc = 0, \
2495 .srcAddrMode = 0, \
2496 .dstAddrMode = 0, \
2497 .immVal = (value), \
2498 .dstAddr = (uint32_t)(address), \
2499 .linkMode = ldmaLinkModeRel, \
2500 .link = 1, \
2501 .linkAddr = (linkjmp) * LDMA_DESCRIPTOR_NON_EXTEND_SIZE_WORD \
2502 } \
2503 }
2504
2505 /**
2506 * @brief
2507 * DMA descriptor initializer for SYNC transfer
2508 * @param[in] set Sync pattern bits to set.
2509 * @param[in] clr Sync pattern bits to clear.
2510 * @param[in] matchValue Sync pattern to match.
2511 * @param[in] matchEnable Sync pattern bits to enable for match.
2512 */
2513 #define LDMA_DESCRIPTOR_SINGLE_SYNC(set, clr, matchValue, matchEnable) \
2514 { \
2515 .sync = \
2516 { \
2517 .structType = ldmaCtrlStructTypeSync, \
2518 .structReq = 1, \
2519 .xferCnt = 0, \
2520 .byteSwap = 0, \
2521 .blockSize = 0, \
2522 .doneIfs = 1, \
2523 .reqMode = 0, \
2524 .decLoopCnt = 0, \
2525 .ignoreSrec = 0, \
2526 .srcInc = 0, \
2527 .size = 0, \
2528 .dstInc = 0, \
2529 .srcAddrMode = 0, \
2530 .dstAddrMode = 0, \
2531 .syncSet = (set), \
2532 .syncClr = (clr), \
2533 .matchVal = (matchValue), \
2534 .matchEn = (matchEnable), \
2535 .linkMode = 0, \
2536 .link = 0, \
2537 .linkAddr = 0 \
2538 } \
2539 }
2540
2541 /**
2542 * @brief
2543 * DMA descriptor initializer for SYNC transfer
2544 *
2545 * Link address must be an absolute address.
2546 * @note
2547 * The linkAddr member of the transfer descriptor is not initialized.
2548 * linkAddr must be initialized by using the proper bits right-shift
2549 * to get the correct bits from the absolute address.
2550 * LDMA_DESCRIPTOR_LINKABS_ADDR_TO_LINKADDR should be used for that operation:
2551 * @code
2552 desc.linkAddr = LDMA_DESCRIPTOR_LINKABS_ADDR_TO_LINKADDR(&next_desc);@endcode
2553 * The opposite bit shift (left) must be done with LDMA_DESCRIPTOR_LINKABS_ADDR_TO_LINKADDR
2554 * if linkAddr is read.
2555 * @param[in] set Sync pattern bits to set.
2556 * @param[in] clr Sync pattern bits to clear.
2557 * @param[in] matchValue Sync pattern to match.
2558 * @param[in] matchEnable Sync pattern bits to enable for match.
2559 */
2560 #define LDMA_DESCRIPTOR_LINKABS_SYNC(set, clr, matchValue, matchEnable) \
2561 { \
2562 .sync = \
2563 { \
2564 .structType = ldmaCtrlStructTypeSync, \
2565 .structReq = 1, \
2566 .xferCnt = 0, \
2567 .byteSwap = 0, \
2568 .blockSize = 0, \
2569 .doneIfs = 0, \
2570 .reqMode = 0, \
2571 .decLoopCnt = 0, \
2572 .ignoreSrec = 0, \
2573 .srcInc = 0, \
2574 .size = 0, \
2575 .dstInc = 0, \
2576 .srcAddrMode = 0, \
2577 .dstAddrMode = 0, \
2578 .syncSet = (set), \
2579 .syncClr = (clr), \
2580 .matchVal = (matchValue), \
2581 .matchEn = (matchEnable), \
2582 .linkMode = ldmaLinkModeAbs, \
2583 .link = 1, \
2584 .linkAddr = 0 /* Must be set runtime ! */ \
2585 } \
2586 }
2587
2588 /**
2589 * @brief
2590 * DMA descriptor initializer for SYNC transfer
2591 * @param[in] set Sync pattern bits to set.
2592 * @param[in] clr Sync pattern bits to clear.
2593 * @param[in] matchValue Sync pattern to match.
2594 * @param[in] matchEnable Sync pattern bits to enable for match.
2595 * @param[in] linkjmp Address of descriptor to link to, expressed as a
2596 * signed number of descriptors from "here".
2597 * 1=one descriptor forward in memory,
2598 * 0=this descriptor,
2599 * -1=one descriptor back in memory.
2600 */
2601 #define LDMA_DESCRIPTOR_LINKREL_SYNC(set, clr, matchValue, matchEnable, linkjmp) \
2602 { \
2603 .sync = \
2604 { \
2605 .structType = ldmaCtrlStructTypeSync, \
2606 .structReq = 1, \
2607 .xferCnt = 0, \
2608 .byteSwap = 0, \
2609 .blockSize = 0, \
2610 .doneIfs = 0, \
2611 .reqMode = 0, \
2612 .decLoopCnt = 0, \
2613 .ignoreSrec = 0, \
2614 .srcInc = 0, \
2615 .size = 0, \
2616 .dstInc = 0, \
2617 .srcAddrMode = 0, \
2618 .dstAddrMode = 0, \
2619 .syncSet = (set), \
2620 .syncClr = (clr), \
2621 .matchVal = (matchValue), \
2622 .matchEn = (matchEnable), \
2623 .linkMode = ldmaLinkModeRel, \
2624 .link = 1, \
2625 .linkAddr = (linkjmp) * LDMA_DESCRIPTOR_NON_EXTEND_SIZE_WORD \
2626 } \
2627 }
2628
2629 #if defined(_LDMA_CH_CTRL_EXTEND_MASK)
2630 /**
2631 * @brief
2632 * Initializer for the destination interleaving portion of the DMA extended descriptor.
2633 * @param[in] desc Transfer-type descriptor.
2634 * @param[in] ilmode Rules table addressing mode for interleaved data.
2635 * @param[in] ilsrc Base address for rules table in memory.
2636 */
2637 #define LDMA_DESCRIPTOR_EXTEND_DST_IL_CFG(desc, ilmode, ilsrc) \
2638 { \
2639 (desc).dstIlEn = true; \
2640 (desc).IlMode = (ilmode); \
2641 (desc).IlSrc = (uint32_t)(ilsrc); \
2642 }
2643 #endif
2644
2645 /*******************************************************************************
2646 ***************************** PROTOTYPES **********************************
2647 ******************************************************************************/
2648
2649 void LDMA_DeInit(void);
2650 void LDMA_EnableChannelRequest(int ch, bool enable);
2651 void LDMA_Init(const LDMA_Init_t *init);
2652 void LDMA_StartTransfer(int ch,
2653 const LDMA_TransferCfg_t *transfer,
2654 const LDMA_Descriptor_t *descriptor);
2655 #if defined(_LDMA_CH_CTRL_EXTEND_MASK)
2656 void LDMA_StartTransferExtend(int ch,
2657 const LDMA_TransferCfg_t *transfer,
2658 const LDMA_DescriptorExtend_t *descriptor_ext);
2659 #endif
2660 void LDMA_StopTransfer(int ch);
2661 bool LDMA_TransferDone(int ch);
2662 uint32_t LDMA_TransferRemainingCount(int ch);
2663
2664 #if defined(_LDMA_SWRST_MASK)
2665 /***************************************************************************//**
2666 * @brief
2667 * Reset the LDMA.
2668 ******************************************************************************/
LDMA_Reset(void)2669 __STATIC_INLINE void LDMA_Reset(void)
2670 {
2671 LDMA->SWRST_SET = LDMA_SWRST_SWRST;
2672
2673 /* Wait for reset to complete. */
2674 while (0UL != (LDMA->SWRST & _LDMA_SWRST_RESETTING_MASK)) {
2675 }
2676 }
2677 #endif
2678
2679 /***************************************************************************//**
2680 * @brief
2681 * Check if a certain channel is enabled.
2682 *
2683 * @param[in] ch
2684 * LDMA channel to check.
2685 *
2686 * @return
2687 * return true if the LDMA channel is enabled and false if the channel is not
2688 * enabled.
2689 ******************************************************************************/
LDMA_ChannelEnabled(int ch)2690 __STATIC_INLINE bool LDMA_ChannelEnabled(int ch)
2691 {
2692 if ((ch < 0) || (ch > 31)) {
2693 return false;
2694 }
2695 #if defined(_LDMA_CHSTATUS_MASK)
2696 return (0UL != (LDMA->CHSTATUS & (1UL << (uint8_t)ch)));
2697 #else
2698 // We've already confirmed ch is between 0 and 31,
2699 // so it's now safe to cast it to uint8_t
2700 return (0UL != (LDMA->CHEN & (1 << (uint8_t)ch)));
2701 #endif
2702 }
2703
2704 /***************************************************************************//**
2705 * @brief
2706 * Clear one or more pending LDMA interrupts.
2707 *
2708 * @param[in] flags
2709 * Pending LDMA interrupt sources to clear. Use one or more valid
2710 * interrupt flags for the LDMA module. The flags are LDMA_IFC_ERROR
2711 * and one done flag for each channel.
2712 ******************************************************************************/
LDMA_IntClear(uint32_t flags)2713 __STATIC_INLINE void LDMA_IntClear(uint32_t flags)
2714 {
2715 #if defined (LDMA_HAS_SET_CLEAR)
2716 LDMA->IF_CLR = flags;
2717 #else
2718 LDMA->IFC = flags;
2719 #endif
2720 }
2721
2722 /***************************************************************************//**
2723 * @brief
2724 * Disable one or more LDMA interrupts.
2725 *
2726 * @param[in] flags
2727 * LDMA interrupt sources to disable. Use one or more valid
2728 * interrupt flags for LDMA module. The flags are LDMA_IEN_ERROR
2729 * and one done flag for each channel.
2730 ******************************************************************************/
LDMA_IntDisable(uint32_t flags)2731 __STATIC_INLINE void LDMA_IntDisable(uint32_t flags)
2732 {
2733 LDMA->IEN &= ~flags;
2734 }
2735
2736 /***************************************************************************//**
2737 * @brief
2738 * Enable one or more LDMA interrupts.
2739 *
2740 * @note
2741 * Depending on the use, a pending interrupt may already be set prior to
2742 * enabling the interrupt. To ignore a pending interrupt, consider using
2743 * LDMA_IntClear() prior to enabling the interrupt.
2744 *
2745 * @param[in] flags
2746 * LDMA interrupt sources to enable. Use one or more valid
2747 * interrupt flags for LDMA module. The flags are LDMA_IEN_ERROR
2748 * and one done flag for each channel.
2749 ******************************************************************************/
LDMA_IntEnable(uint32_t flags)2750 __STATIC_INLINE void LDMA_IntEnable(uint32_t flags)
2751 {
2752 LDMA->IEN |= flags;
2753 }
2754
2755 /***************************************************************************//**
2756 * @brief
2757 * Get pending LDMA interrupt flags.
2758 *
2759 * @note
2760 * Event bits are not cleared by the use of this function.
2761 *
2762 * @return
2763 * LDMA interrupt sources pending. Returns one or more valid
2764 * interrupt flags for LDMA module. The flags are LDMA_IF_ERROR and
2765 * one flag for each LDMA channel.
2766 ******************************************************************************/
LDMA_IntGet(void)2767 __STATIC_INLINE uint32_t LDMA_IntGet(void)
2768 {
2769 return LDMA->IF;
2770 }
2771
2772 /***************************************************************************//**
2773 * @brief
2774 * Get enabled and pending LDMA interrupt flags.
2775 * Useful for handling more interrupt sources in the same interrupt handler.
2776 *
2777 * @note
2778 * Interrupt flags are not cleared by the use of this function.
2779 *
2780 * @return
2781 * Pending and enabled LDMA interrupt sources
2782 * Return value is the bitwise AND of
2783 * - the enabled interrupt sources in LDMA_IEN and
2784 * - the pending interrupt flags LDMA_IF
2785 ******************************************************************************/
LDMA_IntGetEnabled(void)2786 __STATIC_INLINE uint32_t LDMA_IntGetEnabled(void)
2787 {
2788 uint32_t ien;
2789
2790 ien = LDMA->IEN;
2791 return LDMA->IF & ien;
2792 }
2793
2794 /***************************************************************************//**
2795 * @brief
2796 * Set one or more pending LDMA interrupts
2797 *
2798 * @param[in] flags
2799 * LDMA interrupt sources to set to pending. Use one or more valid
2800 * interrupt flags for LDMA module. The flags are LDMA_IFS_ERROR and
2801 * one done flag for each LDMA channel.
2802 ******************************************************************************/
LDMA_IntSet(uint32_t flags)2803 __STATIC_INLINE void LDMA_IntSet(uint32_t flags)
2804 {
2805 #if defined (LDMA_HAS_SET_CLEAR)
2806 LDMA->IF_SET = flags;
2807 #else
2808 LDMA->IFS = flags;
2809 #endif
2810 }
2811
2812 /** @} (end addtogroup ldma) */
2813
2814 #ifdef __cplusplus
2815 }
2816 #endif
2817
2818 #endif /* defined( LDMA_PRESENT ) && ( LDMA_COUNT == 1 ) */
2819 #endif /* EM_LDMA_H */
2820