1 /*
2 * Copyright (c) 2015, Freescale Semiconductor, Inc.
3 * Copyright 2016-2017 NXP
4 * All rights reserved.
5 *
6 * SPDX-License-Identifier: BSD-3-Clause
7 */
8
9 #include "fsl_edma.h"
10
11 /*******************************************************************************
12 * Definitions
13 ******************************************************************************/
14
15 #define EDMA_TRANSFER_ENABLED_MASK 0x80U
16
17 /*******************************************************************************
18 * Prototypes
19 ******************************************************************************/
20
21 /*!
22 * @brief Get instance number for EDMA.
23 *
24 * @param base EDMA peripheral base address.
25 */
26 static uint32_t EDMA_GetInstance(DMA_Type *base);
27
28 /*******************************************************************************
29 * Variables
30 ******************************************************************************/
31
32 /*! @brief Array to map EDMA instance number to base pointer. */
33 static DMA_Type *const s_edmaBases[] = DMA_BASE_PTRS;
34
35 #if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL)
36 /*! @brief Array to map EDMA instance number to clock name. */
37 static const clock_ip_name_t s_edmaClockName[] = EDMA_CLOCKS;
38 #endif /* FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL */
39
40 /*! @brief Array to map EDMA instance number to IRQ number. */
41 static const IRQn_Type s_edmaIRQNumber[][FSL_FEATURE_EDMA_MODULE_CHANNEL] = DMA_CHN_IRQS;
42
43 /*! @brief Pointers to transfer handle for each EDMA channel. */
44 static edma_handle_t *s_EDMAHandle[FSL_FEATURE_EDMA_MODULE_CHANNEL * FSL_FEATURE_SOC_EDMA_COUNT];
45
46 /*******************************************************************************
47 * Code
48 ******************************************************************************/
49
EDMA_GetInstance(DMA_Type * base)50 static uint32_t EDMA_GetInstance(DMA_Type *base)
51 {
52 uint32_t instance;
53
54 /* Find the instance index from base address mappings. */
55 for (instance = 0; instance < ARRAY_SIZE(s_edmaBases); instance++)
56 {
57 if (s_edmaBases[instance] == base)
58 {
59 break;
60 }
61 }
62
63 assert(instance < ARRAY_SIZE(s_edmaBases));
64
65 return instance;
66 }
67
EDMA_InstallTCD(DMA_Type * base,uint32_t channel,edma_tcd_t * tcd)68 void EDMA_InstallTCD(DMA_Type *base, uint32_t channel, edma_tcd_t *tcd)
69 {
70 assert(channel < FSL_FEATURE_EDMA_MODULE_CHANNEL);
71 assert(tcd != NULL);
72 assert(((uint32_t)tcd & 0x1FU) == 0);
73
74 /* Push tcd into hardware TCD register */
75 base->TCD[channel].SADDR = tcd->SADDR;
76 base->TCD[channel].SOFF = tcd->SOFF;
77 base->TCD[channel].ATTR = tcd->ATTR;
78 base->TCD[channel].NBYTES_MLNO = tcd->NBYTES;
79 base->TCD[channel].SLAST = tcd->SLAST;
80 base->TCD[channel].DADDR = tcd->DADDR;
81 base->TCD[channel].DOFF = tcd->DOFF;
82 base->TCD[channel].CITER_ELINKNO = tcd->CITER;
83 base->TCD[channel].DLAST_SGA = tcd->DLAST_SGA;
84 /* Clear DONE bit first, otherwise ESG cannot be set */
85 base->TCD[channel].CSR = 0;
86 base->TCD[channel].CSR = tcd->CSR;
87 base->TCD[channel].BITER_ELINKNO = tcd->BITER;
88 }
89
EDMA_Init(DMA_Type * base,const edma_config_t * config)90 void EDMA_Init(DMA_Type *base, const edma_config_t *config)
91 {
92 assert(config != NULL);
93
94 uint32_t tmpreg;
95
96 #if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL)
97 /* Ungate EDMA periphral clock */
98 CLOCK_EnableClock(s_edmaClockName[EDMA_GetInstance(base)]);
99 #endif /* FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL */
100 /* Configure EDMA peripheral according to the configuration structure. */
101 tmpreg = base->CR;
102 tmpreg &= ~(DMA_CR_ERCA_MASK | DMA_CR_HOE_MASK | DMA_CR_CLM_MASK | DMA_CR_EDBG_MASK);
103 tmpreg |= (DMA_CR_ERCA(config->enableRoundRobinArbitration) | DMA_CR_HOE(config->enableHaltOnError) |
104 DMA_CR_CLM(config->enableContinuousLinkMode) | DMA_CR_EDBG(config->enableDebugMode) | DMA_CR_EMLM(true));
105 base->CR = tmpreg;
106 }
107
EDMA_Deinit(DMA_Type * base)108 void EDMA_Deinit(DMA_Type *base)
109 {
110 #if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL)
111 /* Gate EDMA periphral clock */
112 CLOCK_DisableClock(s_edmaClockName[EDMA_GetInstance(base)]);
113 #endif /* FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL */
114 }
115
EDMA_GetDefaultConfig(edma_config_t * config)116 void EDMA_GetDefaultConfig(edma_config_t *config)
117 {
118 assert(config != NULL);
119
120 config->enableRoundRobinArbitration = false;
121 config->enableHaltOnError = true;
122 config->enableContinuousLinkMode = false;
123 config->enableDebugMode = false;
124 }
125
EDMA_ResetChannel(DMA_Type * base,uint32_t channel)126 void EDMA_ResetChannel(DMA_Type *base, uint32_t channel)
127 {
128 assert(channel < FSL_FEATURE_EDMA_MODULE_CHANNEL);
129
130 EDMA_TcdReset((edma_tcd_t *)&base->TCD[channel]);
131 }
132
EDMA_SetTransferConfig(DMA_Type * base,uint32_t channel,const edma_transfer_config_t * config,edma_tcd_t * nextTcd)133 void EDMA_SetTransferConfig(DMA_Type *base, uint32_t channel, const edma_transfer_config_t *config, edma_tcd_t *nextTcd)
134 {
135 assert(channel < FSL_FEATURE_EDMA_MODULE_CHANNEL);
136 assert(config != NULL);
137 assert(((uint32_t)nextTcd & 0x1FU) == 0);
138
139 EDMA_TcdSetTransferConfig((edma_tcd_t *)&base->TCD[channel], config, nextTcd);
140 }
141
EDMA_SetMinorOffsetConfig(DMA_Type * base,uint32_t channel,const edma_minor_offset_config_t * config)142 void EDMA_SetMinorOffsetConfig(DMA_Type *base, uint32_t channel, const edma_minor_offset_config_t *config)
143 {
144 assert(channel < FSL_FEATURE_EDMA_MODULE_CHANNEL);
145 assert(config != NULL);
146
147 uint32_t tmpreg;
148
149 tmpreg = base->TCD[channel].NBYTES_MLOFFYES;
150 tmpreg &= ~(DMA_NBYTES_MLOFFYES_SMLOE_MASK | DMA_NBYTES_MLOFFYES_DMLOE_MASK | DMA_NBYTES_MLOFFYES_MLOFF_MASK);
151 tmpreg |=
152 (DMA_NBYTES_MLOFFYES_SMLOE(config->enableSrcMinorOffset) |
153 DMA_NBYTES_MLOFFYES_DMLOE(config->enableDestMinorOffset) | DMA_NBYTES_MLOFFYES_MLOFF(config->minorOffset));
154 base->TCD[channel].NBYTES_MLOFFYES = tmpreg;
155 }
156
EDMA_SetChannelLink(DMA_Type * base,uint32_t channel,edma_channel_link_type_t type,uint32_t linkedChannel)157 void EDMA_SetChannelLink(DMA_Type *base, uint32_t channel, edma_channel_link_type_t type, uint32_t linkedChannel)
158 {
159 assert(channel < FSL_FEATURE_EDMA_MODULE_CHANNEL);
160 assert(linkedChannel < FSL_FEATURE_EDMA_MODULE_CHANNEL);
161
162 EDMA_TcdSetChannelLink((edma_tcd_t *)&base->TCD[channel], type, linkedChannel);
163 }
164
EDMA_SetBandWidth(DMA_Type * base,uint32_t channel,edma_bandwidth_t bandWidth)165 void EDMA_SetBandWidth(DMA_Type *base, uint32_t channel, edma_bandwidth_t bandWidth)
166 {
167 assert(channel < FSL_FEATURE_EDMA_MODULE_CHANNEL);
168
169 base->TCD[channel].CSR = (base->TCD[channel].CSR & (~DMA_CSR_BWC_MASK)) | DMA_CSR_BWC(bandWidth);
170 }
171
EDMA_SetModulo(DMA_Type * base,uint32_t channel,edma_modulo_t srcModulo,edma_modulo_t destModulo)172 void EDMA_SetModulo(DMA_Type *base, uint32_t channel, edma_modulo_t srcModulo, edma_modulo_t destModulo)
173 {
174 assert(channel < FSL_FEATURE_EDMA_MODULE_CHANNEL);
175
176 uint32_t tmpreg;
177
178 tmpreg = base->TCD[channel].ATTR & (~(DMA_ATTR_SMOD_MASK | DMA_ATTR_DMOD_MASK));
179 base->TCD[channel].ATTR = tmpreg | DMA_ATTR_DMOD(destModulo) | DMA_ATTR_SMOD(srcModulo);
180 }
181
EDMA_EnableChannelInterrupts(DMA_Type * base,uint32_t channel,uint32_t mask)182 void EDMA_EnableChannelInterrupts(DMA_Type *base, uint32_t channel, uint32_t mask)
183 {
184 assert(channel < FSL_FEATURE_EDMA_MODULE_CHANNEL);
185
186 /* Enable error interrupt */
187 if (mask & kEDMA_ErrorInterruptEnable)
188 {
189 base->EEI |= (0x1U << channel);
190 }
191
192 /* Enable Major interrupt */
193 if (mask & kEDMA_MajorInterruptEnable)
194 {
195 base->TCD[channel].CSR |= DMA_CSR_INTMAJOR_MASK;
196 }
197
198 /* Enable Half major interrupt */
199 if (mask & kEDMA_HalfInterruptEnable)
200 {
201 base->TCD[channel].CSR |= DMA_CSR_INTHALF_MASK;
202 }
203 }
204
EDMA_DisableChannelInterrupts(DMA_Type * base,uint32_t channel,uint32_t mask)205 void EDMA_DisableChannelInterrupts(DMA_Type *base, uint32_t channel, uint32_t mask)
206 {
207 assert(channel < FSL_FEATURE_EDMA_MODULE_CHANNEL);
208
209 /* Disable error interrupt */
210 if (mask & kEDMA_ErrorInterruptEnable)
211 {
212 base->EEI &= ~(0x1U << channel);
213 }
214
215 /* Disable Major interrupt */
216 if (mask & kEDMA_MajorInterruptEnable)
217 {
218 base->TCD[channel].CSR &= ~DMA_CSR_INTMAJOR_MASK;
219 }
220
221 /* Disable Half major interrupt */
222 if (mask & kEDMA_HalfInterruptEnable)
223 {
224 base->TCD[channel].CSR &= ~DMA_CSR_INTHALF_MASK;
225 }
226 }
227
EDMA_TcdReset(edma_tcd_t * tcd)228 void EDMA_TcdReset(edma_tcd_t *tcd)
229 {
230 assert(tcd != NULL);
231 assert(((uint32_t)tcd & 0x1FU) == 0);
232
233 /* Reset channel TCD */
234 tcd->SADDR = 0U;
235 tcd->SOFF = 0U;
236 tcd->ATTR = 0U;
237 tcd->NBYTES = 0U;
238 tcd->SLAST = 0U;
239 tcd->DADDR = 0U;
240 tcd->DOFF = 0U;
241 tcd->CITER = 0U;
242 tcd->DLAST_SGA = 0U;
243 /* Enable auto disable request feature */
244 tcd->CSR = DMA_CSR_DREQ(true);
245 tcd->BITER = 0U;
246 }
247
EDMA_TcdSetTransferConfig(edma_tcd_t * tcd,const edma_transfer_config_t * config,edma_tcd_t * nextTcd)248 void EDMA_TcdSetTransferConfig(edma_tcd_t *tcd, const edma_transfer_config_t *config, edma_tcd_t *nextTcd)
249 {
250 assert(tcd != NULL);
251 assert(((uint32_t)tcd & 0x1FU) == 0);
252 assert(config != NULL);
253 assert(((uint32_t)nextTcd & 0x1FU) == 0);
254
255 /* source address */
256 tcd->SADDR = config->srcAddr;
257 /* destination address */
258 tcd->DADDR = config->destAddr;
259 /* Source data and destination data transfer size */
260 tcd->ATTR = DMA_ATTR_SSIZE(config->srcTransferSize) | DMA_ATTR_DSIZE(config->destTransferSize);
261 /* Source address signed offset */
262 tcd->SOFF = config->srcOffset;
263 /* Destination address signed offset */
264 tcd->DOFF = config->destOffset;
265 /* Minor byte transfer count */
266 tcd->NBYTES = config->minorLoopBytes;
267 /* Current major iteration count */
268 tcd->CITER = config->majorLoopCounts;
269 /* Starting major iteration count */
270 tcd->BITER = config->majorLoopCounts;
271 /* Enable scatter/gather processing */
272 if (nextTcd != NULL)
273 {
274 tcd->DLAST_SGA = (uint32_t)nextTcd;
275 /*
276 Before call EDMA_TcdSetTransferConfig or EDMA_SetTransferConfig,
277 user must call EDMA_TcdReset or EDMA_ResetChannel which will set
278 DREQ, so must use "|" or "&" rather than "=".
279
280 Clear the DREQ bit because scatter gather has been enabled, so the
281 previous transfer is not the last transfer, and channel request should
282 be enabled at the next transfer(the next TCD).
283 */
284 tcd->CSR = (tcd->CSR | DMA_CSR_ESG_MASK) & ~DMA_CSR_DREQ_MASK;
285 }
286 }
287
EDMA_TcdSetMinorOffsetConfig(edma_tcd_t * tcd,const edma_minor_offset_config_t * config)288 void EDMA_TcdSetMinorOffsetConfig(edma_tcd_t *tcd, const edma_minor_offset_config_t *config)
289 {
290 assert(tcd != NULL);
291 assert(((uint32_t)tcd & 0x1FU) == 0);
292
293 uint32_t tmpreg;
294
295 tmpreg = tcd->NBYTES &
296 ~(DMA_NBYTES_MLOFFYES_SMLOE_MASK | DMA_NBYTES_MLOFFYES_DMLOE_MASK | DMA_NBYTES_MLOFFYES_MLOFF_MASK);
297 tmpreg |=
298 (DMA_NBYTES_MLOFFYES_SMLOE(config->enableSrcMinorOffset) |
299 DMA_NBYTES_MLOFFYES_DMLOE(config->enableDestMinorOffset) | DMA_NBYTES_MLOFFYES_MLOFF(config->minorOffset));
300 tcd->NBYTES = tmpreg;
301 }
302
EDMA_TcdSetChannelLink(edma_tcd_t * tcd,edma_channel_link_type_t type,uint32_t linkedChannel)303 void EDMA_TcdSetChannelLink(edma_tcd_t *tcd, edma_channel_link_type_t type, uint32_t linkedChannel)
304 {
305 assert(tcd != NULL);
306 assert(((uint32_t)tcd & 0x1FU) == 0);
307 assert(linkedChannel < FSL_FEATURE_EDMA_MODULE_CHANNEL);
308
309 if (type == kEDMA_MinorLink) /* Minor link config */
310 {
311 uint32_t tmpreg;
312
313 /* Enable minor link */
314 tcd->CITER |= DMA_CITER_ELINKYES_ELINK_MASK;
315 tcd->BITER |= DMA_BITER_ELINKYES_ELINK_MASK;
316 /* Set likned channel */
317 tmpreg = tcd->CITER & (~DMA_CITER_ELINKYES_LINKCH_MASK);
318 tmpreg |= DMA_CITER_ELINKYES_LINKCH(linkedChannel);
319 tcd->CITER = tmpreg;
320 tmpreg = tcd->BITER & (~DMA_BITER_ELINKYES_LINKCH_MASK);
321 tmpreg |= DMA_BITER_ELINKYES_LINKCH(linkedChannel);
322 tcd->BITER = tmpreg;
323 }
324 else if (type == kEDMA_MajorLink) /* Major link config */
325 {
326 uint32_t tmpreg;
327
328 /* Enable major link */
329 tcd->CSR |= DMA_CSR_MAJORELINK_MASK;
330 /* Set major linked channel */
331 tmpreg = tcd->CSR & (~DMA_CSR_MAJORLINKCH_MASK);
332 tcd->CSR = tmpreg | DMA_CSR_MAJORLINKCH(linkedChannel);
333 }
334 else /* Link none */
335 {
336 tcd->CITER &= ~DMA_CITER_ELINKYES_ELINK_MASK;
337 tcd->BITER &= ~DMA_BITER_ELINKYES_ELINK_MASK;
338 tcd->CSR &= ~DMA_CSR_MAJORELINK_MASK;
339 }
340 }
341
EDMA_TcdSetModulo(edma_tcd_t * tcd,edma_modulo_t srcModulo,edma_modulo_t destModulo)342 void EDMA_TcdSetModulo(edma_tcd_t *tcd, edma_modulo_t srcModulo, edma_modulo_t destModulo)
343 {
344 assert(tcd != NULL);
345 assert(((uint32_t)tcd & 0x1FU) == 0);
346
347 uint32_t tmpreg;
348
349 tmpreg = tcd->ATTR & (~(DMA_ATTR_SMOD_MASK | DMA_ATTR_DMOD_MASK));
350 tcd->ATTR = tmpreg | DMA_ATTR_DMOD(destModulo) | DMA_ATTR_SMOD(srcModulo);
351 }
352
EDMA_TcdEnableInterrupts(edma_tcd_t * tcd,uint32_t mask)353 void EDMA_TcdEnableInterrupts(edma_tcd_t *tcd, uint32_t mask)
354 {
355 assert(tcd != NULL);
356
357 /* Enable Major interrupt */
358 if (mask & kEDMA_MajorInterruptEnable)
359 {
360 tcd->CSR |= DMA_CSR_INTMAJOR_MASK;
361 }
362
363 /* Enable Half major interrupt */
364 if (mask & kEDMA_HalfInterruptEnable)
365 {
366 tcd->CSR |= DMA_CSR_INTHALF_MASK;
367 }
368 }
369
EDMA_TcdDisableInterrupts(edma_tcd_t * tcd,uint32_t mask)370 void EDMA_TcdDisableInterrupts(edma_tcd_t *tcd, uint32_t mask)
371 {
372 assert(tcd != NULL);
373
374 /* Disable Major interrupt */
375 if (mask & kEDMA_MajorInterruptEnable)
376 {
377 tcd->CSR &= ~DMA_CSR_INTMAJOR_MASK;
378 }
379
380 /* Disable Half major interrupt */
381 if (mask & kEDMA_HalfInterruptEnable)
382 {
383 tcd->CSR &= ~DMA_CSR_INTHALF_MASK;
384 }
385 }
386
EDMA_GetRemainingMajorLoopCount(DMA_Type * base,uint32_t channel)387 uint32_t EDMA_GetRemainingMajorLoopCount(DMA_Type *base, uint32_t channel)
388 {
389 assert(channel < FSL_FEATURE_EDMA_MODULE_CHANNEL);
390
391 uint32_t remainingCount = 0;
392
393 if (DMA_CSR_DONE_MASK & base->TCD[channel].CSR)
394 {
395 remainingCount = 0;
396 }
397 else
398 {
399 /* Calculate the unfinished bytes */
400 if (base->TCD[channel].CITER_ELINKNO & DMA_CITER_ELINKNO_ELINK_MASK)
401 {
402 remainingCount =
403 (base->TCD[channel].CITER_ELINKYES & DMA_CITER_ELINKYES_CITER_MASK) >> DMA_CITER_ELINKYES_CITER_SHIFT;
404 }
405 else
406 {
407 remainingCount =
408 (base->TCD[channel].CITER_ELINKNO & DMA_CITER_ELINKNO_CITER_MASK) >> DMA_CITER_ELINKNO_CITER_SHIFT;
409 }
410 }
411
412 return remainingCount;
413 }
414
EDMA_GetChannelStatusFlags(DMA_Type * base,uint32_t channel)415 uint32_t EDMA_GetChannelStatusFlags(DMA_Type *base, uint32_t channel)
416 {
417 assert(channel < FSL_FEATURE_EDMA_MODULE_CHANNEL);
418
419 uint32_t retval = 0;
420
421 /* Get DONE bit flag */
422 retval |= ((base->TCD[channel].CSR & DMA_CSR_DONE_MASK) >> DMA_CSR_DONE_SHIFT);
423 /* Get ERROR bit flag */
424 retval |= (((base->ERR >> channel) & 0x1U) << 1U);
425 /* Get INT bit flag */
426 retval |= (((base->INT >> channel) & 0x1U) << 2U);
427
428 return retval;
429 }
430
EDMA_ClearChannelStatusFlags(DMA_Type * base,uint32_t channel,uint32_t mask)431 void EDMA_ClearChannelStatusFlags(DMA_Type *base, uint32_t channel, uint32_t mask)
432 {
433 assert(channel < FSL_FEATURE_EDMA_MODULE_CHANNEL);
434
435 /* Clear DONE bit flag */
436 if (mask & kEDMA_DoneFlag)
437 {
438 base->CDNE = channel;
439 }
440 /* Clear ERROR bit flag */
441 if (mask & kEDMA_ErrorFlag)
442 {
443 base->CERR = channel;
444 }
445 /* Clear INT bit flag */
446 if (mask & kEDMA_InterruptFlag)
447 {
448 base->CINT = channel;
449 }
450 }
451
Get_StartInstance(void)452 static uint8_t Get_StartInstance(void)
453 {
454 static uint8_t StartInstanceNum;
455
456 #if defined(DMA0)
457 StartInstanceNum = EDMA_GetInstance(DMA0);
458 #elif defined(DMA1)
459 StartInstanceNum = EDMA_GetInstance(DMA1);
460 #elif defined(DMA2)
461 StartInstanceNum = EDMA_GetInstance(DMA2);
462 #elif defined(DMA3)
463 StartInstanceNum = EDMA_GetInstance(DMA3);
464 #endif
465
466 return StartInstanceNum;
467 }
468
EDMA_CreateHandle(edma_handle_t * handle,DMA_Type * base,uint32_t channel)469 void EDMA_CreateHandle(edma_handle_t *handle, DMA_Type *base, uint32_t channel)
470 {
471 assert(handle != NULL);
472 assert(channel < FSL_FEATURE_EDMA_MODULE_CHANNEL);
473
474 uint32_t edmaInstance;
475 uint32_t channelIndex;
476 uint8_t StartInstance;
477 edma_tcd_t *tcdRegs;
478
479 /* Zero the handle */
480 memset(handle, 0, sizeof(*handle));
481
482 handle->base = base;
483 handle->channel = channel;
484 /* Get the DMA instance number */
485 edmaInstance = EDMA_GetInstance(base);
486 StartInstance = Get_StartInstance();
487 channelIndex = ((edmaInstance - StartInstance) * FSL_FEATURE_EDMA_MODULE_CHANNEL) + channel;
488 s_EDMAHandle[channelIndex] = handle;
489
490 /* Enable NVIC interrupt */
491 EnableIRQ(s_edmaIRQNumber[edmaInstance][channel]);
492
493 /*
494 Reset TCD registers to zero. Unlike the EDMA_TcdReset(DREQ will be set),
495 CSR will be 0. Because in order to suit EDMA busy check mechanism in
496 EDMA_SubmitTransfer, CSR must be set 0.
497 */
498 tcdRegs = (edma_tcd_t *)&handle->base->TCD[handle->channel];
499 tcdRegs->SADDR = 0;
500 tcdRegs->SOFF = 0;
501 tcdRegs->ATTR = 0;
502 tcdRegs->NBYTES = 0;
503 tcdRegs->SLAST = 0;
504 tcdRegs->DADDR = 0;
505 tcdRegs->DOFF = 0;
506 tcdRegs->CITER = 0;
507 tcdRegs->DLAST_SGA = 0;
508 tcdRegs->CSR = 0;
509 tcdRegs->BITER = 0;
510 }
511
EDMA_InstallTCDMemory(edma_handle_t * handle,edma_tcd_t * tcdPool,uint32_t tcdSize)512 void EDMA_InstallTCDMemory(edma_handle_t *handle, edma_tcd_t *tcdPool, uint32_t tcdSize)
513 {
514 assert(handle != NULL);
515 assert(((uint32_t)tcdPool & 0x1FU) == 0);
516
517 /* Initialize tcd queue attibute. */
518 handle->header = 0;
519 handle->tail = 0;
520 handle->tcdUsed = 0;
521 handle->tcdSize = tcdSize;
522 handle->flags = 0;
523 handle->tcdPool = tcdPool;
524 }
525
EDMA_SetCallback(edma_handle_t * handle,edma_callback callback,void * userData)526 void EDMA_SetCallback(edma_handle_t *handle, edma_callback callback, void *userData)
527 {
528 assert(handle != NULL);
529
530 handle->callback = callback;
531 handle->userData = userData;
532 }
533
EDMA_PrepareTransfer(edma_transfer_config_t * config,void * srcAddr,uint32_t srcWidth,void * destAddr,uint32_t destWidth,uint32_t bytesEachRequest,uint32_t transferBytes,edma_transfer_type_t type)534 void EDMA_PrepareTransfer(edma_transfer_config_t *config,
535 void *srcAddr,
536 uint32_t srcWidth,
537 void *destAddr,
538 uint32_t destWidth,
539 uint32_t bytesEachRequest,
540 uint32_t transferBytes,
541 edma_transfer_type_t type)
542 {
543 assert(config != NULL);
544 assert(srcAddr != NULL);
545 assert(destAddr != NULL);
546 assert((srcWidth == 1U) || (srcWidth == 2U) || (srcWidth == 4U) || (srcWidth == 16U) || (srcWidth == 32U));
547 assert((destWidth == 1U) || (destWidth == 2U) || (destWidth == 4U) || (destWidth == 16U) || (destWidth == 32U));
548 assert(transferBytes % bytesEachRequest == 0);
549
550 config->destAddr = (uint32_t)destAddr;
551 config->srcAddr = (uint32_t)srcAddr;
552 config->minorLoopBytes = bytesEachRequest;
553 config->majorLoopCounts = transferBytes / bytesEachRequest;
554 switch (srcWidth)
555 {
556 case 1U:
557 config->srcTransferSize = kEDMA_TransferSize1Bytes;
558 break;
559 case 2U:
560 config->srcTransferSize = kEDMA_TransferSize2Bytes;
561 break;
562 case 4U:
563 config->srcTransferSize = kEDMA_TransferSize4Bytes;
564 break;
565 case 16U:
566 config->srcTransferSize = kEDMA_TransferSize16Bytes;
567 break;
568 case 32U:
569 config->srcTransferSize = kEDMA_TransferSize32Bytes;
570 break;
571 default:
572 break;
573 }
574 switch (destWidth)
575 {
576 case 1U:
577 config->destTransferSize = kEDMA_TransferSize1Bytes;
578 break;
579 case 2U:
580 config->destTransferSize = kEDMA_TransferSize2Bytes;
581 break;
582 case 4U:
583 config->destTransferSize = kEDMA_TransferSize4Bytes;
584 break;
585 case 16U:
586 config->destTransferSize = kEDMA_TransferSize16Bytes;
587 break;
588 case 32U:
589 config->destTransferSize = kEDMA_TransferSize32Bytes;
590 break;
591 default:
592 break;
593 }
594 switch (type)
595 {
596 case kEDMA_MemoryToMemory:
597 config->destOffset = destWidth;
598 config->srcOffset = srcWidth;
599 break;
600 case kEDMA_MemoryToPeripheral:
601 config->destOffset = 0U;
602 config->srcOffset = srcWidth;
603 break;
604 case kEDMA_PeripheralToMemory:
605 config->destOffset = destWidth;
606 config->srcOffset = 0U;
607 break;
608 default:
609 break;
610 }
611 }
612
EDMA_SubmitTransfer(edma_handle_t * handle,const edma_transfer_config_t * config)613 status_t EDMA_SubmitTransfer(edma_handle_t *handle, const edma_transfer_config_t *config)
614 {
615 assert(handle != NULL);
616 assert(config != NULL);
617
618 edma_tcd_t *tcdRegs = (edma_tcd_t *)&handle->base->TCD[handle->channel];
619
620 if (handle->tcdPool == NULL)
621 {
622 /*
623 Check if EDMA is busy: if the given channel started transfer, CSR will be not zero. Because
624 if it is the last transfer, DREQ will be set. If not, ESG will be set. So in order to suit
625 this check mechanism, EDMA_CreatHandle will clear CSR register.
626 */
627 if ((tcdRegs->CSR != 0) && ((tcdRegs->CSR & DMA_CSR_DONE_MASK) == 0))
628 {
629 return kStatus_EDMA_Busy;
630 }
631 else
632 {
633 EDMA_SetTransferConfig(handle->base, handle->channel, config, NULL);
634 /* Enable auto disable request feature */
635 handle->base->TCD[handle->channel].CSR |= DMA_CSR_DREQ_MASK;
636 /* Enable major interrupt */
637 handle->base->TCD[handle->channel].CSR |= DMA_CSR_INTMAJOR_MASK;
638
639 return kStatus_Success;
640 }
641 }
642 else /* Use the TCD queue. */
643 {
644 uint32_t primask;
645 uint32_t csr;
646 int8_t currentTcd;
647 int8_t previousTcd;
648 int8_t nextTcd;
649
650 /* Check if tcd pool is full. */
651 primask = DisableGlobalIRQ();
652 if (handle->tcdUsed >= handle->tcdSize)
653 {
654 EnableGlobalIRQ(primask);
655
656 return kStatus_EDMA_QueueFull;
657 }
658 currentTcd = handle->tail;
659 handle->tcdUsed++;
660 /* Calculate index of next TCD */
661 nextTcd = currentTcd + 1U;
662 if (nextTcd == handle->tcdSize)
663 {
664 nextTcd = 0U;
665 }
666 /* Advance queue tail index */
667 handle->tail = nextTcd;
668 EnableGlobalIRQ(primask);
669 /* Calculate index of previous TCD */
670 previousTcd = currentTcd ? currentTcd - 1U : handle->tcdSize - 1U;
671 /* Configure current TCD block. */
672 EDMA_TcdReset(&handle->tcdPool[currentTcd]);
673 EDMA_TcdSetTransferConfig(&handle->tcdPool[currentTcd], config, NULL);
674 /* Enable major interrupt */
675 handle->tcdPool[currentTcd].CSR |= DMA_CSR_INTMAJOR_MASK;
676 /* Link current TCD with next TCD for identification of current TCD */
677 handle->tcdPool[currentTcd].DLAST_SGA = (uint32_t)&handle->tcdPool[nextTcd];
678 /* Chain from previous descriptor unless tcd pool size is 1(this descriptor is its own predecessor). */
679 if (currentTcd != previousTcd)
680 {
681 /* Enable scatter/gather feature in the previous TCD block. */
682 csr = (handle->tcdPool[previousTcd].CSR | DMA_CSR_ESG_MASK) & ~DMA_CSR_DREQ_MASK;
683 handle->tcdPool[previousTcd].CSR = csr;
684 /*
685 Check if the TCD blcok in the registers is the previous one (points to current TCD block). It
686 is used to check if the previous TCD linked has been loaded in TCD register. If so, it need to
687 link the TCD register in case link the current TCD with the dead chain when TCD loading occurs
688 before link the previous TCD block.
689 */
690 if (tcdRegs->DLAST_SGA == (uint32_t)&handle->tcdPool[currentTcd])
691 {
692 /* Enable scatter/gather also in the TCD registers. */
693 csr = (tcdRegs->CSR | DMA_CSR_ESG_MASK) & ~DMA_CSR_DREQ_MASK;
694 /* Must write the CSR register one-time, because the transfer maybe finished anytime. */
695 tcdRegs->CSR = csr;
696 /*
697 It is very important to check the ESG bit!
698 Because this hardware design: if DONE bit is set, the ESG bit can not be set. So it can
699 be used to check if the dynamic TCD link operation is successful. If ESG bit is not set
700 and the DLAST_SGA is not the next TCD address(it means the dynamic TCD link succeed and
701 the current TCD block has been loaded into TCD registers), it means transfer finished
702 and TCD link operation fail, so must install TCD content into TCD registers and enable
703 transfer again. And if ESG is set, it means transfer has notfinished, so TCD dynamic
704 link succeed.
705 */
706 if (tcdRegs->CSR & DMA_CSR_ESG_MASK)
707 {
708 return kStatus_Success;
709 }
710 /*
711 Check whether the current TCD block is already loaded in the TCD registers. It is another
712 condition when ESG bit is not set: it means the dynamic TCD link succeed and the current
713 TCD block has been loaded into TCD registers.
714 */
715 if (tcdRegs->DLAST_SGA == (uint32_t)&handle->tcdPool[nextTcd])
716 {
717 return kStatus_Success;
718 }
719 /*
720 If go to this, means the previous transfer finished, and the DONE bit is set.
721 So shall configure TCD registers.
722 */
723 }
724 else if (tcdRegs->DLAST_SGA != 0)
725 {
726 /* The current TCD block has been linked successfully. */
727 return kStatus_Success;
728 }
729 else
730 {
731 /*
732 DLAST_SGA is 0 and it means the first submit transfer, so shall configure
733 TCD registers.
734 */
735 }
736 }
737 /* There is no live chain, TCD block need to be installed in TCD registers. */
738 EDMA_InstallTCD(handle->base, handle->channel, &handle->tcdPool[currentTcd]);
739 /* Enable channel request again. */
740 if (handle->flags & EDMA_TRANSFER_ENABLED_MASK)
741 {
742 handle->base->SERQ = DMA_SERQ_SERQ(handle->channel);
743 }
744
745 return kStatus_Success;
746 }
747 }
748
EDMA_StartTransfer(edma_handle_t * handle)749 void EDMA_StartTransfer(edma_handle_t *handle)
750 {
751 assert(handle != NULL);
752
753 if (handle->tcdPool == NULL)
754 {
755 handle->base->SERQ = DMA_SERQ_SERQ(handle->channel);
756 }
757 else /* Use the TCD queue. */
758 {
759 uint32_t primask;
760 edma_tcd_t *tcdRegs = (edma_tcd_t *)&handle->base->TCD[handle->channel];
761
762 handle->flags |= EDMA_TRANSFER_ENABLED_MASK;
763
764 /* Check if there was at least one descriptor submitted since reset (TCD in registers is valid) */
765 if (tcdRegs->DLAST_SGA != 0U)
766 {
767 primask = DisableGlobalIRQ();
768 /* Check if channel request is actually disable. */
769 if ((handle->base->ERQ & (1U << handle->channel)) == 0U)
770 {
771 /* Check if transfer is paused. */
772 if ((!(tcdRegs->CSR & DMA_CSR_DONE_MASK)) || (tcdRegs->CSR & DMA_CSR_ESG_MASK))
773 {
774 /*
775 Re-enable channel request must be as soon as possible, so must put it into
776 critical section to avoid task switching or interrupt service routine.
777 */
778 handle->base->SERQ = DMA_SERQ_SERQ(handle->channel);
779 }
780 }
781 EnableGlobalIRQ(primask);
782 }
783 }
784 }
785
EDMA_StopTransfer(edma_handle_t * handle)786 void EDMA_StopTransfer(edma_handle_t *handle)
787 {
788 assert(handle != NULL);
789
790 handle->flags &= (~EDMA_TRANSFER_ENABLED_MASK);
791 handle->base->CERQ = DMA_CERQ_CERQ(handle->channel);
792 }
793
EDMA_AbortTransfer(edma_handle_t * handle)794 void EDMA_AbortTransfer(edma_handle_t *handle)
795 {
796 handle->base->CERQ = DMA_CERQ_CERQ(handle->channel);
797 /*
798 Clear CSR to release channel. Because if the given channel started transfer,
799 CSR will be not zero. Because if it is the last transfer, DREQ will be set.
800 If not, ESG will be set.
801 */
802 handle->base->TCD[handle->channel].CSR = 0;
803 /* Cancel all next TCD transfer. */
804 handle->base->TCD[handle->channel].DLAST_SGA = 0;
805
806 /* Handle the tcd */
807 if (handle->tcdPool != NULL)
808 {
809 handle->header = 0;
810 handle->tail = 0;
811 handle->tcdUsed = 0;
812 }
813 }
814
EDMA_HandleIRQ(edma_handle_t * handle)815 void EDMA_HandleIRQ(edma_handle_t *handle)
816 {
817 assert(handle != NULL);
818
819 /* Clear EDMA interrupt flag */
820 handle->base->CINT = handle->channel;
821 if ((handle->tcdPool == NULL) && (handle->callback != NULL))
822 {
823 (handle->callback)(handle, handle->userData, true, 0);
824 }
825 else /* Use the TCD queue. Please refer to the API descriptions in the eDMA header file for detailed information. */
826 {
827 uint32_t sga = handle->base->TCD[handle->channel].DLAST_SGA;
828 uint32_t sga_index;
829 int32_t tcds_done;
830 uint8_t new_header;
831 bool transfer_done;
832
833 /* Check if transfer is already finished. */
834 transfer_done = ((handle->base->TCD[handle->channel].CSR & DMA_CSR_DONE_MASK) != 0);
835 /* Get the offset of the next transfer TCD blcoks to be loaded into the eDMA engine. */
836 sga -= (uint32_t)handle->tcdPool;
837 /* Get the index of the next transfer TCD blcoks to be loaded into the eDMA engine. */
838 sga_index = sga / sizeof(edma_tcd_t);
839 /* Adjust header positions. */
840 if (transfer_done)
841 {
842 /* New header shall point to the next TCD to be loaded (current one is already finished) */
843 new_header = sga_index;
844 }
845 else
846 {
847 /* New header shall point to this descriptor currently loaded (not finished yet) */
848 new_header = sga_index ? sga_index - 1U : handle->tcdSize - 1U;
849 }
850 /* Calculate the number of finished TCDs */
851 if (new_header == handle->header)
852 {
853 if (handle->tcdUsed == handle->tcdSize)
854 {
855 tcds_done = handle->tcdUsed;
856 }
857 else
858 {
859 /* No TCD in the memory are going to be loaded or internal error occurs. */
860 tcds_done = 0;
861 }
862 }
863 else
864 {
865 tcds_done = new_header - handle->header;
866 if (tcds_done < 0)
867 {
868 tcds_done += handle->tcdSize;
869 }
870 }
871 /* Advance header which points to the TCD to be loaded into the eDMA engine from memory. */
872 handle->header = new_header;
873 /* Release TCD blocks. tcdUsed is the TCD number which can be used/loaded in the memory pool. */
874 handle->tcdUsed -= tcds_done;
875 /* Invoke callback function. */
876 if (handle->callback)
877 {
878 (handle->callback)(handle, handle->userData, transfer_done, tcds_done);
879 }
880 }
881 }
882
883 /* 8 channels (Shared): kl28 */
884 #if defined(FSL_FEATURE_EDMA_MODULE_CHANNEL) && FSL_FEATURE_EDMA_MODULE_CHANNEL == 8U
885
886 #if defined(DMA0)
DMA0_04_DriverIRQHandler(void)887 void DMA0_04_DriverIRQHandler(void)
888 {
889 if ((EDMA_GetChannelStatusFlags(DMA0, 0U) & kEDMA_InterruptFlag) != 0U)
890 {
891 EDMA_HandleIRQ(s_EDMAHandle[0]);
892 }
893 if ((EDMA_GetChannelStatusFlags(DMA0, 4U) & kEDMA_InterruptFlag) != 0U)
894 {
895 EDMA_HandleIRQ(s_EDMAHandle[4]);
896 }
897 }
898
DMA0_15_DriverIRQHandler(void)899 void DMA0_15_DriverIRQHandler(void)
900 {
901 if ((EDMA_GetChannelStatusFlags(DMA0, 1U) & kEDMA_InterruptFlag) != 0U)
902 {
903 EDMA_HandleIRQ(s_EDMAHandle[1]);
904 }
905 if ((EDMA_GetChannelStatusFlags(DMA0, 5U) & kEDMA_InterruptFlag) != 0U)
906 {
907 EDMA_HandleIRQ(s_EDMAHandle[5]);
908 }
909 }
910
DMA0_26_DriverIRQHandler(void)911 void DMA0_26_DriverIRQHandler(void)
912 {
913 if ((EDMA_GetChannelStatusFlags(DMA0, 2U) & kEDMA_InterruptFlag) != 0U)
914 {
915 EDMA_HandleIRQ(s_EDMAHandle[2]);
916 }
917 if ((EDMA_GetChannelStatusFlags(DMA0, 6U) & kEDMA_InterruptFlag) != 0U)
918 {
919 EDMA_HandleIRQ(s_EDMAHandle[6]);
920 }
921 }
922
DMA0_37_DriverIRQHandler(void)923 void DMA0_37_DriverIRQHandler(void)
924 {
925 if ((EDMA_GetChannelStatusFlags(DMA0, 3U) & kEDMA_InterruptFlag) != 0U)
926 {
927 EDMA_HandleIRQ(s_EDMAHandle[3]);
928 }
929 if ((EDMA_GetChannelStatusFlags(DMA0, 7U) & kEDMA_InterruptFlag) != 0U)
930 {
931 EDMA_HandleIRQ(s_EDMAHandle[7]);
932 }
933 }
934 #endif
935
936 #if defined(DMA1)
937
938 #if defined(DMA0)
DMA1_04_DriverIRQHandler(void)939 void DMA1_04_DriverIRQHandler(void)
940 {
941 if ((EDMA_GetChannelStatusFlags(DMA1, 0U) & kEDMA_InterruptFlag) != 0U)
942 {
943 EDMA_HandleIRQ(s_EDMAHandle[8]);
944 }
945 if ((EDMA_GetChannelStatusFlags(DMA1, 4U) & kEDMA_InterruptFlag) != 0U)
946 {
947 EDMA_HandleIRQ(s_EDMAHandle[12]);
948 }
949 }
950
DMA1_15_DriverIRQHandler(void)951 void DMA1_15_DriverIRQHandler(void)
952 {
953 if ((EDMA_GetChannelStatusFlags(DMA1, 1U) & kEDMA_InterruptFlag) != 0U)
954 {
955 EDMA_HandleIRQ(s_EDMAHandle[9]);
956 }
957 if ((EDMA_GetChannelStatusFlags(DMA1, 5U) & kEDMA_InterruptFlag) != 0U)
958 {
959 EDMA_HandleIRQ(s_EDMAHandle[13]);
960 }
961 }
962
DMA1_26_DriverIRQHandler(void)963 void DMA1_26_DriverIRQHandler(void)
964 {
965 if ((EDMA_GetChannelStatusFlags(DMA1, 2U) & kEDMA_InterruptFlag) != 0U)
966 {
967 EDMA_HandleIRQ(s_EDMAHandle[10]);
968 }
969 if ((EDMA_GetChannelStatusFlags(DMA1, 6U) & kEDMA_InterruptFlag) != 0U)
970 {
971 EDMA_HandleIRQ(s_EDMAHandle[14]);
972 }
973 }
974
DMA1_37_DriverIRQHandler(void)975 void DMA1_37_DriverIRQHandler(void)
976 {
977 if ((EDMA_GetChannelStatusFlags(DMA1, 3U) & kEDMA_InterruptFlag) != 0U)
978 {
979 EDMA_HandleIRQ(s_EDMAHandle[11]);
980 }
981 if ((EDMA_GetChannelStatusFlags(DMA1, 7U) & kEDMA_InterruptFlag) != 0U)
982 {
983 EDMA_HandleIRQ(s_EDMAHandle[15]);
984 }
985 }
986
987 #else
DMA1_04_DriverIRQHandler(void)988 void DMA1_04_DriverIRQHandler(void)
989 {
990 if ((EDMA_GetChannelStatusFlags(DMA1, 0U) & kEDMA_InterruptFlag) != 0U)
991 {
992 EDMA_HandleIRQ(s_EDMAHandle[0]);
993 }
994 if ((EDMA_GetChannelStatusFlags(DMA1, 4U) & kEDMA_InterruptFlag) != 0U)
995 {
996 EDMA_HandleIRQ(s_EDMAHandle[4]);
997 }
998 }
999
DMA1_15_DriverIRQHandler(void)1000 void DMA1_15_DriverIRQHandler(void)
1001 {
1002 if ((EDMA_GetChannelStatusFlags(DMA1, 1U) & kEDMA_InterruptFlag) != 0U)
1003 {
1004 EDMA_HandleIRQ(s_EDMAHandle[1]);
1005 }
1006 if ((EDMA_GetChannelStatusFlags(DMA1, 5U) & kEDMA_InterruptFlag) != 0U)
1007 {
1008 EDMA_HandleIRQ(s_EDMAHandle[5]);
1009 }
1010 }
1011
DMA1_26_DriverIRQHandler(void)1012 void DMA1_26_DriverIRQHandler(void)
1013 {
1014 if ((EDMA_GetChannelStatusFlags(DMA1, 2U) & kEDMA_InterruptFlag) != 0U)
1015 {
1016 EDMA_HandleIRQ(s_EDMAHandle[2]);
1017 }
1018 if ((EDMA_GetChannelStatusFlags(DMA1, 6U) & kEDMA_InterruptFlag) != 0U)
1019 {
1020 EDMA_HandleIRQ(s_EDMAHandle[6]);
1021 }
1022 }
1023
DMA1_37_DriverIRQHandler(void)1024 void DMA1_37_DriverIRQHandler(void)
1025 {
1026 if ((EDMA_GetChannelStatusFlags(DMA1, 3U) & kEDMA_InterruptFlag) != 0U)
1027 {
1028 EDMA_HandleIRQ(s_EDMAHandle[3]);
1029 }
1030 if ((EDMA_GetChannelStatusFlags(DMA1, 7U) & kEDMA_InterruptFlag) != 0U)
1031 {
1032 EDMA_HandleIRQ(s_EDMAHandle[7]);
1033 }
1034 }
1035 #endif
1036 #endif
1037 #endif /* 8 channels (Shared) */
1038
1039 /* 16 channels (Shared): K32H844P */
1040 #if defined(FSL_FEATURE_EDMA_MODULE_CHANNEL) && FSL_FEATURE_EDMA_MODULE_CHANNEL == 16U
1041
DMA0_08_DriverIRQHandler(void)1042 void DMA0_08_DriverIRQHandler(void)
1043 {
1044 if ((EDMA_GetChannelStatusFlags(DMA0, 0U) & kEDMA_InterruptFlag) != 0U)
1045 {
1046 EDMA_HandleIRQ(s_EDMAHandle[0]);
1047 }
1048 if ((EDMA_GetChannelStatusFlags(DMA0, 8U) & kEDMA_InterruptFlag) != 0U)
1049 {
1050 EDMA_HandleIRQ(s_EDMAHandle[8]);
1051 }
1052 }
1053
DMA0_19_DriverIRQHandler(void)1054 void DMA0_19_DriverIRQHandler(void)
1055 {
1056 if ((EDMA_GetChannelStatusFlags(DMA0, 1U) & kEDMA_InterruptFlag) != 0U)
1057 {
1058 EDMA_HandleIRQ(s_EDMAHandle[1]);
1059 }
1060 if ((EDMA_GetChannelStatusFlags(DMA0, 9U) & kEDMA_InterruptFlag) != 0U)
1061 {
1062 EDMA_HandleIRQ(s_EDMAHandle[9]);
1063 }
1064 }
1065
DMA0_210_DriverIRQHandler(void)1066 void DMA0_210_DriverIRQHandler(void)
1067 {
1068 if ((EDMA_GetChannelStatusFlags(DMA0, 2U) & kEDMA_InterruptFlag) != 0U)
1069 {
1070 EDMA_HandleIRQ(s_EDMAHandle[2]);
1071 }
1072 if ((EDMA_GetChannelStatusFlags(DMA0, 10U) & kEDMA_InterruptFlag) != 0U)
1073 {
1074 EDMA_HandleIRQ(s_EDMAHandle[10]);
1075 }
1076 }
1077
DMA0_311_DriverIRQHandler(void)1078 void DMA0_311_DriverIRQHandler(void)
1079 {
1080 if ((EDMA_GetChannelStatusFlags(DMA0, 3U) & kEDMA_InterruptFlag) != 0U)
1081 {
1082 EDMA_HandleIRQ(s_EDMAHandle[3]);
1083 }
1084 if ((EDMA_GetChannelStatusFlags(DMA0, 11U) & kEDMA_InterruptFlag) != 0U)
1085 {
1086 EDMA_HandleIRQ(s_EDMAHandle[11]);
1087 }
1088 }
1089
DMA0_412_DriverIRQHandler(void)1090 void DMA0_412_DriverIRQHandler(void)
1091 {
1092 if ((EDMA_GetChannelStatusFlags(DMA0, 4U) & kEDMA_InterruptFlag) != 0U)
1093 {
1094 EDMA_HandleIRQ(s_EDMAHandle[4]);
1095 }
1096 if ((EDMA_GetChannelStatusFlags(DMA0, 12U) & kEDMA_InterruptFlag) != 0U)
1097 {
1098 EDMA_HandleIRQ(s_EDMAHandle[12]);
1099 }
1100 }
1101
DMA0_513_DriverIRQHandler(void)1102 void DMA0_513_DriverIRQHandler(void)
1103 {
1104 if ((EDMA_GetChannelStatusFlags(DMA0, 5U) & kEDMA_InterruptFlag) != 0U)
1105 {
1106 EDMA_HandleIRQ(s_EDMAHandle[5]);
1107 }
1108 if ((EDMA_GetChannelStatusFlags(DMA0, 13U) & kEDMA_InterruptFlag) != 0U)
1109 {
1110 EDMA_HandleIRQ(s_EDMAHandle[13]);
1111 }
1112 }
1113
DMA0_614_DriverIRQHandler(void)1114 void DMA0_614_DriverIRQHandler(void)
1115 {
1116 if ((EDMA_GetChannelStatusFlags(DMA0, 6U) & kEDMA_InterruptFlag) != 0U)
1117 {
1118 EDMA_HandleIRQ(s_EDMAHandle[6]);
1119 }
1120 if ((EDMA_GetChannelStatusFlags(DMA0, 14U) & kEDMA_InterruptFlag) != 0U)
1121 {
1122 EDMA_HandleIRQ(s_EDMAHandle[14]);
1123 }
1124 }
1125
DMA0_715_DriverIRQHandler(void)1126 void DMA0_715_DriverIRQHandler(void)
1127 {
1128 if ((EDMA_GetChannelStatusFlags(DMA0, 7U) & kEDMA_InterruptFlag) != 0U)
1129 {
1130 EDMA_HandleIRQ(s_EDMAHandle[7]);
1131 }
1132 if ((EDMA_GetChannelStatusFlags(DMA0, 15U) & kEDMA_InterruptFlag) != 0U)
1133 {
1134 EDMA_HandleIRQ(s_EDMAHandle[15]);
1135 }
1136 }
1137
1138 #if defined(DMA1)
DMA1_08_DriverIRQHandler(void)1139 void DMA1_08_DriverIRQHandler(void)
1140 {
1141 if ((EDMA_GetChannelStatusFlags(DMA1, 0U) & kEDMA_InterruptFlag) != 0U)
1142 {
1143 EDMA_HandleIRQ(s_EDMAHandle[16]);
1144 }
1145 if ((EDMA_GetChannelStatusFlags(DMA1, 8U) & kEDMA_InterruptFlag) != 0U)
1146 {
1147 EDMA_HandleIRQ(s_EDMAHandle[24]);
1148 }
1149 }
1150
DMA1_19_DriverIRQHandler(void)1151 void DMA1_19_DriverIRQHandler(void)
1152 {
1153 if ((EDMA_GetChannelStatusFlags(DMA1, 1U) & kEDMA_InterruptFlag) != 0U)
1154 {
1155 EDMA_HandleIRQ(s_EDMAHandle[17]);
1156 }
1157 if ((EDMA_GetChannelStatusFlags(DMA1, 9U) & kEDMA_InterruptFlag) != 0U)
1158 {
1159 EDMA_HandleIRQ(s_EDMAHandle[25]);
1160 }
1161 }
1162
DMA1_210_DriverIRQHandler(void)1163 void DMA1_210_DriverIRQHandler(void)
1164 {
1165 if ((EDMA_GetChannelStatusFlags(DMA1, 2U) & kEDMA_InterruptFlag) != 0U)
1166 {
1167 EDMA_HandleIRQ(s_EDMAHandle[18]);
1168 }
1169 if ((EDMA_GetChannelStatusFlags(DMA1, 10U) & kEDMA_InterruptFlag) != 0U)
1170 {
1171 EDMA_HandleIRQ(s_EDMAHandle[26]);
1172 }
1173 }
1174
DMA1_311_DriverIRQHandler(void)1175 void DMA1_311_DriverIRQHandler(void)
1176 {
1177 if ((EDMA_GetChannelStatusFlags(DMA1, 3U) & kEDMA_InterruptFlag) != 0U)
1178 {
1179 EDMA_HandleIRQ(s_EDMAHandle[19]);
1180 }
1181 if ((EDMA_GetChannelStatusFlags(DMA1, 11U) & kEDMA_InterruptFlag) != 0U)
1182 {
1183 EDMA_HandleIRQ(s_EDMAHandle[27]);
1184 }
1185 }
1186
DMA1_412_DriverIRQHandler(void)1187 void DMA1_412_DriverIRQHandler(void)
1188 {
1189 if ((EDMA_GetChannelStatusFlags(DMA1, 4U) & kEDMA_InterruptFlag) != 0U)
1190 {
1191 EDMA_HandleIRQ(s_EDMAHandle[20]);
1192 }
1193 if ((EDMA_GetChannelStatusFlags(DMA1, 12U) & kEDMA_InterruptFlag) != 0U)
1194 {
1195 EDMA_HandleIRQ(s_EDMAHandle[28]);
1196 }
1197 }
1198
DMA1_513_DriverIRQHandler(void)1199 void DMA1_513_DriverIRQHandler(void)
1200 {
1201 if ((EDMA_GetChannelStatusFlags(DMA1, 5U) & kEDMA_InterruptFlag) != 0U)
1202 {
1203 EDMA_HandleIRQ(s_EDMAHandle[21]);
1204 }
1205 if ((EDMA_GetChannelStatusFlags(DMA1, 13U) & kEDMA_InterruptFlag) != 0U)
1206 {
1207 EDMA_HandleIRQ(s_EDMAHandle[29]);
1208 }
1209 }
1210
DMA1_614_DriverIRQHandler(void)1211 void DMA1_614_DriverIRQHandler(void)
1212 {
1213 if ((EDMA_GetChannelStatusFlags(DMA1, 6U) & kEDMA_InterruptFlag) != 0U)
1214 {
1215 EDMA_HandleIRQ(s_EDMAHandle[22]);
1216 }
1217 if ((EDMA_GetChannelStatusFlags(DMA1, 14U) & kEDMA_InterruptFlag) != 0U)
1218 {
1219 EDMA_HandleIRQ(s_EDMAHandle[30]);
1220 }
1221 }
1222
DMA1_715_DriverIRQHandler(void)1223 void DMA1_715_DriverIRQHandler(void)
1224 {
1225 if ((EDMA_GetChannelStatusFlags(DMA1, 7U) & kEDMA_InterruptFlag) != 0U)
1226 {
1227 EDMA_HandleIRQ(s_EDMAHandle[23]);
1228 }
1229 if ((EDMA_GetChannelStatusFlags(DMA1, 15U) & kEDMA_InterruptFlag) != 0U)
1230 {
1231 EDMA_HandleIRQ(s_EDMAHandle[31]);
1232 }
1233 }
1234 #endif
1235 #endif /* 16 channels (Shared) */
1236
1237 /* 32 channels (Shared): k80 */
1238 #if defined(FSL_FEATURE_EDMA_MODULE_CHANNEL) && FSL_FEATURE_EDMA_MODULE_CHANNEL == 32U
1239
DMA0_DMA16_DriverIRQHandler(void)1240 void DMA0_DMA16_DriverIRQHandler(void)
1241 {
1242 if ((EDMA_GetChannelStatusFlags(DMA0, 0U) & kEDMA_InterruptFlag) != 0U)
1243 {
1244 EDMA_HandleIRQ(s_EDMAHandle[0]);
1245 }
1246 if ((EDMA_GetChannelStatusFlags(DMA0, 16U) & kEDMA_InterruptFlag) != 0U)
1247 {
1248 EDMA_HandleIRQ(s_EDMAHandle[16]);
1249 }
1250 }
1251
DMA1_DMA17_DriverIRQHandler(void)1252 void DMA1_DMA17_DriverIRQHandler(void)
1253 {
1254 if ((EDMA_GetChannelStatusFlags(DMA0, 1U) & kEDMA_InterruptFlag) != 0U)
1255 {
1256 EDMA_HandleIRQ(s_EDMAHandle[1]);
1257 }
1258 if ((EDMA_GetChannelStatusFlags(DMA0, 17U) & kEDMA_InterruptFlag) != 0U)
1259 {
1260 EDMA_HandleIRQ(s_EDMAHandle[17]);
1261 }
1262 }
1263
DMA2_DMA18_DriverIRQHandler(void)1264 void DMA2_DMA18_DriverIRQHandler(void)
1265 {
1266 if ((EDMA_GetChannelStatusFlags(DMA0, 2U) & kEDMA_InterruptFlag) != 0U)
1267 {
1268 EDMA_HandleIRQ(s_EDMAHandle[2]);
1269 }
1270 if ((EDMA_GetChannelStatusFlags(DMA0, 18U) & kEDMA_InterruptFlag) != 0U)
1271 {
1272 EDMA_HandleIRQ(s_EDMAHandle[18]);
1273 }
1274 }
1275
DMA3_DMA19_DriverIRQHandler(void)1276 void DMA3_DMA19_DriverIRQHandler(void)
1277 {
1278 if ((EDMA_GetChannelStatusFlags(DMA0, 3U) & kEDMA_InterruptFlag) != 0U)
1279 {
1280 EDMA_HandleIRQ(s_EDMAHandle[3]);
1281 }
1282 if ((EDMA_GetChannelStatusFlags(DMA0, 19U) & kEDMA_InterruptFlag) != 0U)
1283 {
1284 EDMA_HandleIRQ(s_EDMAHandle[19]);
1285 }
1286 }
1287
DMA4_DMA20_DriverIRQHandler(void)1288 void DMA4_DMA20_DriverIRQHandler(void)
1289 {
1290 if ((EDMA_GetChannelStatusFlags(DMA0, 4U) & kEDMA_InterruptFlag) != 0U)
1291 {
1292 EDMA_HandleIRQ(s_EDMAHandle[4]);
1293 }
1294 if ((EDMA_GetChannelStatusFlags(DMA0, 20U) & kEDMA_InterruptFlag) != 0U)
1295 {
1296 EDMA_HandleIRQ(s_EDMAHandle[20]);
1297 }
1298 }
1299
DMA5_DMA21_DriverIRQHandler(void)1300 void DMA5_DMA21_DriverIRQHandler(void)
1301 {
1302 if ((EDMA_GetChannelStatusFlags(DMA0, 5U) & kEDMA_InterruptFlag) != 0U)
1303 {
1304 EDMA_HandleIRQ(s_EDMAHandle[5]);
1305 }
1306 if ((EDMA_GetChannelStatusFlags(DMA0, 21U) & kEDMA_InterruptFlag) != 0U)
1307 {
1308 EDMA_HandleIRQ(s_EDMAHandle[21]);
1309 }
1310 }
1311
DMA6_DMA22_DriverIRQHandler(void)1312 void DMA6_DMA22_DriverIRQHandler(void)
1313 {
1314 if ((EDMA_GetChannelStatusFlags(DMA0, 6U) & kEDMA_InterruptFlag) != 0U)
1315 {
1316 EDMA_HandleIRQ(s_EDMAHandle[6]);
1317 }
1318 if ((EDMA_GetChannelStatusFlags(DMA0, 22U) & kEDMA_InterruptFlag) != 0U)
1319 {
1320 EDMA_HandleIRQ(s_EDMAHandle[22]);
1321 }
1322 }
1323
DMA7_DMA23_DriverIRQHandler(void)1324 void DMA7_DMA23_DriverIRQHandler(void)
1325 {
1326 if ((EDMA_GetChannelStatusFlags(DMA0, 7U) & kEDMA_InterruptFlag) != 0U)
1327 {
1328 EDMA_HandleIRQ(s_EDMAHandle[7]);
1329 }
1330 if ((EDMA_GetChannelStatusFlags(DMA0, 23U) & kEDMA_InterruptFlag) != 0U)
1331 {
1332 EDMA_HandleIRQ(s_EDMAHandle[23]);
1333 }
1334 }
1335
DMA8_DMA24_DriverIRQHandler(void)1336 void DMA8_DMA24_DriverIRQHandler(void)
1337 {
1338 if ((EDMA_GetChannelStatusFlags(DMA0, 8U) & kEDMA_InterruptFlag) != 0U)
1339 {
1340 EDMA_HandleIRQ(s_EDMAHandle[8]);
1341 }
1342 if ((EDMA_GetChannelStatusFlags(DMA0, 24U) & kEDMA_InterruptFlag) != 0U)
1343 {
1344 EDMA_HandleIRQ(s_EDMAHandle[24]);
1345 }
1346 }
1347
DMA9_DMA25_DriverIRQHandler(void)1348 void DMA9_DMA25_DriverIRQHandler(void)
1349 {
1350 if ((EDMA_GetChannelStatusFlags(DMA0, 9U) & kEDMA_InterruptFlag) != 0U)
1351 {
1352 EDMA_HandleIRQ(s_EDMAHandle[9]);
1353 }
1354 if ((EDMA_GetChannelStatusFlags(DMA0, 25U) & kEDMA_InterruptFlag) != 0U)
1355 {
1356 EDMA_HandleIRQ(s_EDMAHandle[25]);
1357 }
1358 }
1359
DMA10_DMA26_DriverIRQHandler(void)1360 void DMA10_DMA26_DriverIRQHandler(void)
1361 {
1362 if ((EDMA_GetChannelStatusFlags(DMA0, 10U) & kEDMA_InterruptFlag) != 0U)
1363 {
1364 EDMA_HandleIRQ(s_EDMAHandle[10]);
1365 }
1366 if ((EDMA_GetChannelStatusFlags(DMA0, 26U) & kEDMA_InterruptFlag) != 0U)
1367 {
1368 EDMA_HandleIRQ(s_EDMAHandle[26]);
1369 }
1370 }
1371
DMA11_DMA27_DriverIRQHandler(void)1372 void DMA11_DMA27_DriverIRQHandler(void)
1373 {
1374 if ((EDMA_GetChannelStatusFlags(DMA0, 11U) & kEDMA_InterruptFlag) != 0U)
1375 {
1376 EDMA_HandleIRQ(s_EDMAHandle[11]);
1377 }
1378 if ((EDMA_GetChannelStatusFlags(DMA0, 27U) & kEDMA_InterruptFlag) != 0U)
1379 {
1380 EDMA_HandleIRQ(s_EDMAHandle[27]);
1381 }
1382 }
1383
DMA12_DMA28_DriverIRQHandler(void)1384 void DMA12_DMA28_DriverIRQHandler(void)
1385 {
1386 if ((EDMA_GetChannelStatusFlags(DMA0, 12U) & kEDMA_InterruptFlag) != 0U)
1387 {
1388 EDMA_HandleIRQ(s_EDMAHandle[12]);
1389 }
1390 if ((EDMA_GetChannelStatusFlags(DMA0, 28U) & kEDMA_InterruptFlag) != 0U)
1391 {
1392 EDMA_HandleIRQ(s_EDMAHandle[28]);
1393 }
1394 }
1395
DMA13_DMA29_DriverIRQHandler(void)1396 void DMA13_DMA29_DriverIRQHandler(void)
1397 {
1398 if ((EDMA_GetChannelStatusFlags(DMA0, 13U) & kEDMA_InterruptFlag) != 0U)
1399 {
1400 EDMA_HandleIRQ(s_EDMAHandle[13]);
1401 }
1402 if ((EDMA_GetChannelStatusFlags(DMA0, 29U) & kEDMA_InterruptFlag) != 0U)
1403 {
1404 EDMA_HandleIRQ(s_EDMAHandle[29]);
1405 }
1406 }
1407
DMA14_DMA30_DriverIRQHandler(void)1408 void DMA14_DMA30_DriverIRQHandler(void)
1409 {
1410 if ((EDMA_GetChannelStatusFlags(DMA0, 14U) & kEDMA_InterruptFlag) != 0U)
1411 {
1412 EDMA_HandleIRQ(s_EDMAHandle[14]);
1413 }
1414 if ((EDMA_GetChannelStatusFlags(DMA0, 30U) & kEDMA_InterruptFlag) != 0U)
1415 {
1416 EDMA_HandleIRQ(s_EDMAHandle[30]);
1417 }
1418 }
1419
DMA15_DMA31_DriverIRQHandler(void)1420 void DMA15_DMA31_DriverIRQHandler(void)
1421 {
1422 if ((EDMA_GetChannelStatusFlags(DMA0, 15U) & kEDMA_InterruptFlag) != 0U)
1423 {
1424 EDMA_HandleIRQ(s_EDMAHandle[15]);
1425 }
1426 if ((EDMA_GetChannelStatusFlags(DMA0, 31U) & kEDMA_InterruptFlag) != 0U)
1427 {
1428 EDMA_HandleIRQ(s_EDMAHandle[31]);
1429 }
1430 }
1431 #endif /* 32 channels (Shared) */
1432
1433 /* 32 channels (Shared): MCIMX7U5_M4 */
1434 #if defined(FSL_FEATURE_EDMA_MODULE_CHANNEL) && FSL_FEATURE_EDMA_MODULE_CHANNEL == 32U
1435
DMA0_0_4_DriverIRQHandler(void)1436 void DMA0_0_4_DriverIRQHandler(void)
1437 {
1438 if ((EDMA_GetChannelStatusFlags(DMA0, 0U) & kEDMA_InterruptFlag) != 0U)
1439 {
1440 EDMA_HandleIRQ(s_EDMAHandle[0]);
1441 }
1442 if ((EDMA_GetChannelStatusFlags(DMA0, 4U) & kEDMA_InterruptFlag) != 0U)
1443 {
1444 EDMA_HandleIRQ(s_EDMAHandle[4]);
1445 }
1446 }
1447
DMA0_1_5_DriverIRQHandler(void)1448 void DMA0_1_5_DriverIRQHandler(void)
1449 {
1450 if ((EDMA_GetChannelStatusFlags(DMA0, 1U) & kEDMA_InterruptFlag) != 0U)
1451 {
1452 EDMA_HandleIRQ(s_EDMAHandle[1]);
1453 }
1454 if ((EDMA_GetChannelStatusFlags(DMA0, 5U) & kEDMA_InterruptFlag) != 0U)
1455 {
1456 EDMA_HandleIRQ(s_EDMAHandle[5]);
1457 }
1458 }
1459
DMA0_2_6_DriverIRQHandler(void)1460 void DMA0_2_6_DriverIRQHandler(void)
1461 {
1462 if ((EDMA_GetChannelStatusFlags(DMA0, 2U) & kEDMA_InterruptFlag) != 0U)
1463 {
1464 EDMA_HandleIRQ(s_EDMAHandle[2]);
1465 }
1466 if ((EDMA_GetChannelStatusFlags(DMA0, 6U) & kEDMA_InterruptFlag) != 0U)
1467 {
1468 EDMA_HandleIRQ(s_EDMAHandle[6]);
1469 }
1470 }
1471
DMA0_3_7_DriverIRQHandler(void)1472 void DMA0_3_7_DriverIRQHandler(void)
1473 {
1474 if ((EDMA_GetChannelStatusFlags(DMA0, 3U) & kEDMA_InterruptFlag) != 0U)
1475 {
1476 EDMA_HandleIRQ(s_EDMAHandle[3]);
1477 }
1478 if ((EDMA_GetChannelStatusFlags(DMA0, 7U) & kEDMA_InterruptFlag) != 0U)
1479 {
1480 EDMA_HandleIRQ(s_EDMAHandle[7]);
1481 }
1482 }
1483
DMA0_8_12_DriverIRQHandler(void)1484 void DMA0_8_12_DriverIRQHandler(void)
1485 {
1486 if ((EDMA_GetChannelStatusFlags(DMA0, 8U) & kEDMA_InterruptFlag) != 0U)
1487 {
1488 EDMA_HandleIRQ(s_EDMAHandle[8]);
1489 }
1490 if ((EDMA_GetChannelStatusFlags(DMA0, 12U) & kEDMA_InterruptFlag) != 0U)
1491 {
1492 EDMA_HandleIRQ(s_EDMAHandle[12]);
1493 }
1494 }
1495
DMA0_9_13_DriverIRQHandler(void)1496 void DMA0_9_13_DriverIRQHandler(void)
1497 {
1498 if ((EDMA_GetChannelStatusFlags(DMA0, 9U) & kEDMA_InterruptFlag) != 0U)
1499 {
1500 EDMA_HandleIRQ(s_EDMAHandle[9]);
1501 }
1502 if ((EDMA_GetChannelStatusFlags(DMA0, 13U) & kEDMA_InterruptFlag) != 0U)
1503 {
1504 EDMA_HandleIRQ(s_EDMAHandle[13]);
1505 }
1506 }
1507
DMA0_10_14_DriverIRQHandler(void)1508 void DMA0_10_14_DriverIRQHandler(void)
1509 {
1510 if ((EDMA_GetChannelStatusFlags(DMA0, 10U) & kEDMA_InterruptFlag) != 0U)
1511 {
1512 EDMA_HandleIRQ(s_EDMAHandle[10]);
1513 }
1514 if ((EDMA_GetChannelStatusFlags(DMA0, 14U) & kEDMA_InterruptFlag) != 0U)
1515 {
1516 EDMA_HandleIRQ(s_EDMAHandle[14]);
1517 }
1518 }
1519
DMA0_11_15_DriverIRQHandler(void)1520 void DMA0_11_15_DriverIRQHandler(void)
1521 {
1522 if ((EDMA_GetChannelStatusFlags(DMA0, 11U) & kEDMA_InterruptFlag) != 0U)
1523 {
1524 EDMA_HandleIRQ(s_EDMAHandle[11]);
1525 }
1526 if ((EDMA_GetChannelStatusFlags(DMA0, 15U) & kEDMA_InterruptFlag) != 0U)
1527 {
1528 EDMA_HandleIRQ(s_EDMAHandle[15]);
1529 }
1530 }
1531
DMA0_16_20_DriverIRQHandler(void)1532 void DMA0_16_20_DriverIRQHandler(void)
1533 {
1534 if ((EDMA_GetChannelStatusFlags(DMA0, 16U) & kEDMA_InterruptFlag) != 0U)
1535 {
1536 EDMA_HandleIRQ(s_EDMAHandle[16]);
1537 }
1538 if ((EDMA_GetChannelStatusFlags(DMA0, 20U) & kEDMA_InterruptFlag) != 0U)
1539 {
1540 EDMA_HandleIRQ(s_EDMAHandle[20]);
1541 }
1542 }
1543
DMA0_17_21_DriverIRQHandler(void)1544 void DMA0_17_21_DriverIRQHandler(void)
1545 {
1546 if ((EDMA_GetChannelStatusFlags(DMA0, 17U) & kEDMA_InterruptFlag) != 0U)
1547 {
1548 EDMA_HandleIRQ(s_EDMAHandle[17]);
1549 }
1550 if ((EDMA_GetChannelStatusFlags(DMA0, 21U) & kEDMA_InterruptFlag) != 0U)
1551 {
1552 EDMA_HandleIRQ(s_EDMAHandle[21]);
1553 }
1554 }
1555
DMA0_18_22_DriverIRQHandler(void)1556 void DMA0_18_22_DriverIRQHandler(void)
1557 {
1558 if ((EDMA_GetChannelStatusFlags(DMA0, 18U) & kEDMA_InterruptFlag) != 0U)
1559 {
1560 EDMA_HandleIRQ(s_EDMAHandle[18]);
1561 }
1562 if ((EDMA_GetChannelStatusFlags(DMA0, 22U) & kEDMA_InterruptFlag) != 0U)
1563 {
1564 EDMA_HandleIRQ(s_EDMAHandle[22]);
1565 }
1566 }
1567
DMA0_19_23_DriverIRQHandler(void)1568 void DMA0_19_23_DriverIRQHandler(void)
1569 {
1570 if ((EDMA_GetChannelStatusFlags(DMA0, 19U) & kEDMA_InterruptFlag) != 0U)
1571 {
1572 EDMA_HandleIRQ(s_EDMAHandle[19]);
1573 }
1574 if ((EDMA_GetChannelStatusFlags(DMA0, 23U) & kEDMA_InterruptFlag) != 0U)
1575 {
1576 EDMA_HandleIRQ(s_EDMAHandle[23]);
1577 }
1578 }
1579
DMA0_24_28_DriverIRQHandler(void)1580 void DMA0_24_28_DriverIRQHandler(void)
1581 {
1582 if ((EDMA_GetChannelStatusFlags(DMA0, 24U) & kEDMA_InterruptFlag) != 0U)
1583 {
1584 EDMA_HandleIRQ(s_EDMAHandle[24]);
1585 }
1586 if ((EDMA_GetChannelStatusFlags(DMA0, 28U) & kEDMA_InterruptFlag) != 0U)
1587 {
1588 EDMA_HandleIRQ(s_EDMAHandle[28]);
1589 }
1590 }
1591
DMA0_25_29_DriverIRQHandler(void)1592 void DMA0_25_29_DriverIRQHandler(void)
1593 {
1594 if ((EDMA_GetChannelStatusFlags(DMA0, 25U) & kEDMA_InterruptFlag) != 0U)
1595 {
1596 EDMA_HandleIRQ(s_EDMAHandle[25]);
1597 }
1598 if ((EDMA_GetChannelStatusFlags(DMA0, 29U) & kEDMA_InterruptFlag) != 0U)
1599 {
1600 EDMA_HandleIRQ(s_EDMAHandle[29]);
1601 }
1602 }
1603
DMA0_26_30_DriverIRQHandler(void)1604 void DMA0_26_30_DriverIRQHandler(void)
1605 {
1606 if ((EDMA_GetChannelStatusFlags(DMA0, 26U) & kEDMA_InterruptFlag) != 0U)
1607 {
1608 EDMA_HandleIRQ(s_EDMAHandle[26]);
1609 }
1610 if ((EDMA_GetChannelStatusFlags(DMA0, 30U) & kEDMA_InterruptFlag) != 0U)
1611 {
1612 EDMA_HandleIRQ(s_EDMAHandle[30]);
1613 }
1614 }
1615
DMA0_27_31_DriverIRQHandler(void)1616 void DMA0_27_31_DriverIRQHandler(void)
1617 {
1618 if ((EDMA_GetChannelStatusFlags(DMA0, 27U) & kEDMA_InterruptFlag) != 0U)
1619 {
1620 EDMA_HandleIRQ(s_EDMAHandle[27]);
1621 }
1622 if ((EDMA_GetChannelStatusFlags(DMA0, 31U) & kEDMA_InterruptFlag) != 0U)
1623 {
1624 EDMA_HandleIRQ(s_EDMAHandle[31]);
1625 }
1626 }
1627 #endif /* 32 channels (Shared): MCIMX7U5 */
1628
1629 /* 4 channels (No Shared): kv10 */
1630 #if defined(FSL_FEATURE_EDMA_MODULE_CHANNEL) && FSL_FEATURE_EDMA_MODULE_CHANNEL > 0
1631
DMA0_DriverIRQHandler(void)1632 void DMA0_DriverIRQHandler(void)
1633 {
1634 EDMA_HandleIRQ(s_EDMAHandle[0]);
1635 }
1636
DMA1_DriverIRQHandler(void)1637 void DMA1_DriverIRQHandler(void)
1638 {
1639 EDMA_HandleIRQ(s_EDMAHandle[1]);
1640 }
1641
DMA2_DriverIRQHandler(void)1642 void DMA2_DriverIRQHandler(void)
1643 {
1644 EDMA_HandleIRQ(s_EDMAHandle[2]);
1645 }
1646
DMA3_DriverIRQHandler(void)1647 void DMA3_DriverIRQHandler(void)
1648 {
1649 EDMA_HandleIRQ(s_EDMAHandle[3]);
1650 }
1651
1652 /* 8 channels (No Shared) */
1653 #if defined(FSL_FEATURE_EDMA_MODULE_CHANNEL) && FSL_FEATURE_EDMA_MODULE_CHANNEL > 4U
1654
DMA4_DriverIRQHandler(void)1655 void DMA4_DriverIRQHandler(void)
1656 {
1657 EDMA_HandleIRQ(s_EDMAHandle[4]);
1658 }
1659
DMA5_DriverIRQHandler(void)1660 void DMA5_DriverIRQHandler(void)
1661 {
1662 EDMA_HandleIRQ(s_EDMAHandle[5]);
1663 }
1664
DMA6_DriverIRQHandler(void)1665 void DMA6_DriverIRQHandler(void)
1666 {
1667 EDMA_HandleIRQ(s_EDMAHandle[6]);
1668 }
1669
DMA7_DriverIRQHandler(void)1670 void DMA7_DriverIRQHandler(void)
1671 {
1672 EDMA_HandleIRQ(s_EDMAHandle[7]);
1673 }
1674 #endif /* FSL_FEATURE_EDMA_MODULE_CHANNEL == 8 */
1675
1676 /* 16 channels (No Shared) */
1677 #if defined(FSL_FEATURE_EDMA_MODULE_CHANNEL) && FSL_FEATURE_EDMA_MODULE_CHANNEL > 8U
1678
DMA8_DriverIRQHandler(void)1679 void DMA8_DriverIRQHandler(void)
1680 {
1681 EDMA_HandleIRQ(s_EDMAHandle[8]);
1682 }
1683
DMA9_DriverIRQHandler(void)1684 void DMA9_DriverIRQHandler(void)
1685 {
1686 EDMA_HandleIRQ(s_EDMAHandle[9]);
1687 }
1688
DMA10_DriverIRQHandler(void)1689 void DMA10_DriverIRQHandler(void)
1690 {
1691 EDMA_HandleIRQ(s_EDMAHandle[10]);
1692 }
1693
DMA11_DriverIRQHandler(void)1694 void DMA11_DriverIRQHandler(void)
1695 {
1696 EDMA_HandleIRQ(s_EDMAHandle[11]);
1697 }
1698
DMA12_DriverIRQHandler(void)1699 void DMA12_DriverIRQHandler(void)
1700 {
1701 EDMA_HandleIRQ(s_EDMAHandle[12]);
1702 }
1703
DMA13_DriverIRQHandler(void)1704 void DMA13_DriverIRQHandler(void)
1705 {
1706 EDMA_HandleIRQ(s_EDMAHandle[13]);
1707 }
1708
DMA14_DriverIRQHandler(void)1709 void DMA14_DriverIRQHandler(void)
1710 {
1711 EDMA_HandleIRQ(s_EDMAHandle[14]);
1712 }
1713
DMA15_DriverIRQHandler(void)1714 void DMA15_DriverIRQHandler(void)
1715 {
1716 EDMA_HandleIRQ(s_EDMAHandle[15]);
1717 }
1718 #endif /* FSL_FEATURE_EDMA_MODULE_CHANNEL == 16 */
1719
1720 /* 32 channels (No Shared) */
1721 #if defined(FSL_FEATURE_EDMA_MODULE_CHANNEL) && FSL_FEATURE_EDMA_MODULE_CHANNEL > 16U
1722
DMA16_DriverIRQHandler(void)1723 void DMA16_DriverIRQHandler(void)
1724 {
1725 EDMA_HandleIRQ(s_EDMAHandle[16]);
1726 }
1727
DMA17_DriverIRQHandler(void)1728 void DMA17_DriverIRQHandler(void)
1729 {
1730 EDMA_HandleIRQ(s_EDMAHandle[17]);
1731 }
1732
DMA18_DriverIRQHandler(void)1733 void DMA18_DriverIRQHandler(void)
1734 {
1735 EDMA_HandleIRQ(s_EDMAHandle[18]);
1736 }
1737
DMA19_DriverIRQHandler(void)1738 void DMA19_DriverIRQHandler(void)
1739 {
1740 EDMA_HandleIRQ(s_EDMAHandle[19]);
1741 }
1742
DMA20_DriverIRQHandler(void)1743 void DMA20_DriverIRQHandler(void)
1744 {
1745 EDMA_HandleIRQ(s_EDMAHandle[20]);
1746 }
1747
DMA21_DriverIRQHandler(void)1748 void DMA21_DriverIRQHandler(void)
1749 {
1750 EDMA_HandleIRQ(s_EDMAHandle[21]);
1751 }
1752
DMA22_DriverIRQHandler(void)1753 void DMA22_DriverIRQHandler(void)
1754 {
1755 EDMA_HandleIRQ(s_EDMAHandle[22]);
1756 }
1757
DMA23_DriverIRQHandler(void)1758 void DMA23_DriverIRQHandler(void)
1759 {
1760 EDMA_HandleIRQ(s_EDMAHandle[23]);
1761 }
1762
DMA24_DriverIRQHandler(void)1763 void DMA24_DriverIRQHandler(void)
1764 {
1765 EDMA_HandleIRQ(s_EDMAHandle[24]);
1766 }
1767
DMA25_DriverIRQHandler(void)1768 void DMA25_DriverIRQHandler(void)
1769 {
1770 EDMA_HandleIRQ(s_EDMAHandle[25]);
1771 }
1772
DMA26_DriverIRQHandler(void)1773 void DMA26_DriverIRQHandler(void)
1774 {
1775 EDMA_HandleIRQ(s_EDMAHandle[26]);
1776 }
1777
DMA27_DriverIRQHandler(void)1778 void DMA27_DriverIRQHandler(void)
1779 {
1780 EDMA_HandleIRQ(s_EDMAHandle[27]);
1781 }
1782
DMA28_DriverIRQHandler(void)1783 void DMA28_DriverIRQHandler(void)
1784 {
1785 EDMA_HandleIRQ(s_EDMAHandle[28]);
1786 }
1787
DMA29_DriverIRQHandler(void)1788 void DMA29_DriverIRQHandler(void)
1789 {
1790 EDMA_HandleIRQ(s_EDMAHandle[29]);
1791 }
1792
DMA30_DriverIRQHandler(void)1793 void DMA30_DriverIRQHandler(void)
1794 {
1795 EDMA_HandleIRQ(s_EDMAHandle[30]);
1796 }
1797
DMA31_DriverIRQHandler(void)1798 void DMA31_DriverIRQHandler(void)
1799 {
1800 EDMA_HandleIRQ(s_EDMAHandle[31]);
1801 }
1802 #endif /* FSL_FEATURE_EDMA_MODULE_CHANNEL == 32 */
1803
1804 #endif /* 4/8/16/32 channels (No Shared) */
1805
1806 #if defined(DMA0)
DMA0_0_4_8_12_IRQHandler(void)1807 void DMA0_0_4_8_12_IRQHandler(void)
1808 {
1809 if ((EDMA_GetChannelStatusFlags(DMA0, 0U) & kEDMA_InterruptFlag) != 0U)
1810 {
1811 EDMA_HandleIRQ(s_EDMAHandle[0]);
1812 }
1813 if ((EDMA_GetChannelStatusFlags(DMA0, 4U) & kEDMA_InterruptFlag) != 0U)
1814 {
1815 EDMA_HandleIRQ(s_EDMAHandle[4]);
1816 }
1817 if ((EDMA_GetChannelStatusFlags(DMA0, 8U) & kEDMA_InterruptFlag) != 0U)
1818 {
1819 EDMA_HandleIRQ(s_EDMAHandle[8]);
1820 }
1821 if ((EDMA_GetChannelStatusFlags(DMA0, 12U) & kEDMA_InterruptFlag) != 0U)
1822 {
1823 EDMA_HandleIRQ(s_EDMAHandle[12]);
1824 }
1825 }
1826
DMA0_1_5_9_13_IRQHandler(void)1827 void DMA0_1_5_9_13_IRQHandler(void)
1828 {
1829 if ((EDMA_GetChannelStatusFlags(DMA0, 1U) & kEDMA_InterruptFlag) != 0U)
1830 {
1831 EDMA_HandleIRQ(s_EDMAHandle[1]);
1832 }
1833 if ((EDMA_GetChannelStatusFlags(DMA0, 5U) & kEDMA_InterruptFlag) != 0U)
1834 {
1835 EDMA_HandleIRQ(s_EDMAHandle[5]);
1836 }
1837 if ((EDMA_GetChannelStatusFlags(DMA0, 9U) & kEDMA_InterruptFlag) != 0U)
1838 {
1839 EDMA_HandleIRQ(s_EDMAHandle[9]);
1840 }
1841 if ((EDMA_GetChannelStatusFlags(DMA0, 13U) & kEDMA_InterruptFlag) != 0U)
1842 {
1843 EDMA_HandleIRQ(s_EDMAHandle[13]);
1844 }
1845 }
1846
DMA0_2_6_10_14_IRQHandler(void)1847 void DMA0_2_6_10_14_IRQHandler(void)
1848 {
1849 if ((EDMA_GetChannelStatusFlags(DMA0, 2U) & kEDMA_InterruptFlag) != 0U)
1850 {
1851 EDMA_HandleIRQ(s_EDMAHandle[2]);
1852 }
1853 if ((EDMA_GetChannelStatusFlags(DMA0, 6U) & kEDMA_InterruptFlag) != 0U)
1854 {
1855 EDMA_HandleIRQ(s_EDMAHandle[6]);
1856 }
1857 if ((EDMA_GetChannelStatusFlags(DMA0, 10U) & kEDMA_InterruptFlag) != 0U)
1858 {
1859 EDMA_HandleIRQ(s_EDMAHandle[10]);
1860 }
1861 if ((EDMA_GetChannelStatusFlags(DMA0, 14U) & kEDMA_InterruptFlag) != 0U)
1862 {
1863 EDMA_HandleIRQ(s_EDMAHandle[14]);
1864 }
1865 }
1866
DMA0_3_7_11_15_IRQHandler(void)1867 void DMA0_3_7_11_15_IRQHandler(void)
1868 {
1869 if ((EDMA_GetChannelStatusFlags(DMA0, 3U) & kEDMA_InterruptFlag) != 0U)
1870 {
1871 EDMA_HandleIRQ(s_EDMAHandle[3]);
1872 }
1873 if ((EDMA_GetChannelStatusFlags(DMA0, 7U) & kEDMA_InterruptFlag) != 0U)
1874 {
1875 EDMA_HandleIRQ(s_EDMAHandle[7]);
1876 }
1877 if ((EDMA_GetChannelStatusFlags(DMA0, 11U) & kEDMA_InterruptFlag) != 0U)
1878 {
1879 EDMA_HandleIRQ(s_EDMAHandle[11]);
1880 }
1881 if ((EDMA_GetChannelStatusFlags(DMA0, 15U) & kEDMA_InterruptFlag) != 0U)
1882 {
1883 EDMA_HandleIRQ(s_EDMAHandle[15]);
1884 }
1885 }
1886 #endif
1887