EFM32 Pearl Gecko Software Documentation  efm32pg1-doc-4.2.1
dmadrv.h
Go to the documentation of this file.
1 /***************************************************************************/
16 #ifndef __SILICON_LABS_DMADRV_H__
17 #define __SILICON_LABS_DMADRV_H__
18 
19 #include "em_device.h"
20 #include "ecode.h"
21 
22 #if defined( DMA_PRESENT ) && ( DMA_COUNT == 1 )
23 #define EMDRV_DMADRV_UDMA
24 #define EMDRV_DMADRV_DMA_PRESENT
25 #include "em_dma.h"
26 #elif defined( LDMA_PRESENT ) && ( LDMA_COUNT == 1 )
27 #define EMDRV_DMADRV_LDMA
28 #define EMDRV_DMADRV_DMA_PRESENT
29 #include "em_ldma.h"
30 #else
31 #error "No valid DMA engine defined."
32 #endif
33 
34 #include "dmadrv_config.h"
35 
36 #ifdef __cplusplus
37 extern "C" {
38 #endif
39 
40 /***************************************************************************/
45 /***************************************************************************/
51 #define ECODE_EMDRV_DMADRV_OK ( ECODE_OK )
52 #define ECODE_EMDRV_DMADRV_PARAM_ERROR ( ECODE_EMDRV_DMADRV_BASE | 0x00000001 )
53 #define ECODE_EMDRV_DMADRV_NOT_INITIALIZED ( ECODE_EMDRV_DMADRV_BASE | 0x00000002 )
54 #define ECODE_EMDRV_DMADRV_ALREADY_INITIALIZED ( ECODE_EMDRV_DMADRV_BASE | 0x00000003 )
55 #define ECODE_EMDRV_DMADRV_CHANNELS_EXHAUSTED ( ECODE_EMDRV_DMADRV_BASE | 0x00000004 )
56 #define ECODE_EMDRV_DMADRV_IN_USE ( ECODE_EMDRV_DMADRV_BASE | 0x00000005 )
57 #define ECODE_EMDRV_DMADRV_ALREADY_FREED ( ECODE_EMDRV_DMADRV_BASE | 0x00000006 )
58 #define ECODE_EMDRV_DMADRV_CH_NOT_ALLOCATED ( ECODE_EMDRV_DMADRV_BASE | 0x00000007 )
59 
60 /***************************************************************************/
81 typedef bool (*DMADRV_Callback_t)( unsigned int channel,
82  unsigned int sequenceNo,
83  void *userParam );
84 
85 #if defined( DMA_PRESENT ) && ( DMA_COUNT == 1 )
86 
88 #define DMADRV_MAX_XFER_COUNT ((int)((_DMA_CTRL_N_MINUS_1_MASK >> _DMA_CTRL_N_MINUS_1_SHIFT) + 1))
89 
91 typedef enum
92 {
94  #if defined( DMAREQ_ADC0_SCAN )
96  #endif
97  #if defined( DMAREQ_ADC0_SINGLE )
99  #endif
100  #if defined( DMAREQ_AES_DATARD )
101  dmadrvPeripheralSignal_AES_DATARD = DMAREQ_AES_DATARD,
102  #endif
103  #if defined( DMAREQ_AES_DATAWR )
104  dmadrvPeripheralSignal_AES_DATAWR = DMAREQ_AES_DATAWR,
105  #endif
106  #if defined( DMAREQ_AES_KEYWR )
107  dmadrvPeripheralSignal_AES_KEYWR = DMAREQ_AES_KEYWR,
108  #endif
109  #if defined( DMAREQ_AES_XORDATAWR )
110  dmadrvPeripheralSignal_AES_XORDATAWR = DMAREQ_AES_XORDATAWR,
111  #endif
112  #if defined( DMAREQ_DAC0_CH0 )
113  dmadrvPeripheralSignal_DAC0_CH0 = DMAREQ_DAC0_CH0,
114  #endif
115  #if defined( DMAREQ_DAC0_CH1 )
116  dmadrvPeripheralSignal_DAC0_CH1 = DMAREQ_DAC0_CH1,
117  #endif
118  #if defined( DMAREQ_EBI_DDEMPTY )
119  dmadrvPeripheralSignal_EBI_DDEMPTY = DMAREQ_EBI_DDEMPTY,
120  #endif
121  #if defined( DMAREQ_EBI_PXL0EMPTY )
122  dmadrvPeripheralSignal_EBI_PXL0EMPTY = DMAREQ_EBI_PXL0EMPTY,
123  #endif
124  #if defined( DMAREQ_EBI_PXL1EMPTY )
125  dmadrvPeripheralSignal_EBI_PXL1EMPTY = DMAREQ_EBI_PXL1EMPTY,
126  #endif
127  #if defined( DMAREQ_EBI_PXLFULL )
128  dmadrvPeripheralSignal_EBI_PXLFULL = DMAREQ_EBI_PXLFULL,
129  #endif
130  #if defined( DMAREQ_I2C0_RXDATAV )
132  #endif
133  #if defined( DMAREQ_I2C0_TXBL )
135  #endif
136  #if defined( DMAREQ_I2C1_RXDATAV )
137  dmadrvPeripheralSignal_I2C1_RXDATAV = DMAREQ_I2C1_RXDATAV,
138  #endif
139  #if defined( DMAREQ_I2C1_TXBL )
140  dmadrvPeripheralSignal_I2C1_TXBL = DMAREQ_I2C1_TXBL,
141  #endif
142  #if defined( DMAREQ_LESENSE_BUFDATAV )
143  dmadrvPeripheralSignal_LESENSE_BUFDATAV = DMAREQ_LESENSE_BUFDATAV,
144  #endif
145  #if defined( DMAREQ_LEUART0_RXDATAV )
147  #endif
148  #if defined( DMAREQ_LEUART0_TXBL )
150  #endif
151  #if defined( DMAREQ_LEUART0_TXEMPTY )
153  #endif
154  #if defined( DMAREQ_LEUART1_RXDATAV )
155  dmadrvPeripheralSignal_LEUART1_RXDATAV = DMAREQ_LEUART1_RXDATAV,
156  #endif
157  #if defined( DMAREQ_LEUART1_TXBL )
158  dmadrvPeripheralSignal_LEUART1_TXBL = DMAREQ_LEUART1_TXBL,
159  #endif
160  #if defined( DMAREQ_LEUART1_TXEMPTY )
161  dmadrvPeripheralSignal_LEUART1_TXEMPTY = DMAREQ_LEUART1_TXEMPTY,
162  #endif
163  #if defined( DMAREQ_MSC_WDATA )
165  #endif
166  #if defined( DMAREQ_TIMER0_CC0 )
168  #endif
169  #if defined( DMAREQ_TIMER0_CC1 )
171  #endif
172  #if defined( DMAREQ_TIMER0_CC2 )
174  #endif
175  #if defined( DMAREQ_TIMER0_UFOF )
177  #endif
178  #if defined( DMAREQ_TIMER1_CC0 )
180  #endif
181  #if defined( DMAREQ_TIMER1_CC1 )
183  #endif
184  #if defined( DMAREQ_TIMER1_CC2 )
186  #endif
187  #if defined( DMAREQ_TIMER1_UFOF )
189  #endif
190  #if defined( DMAREQ_TIMER2_CC0 )
191  dmadrvPeripheralSignal_TIMER2_CC0 = DMAREQ_TIMER2_CC0,
192  #endif
193  #if defined( DMAREQ_TIMER2_CC1 )
194  dmadrvPeripheralSignal_TIMER2_CC1 = DMAREQ_TIMER2_CC1,
195  #endif
196  #if defined( DMAREQ_TIMER2_CC2 )
197  dmadrvPeripheralSignal_TIMER2_CC2 = DMAREQ_TIMER2_CC2,
198  #endif
199  #if defined( DMAREQ_TIMER2_UFOF )
200  dmadrvPeripheralSignal_TIMER2_UFOF = DMAREQ_TIMER2_UFOF,
201  #endif
202  #if defined( DMAREQ_TIMER3_CC0 )
203  dmadrvPeripheralSignal_TIMER3_CC0 = DMAREQ_TIMER3_CC0,
204  #endif
205  #if defined( DMAREQ_TIMER3_CC1 )
206  dmadrvPeripheralSignal_TIMER3_CC1 = DMAREQ_TIMER3_CC1,
207  #endif
208  #if defined( DMAREQ_TIMER3_CC2 )
209  dmadrvPeripheralSignal_TIMER3_CC2 = DMAREQ_TIMER3_CC2,
210  #endif
211  #if defined( DMAREQ_TIMER3_UFOF )
212  dmadrvPeripheralSignal_TIMER3_UFOF = DMAREQ_TIMER3_UFOF,
213  #endif
214  #if defined( DMAREQ_UART0_RXDATAV )
215  dmadrvPeripheralSignal_UART0_RXDATAV = DMAREQ_UART0_RXDATAV,
216  #endif
217  #if defined( DMAREQ_UART0_TXBL )
218  dmadrvPeripheralSignal_UART0_TXBL = DMAREQ_UART0_TXBL,
219  #endif
220  #if defined( DMAREQ_UART0_TXEMPTY )
221  dmadrvPeripheralSignal_UART0_TXEMPTY = DMAREQ_UART0_TXEMPTY,
222  #endif
223  #if defined( DMAREQ_UART1_RXDATAV )
224  dmadrvPeripheralSignal_UART1_RXDATAV = DMAREQ_UART1_RXDATAV,
225  #endif
226  #if defined( DMAREQ_UART1_TXBL )
227  dmadrvPeripheralSignal_UART1_TXBL = DMAREQ_UART1_TXBL,
228  #endif
229  #if defined( DMAREQ_UART1_TXEMPTY )
230  dmadrvPeripheralSignal_UART1_TXEMPTY = DMAREQ_UART1_TXEMPTY,
231  #endif
232  #if defined( DMAREQ_USART0_RXDATAV )
234  #endif
235  #if defined( DMAREQ_USART0_TXBL )
237  #endif
238  #if defined( DMAREQ_USART0_TXEMPTY )
240  #endif
241  #if defined( DMAREQ_USARTRF0_RXDATAV )
242  dmadrvPeripheralSignal_USARTRF0_RXDATAV = DMAREQ_USARTRF0_RXDATAV,
243  #endif
244  #if defined( DMAREQ_USARTRF0_TXBL )
245  dmadrvPeripheralSignal_USARTRF0_TXBL = DMAREQ_USARTRF0_TXBL,
246  #endif
247  #if defined( DMAREQ_USARTRF0_TXEMPTY )
248  dmadrvPeripheralSignal_USARTRF0_TXEMPTY = DMAREQ_USARTRF0_TXEMPTY,
249  #endif
250  #if defined( DMAREQ_USARTRF1_RXDATAV )
251  dmadrvPeripheralSignal_USARTRF1_RXDATAV = DMAREQ_USARTRF1_RXDATAV,
252  #endif
253  #if defined( DMAREQ_USARTRF1_TXBL )
254  dmadrvPeripheralSignal_USARTRF1_TXBL = DMAREQ_USARTRF1_TXBL,
255  #endif
256  #if defined( DMAREQ_USARTRF1_TXEMPTY )
257  dmadrvPeripheralSignal_USARTRF1_TXEMPTY = DMAREQ_USARTRF1_TXEMPTY,
258  #endif
259  #if defined( DMAREQ_USART1_RXDATAV )
261  #endif
262  #if defined( DMAREQ_USART1_RXDATAVRIGHT )
264  #endif
265  #if defined( DMAREQ_USART1_TXBL )
267  #endif
268  #if defined( DMAREQ_USART1_TXBLRIGHT )
270  #endif
271  #if defined( DMAREQ_USART1_TXEMPTY )
273  #endif
274  #if defined( DMAREQ_USART2_RXDATAV )
275  dmadrvPeripheralSignal_USART2_RXDATAV = DMAREQ_USART2_RXDATAV,
276  #endif
277  #if defined( DMAREQ_USART2_RXDATAVRIGHT )
278  dmadrvPeripheralSignal_USART2_RXDATAVRIGHT = DMAREQ_USART2_RXDATAVRIGHT,
279  #endif
280  #if defined( DMAREQ_USART2_TXBL )
281  dmadrvPeripheralSignal_USART2_TXBL = DMAREQ_USART2_TXBL,
282  #endif
283  #if defined( DMAREQ_USART2_TXBLRIGHT )
284  dmadrvPeripheralSignal_USART2_TXBLRIGHT = DMAREQ_USART2_TXBLRIGHT,
285  #endif
286  #if defined( DMAREQ_USART2_TXEMPTY )
287  dmadrvPeripheralSignal_USART2_TXEMPTY = DMAREQ_USART2_TXEMPTY,
288  #endif
289 #ifdef DOXY_DOC_ONLY
290 } DMADRV_Peripheralsignal_t;
291 #else
293 #endif
294 
296 typedef enum
297 {
298  dmadrvDataSize1 = dmaDataSize1,
299  dmadrvDataSize2 = dmaDataSize2,
300  dmadrvDataSize4 = dmaDataSize4
301 #ifdef DOXY_DOC_ONLY
302 } DMADRV_Datasize_t;
303 #else
305 #endif
306 
307 #endif // defined( DMA_PRESENT ) && ( DMA_COUNT == 1 )
308 
309 #if defined( LDMA_PRESENT ) && ( LDMA_COUNT == 1 )
310 
312 #define DMADRV_MAX_XFER_COUNT ((int)((_LDMA_CH_CTRL_XFERCNT_MASK >> _LDMA_CH_CTRL_XFERCNT_SHIFT) + 1))
313 
315 typedef enum
316 {
318  #if defined( LDMA_CH_REQSEL_SIGSEL_ADC0SCAN )
320  #endif
321  #if defined( LDMA_CH_REQSEL_SIGSEL_ADC0SINGLE )
323  #endif
324  #if defined( LDMA_CH_REQSEL_SIGSEL_AGCRSSI )
325  dmadrvPeripheralSignal_AGC_RSSI = LDMA_CH_REQSEL_SIGSEL_AGCRSSI | LDMA_CH_REQSEL_SOURCESEL_AGC,
326  #endif
327  #if defined( LDMA_CH_REQSEL_SIGSEL_CRYPTODATA0RD )
329  #endif
330  #if defined( LDMA_CH_REQSEL_SIGSEL_CRYPTODATA0WR )
332  #endif
333  #if defined( LDMA_CH_REQSEL_SIGSEL_CRYPTODATA0XWR )
335  #endif
336  #if defined( LDMA_CH_REQSEL_SIGSEL_CRYPTODATA1RD )
338  #endif
339  #if defined( LDMA_CH_REQSEL_SIGSEL_CRYPTODATA1WR )
341  #endif
342  #if defined( LDMA_CH_REQSEL_SIGSEL_I2C0RXDATAV )
344  #endif
345  #if defined( LDMA_CH_REQSEL_SIGSEL_I2C0TXBL )
347  #endif
348  #if defined( LDMA_CH_REQSEL_SIGSEL_LEUART0RXDATAV )
350  #endif
351  #if defined( LDMA_CH_REQSEL_SIGSEL_LEUART0TXBL )
353  #endif
354  #if defined( LDMA_CH_REQSEL_SIGSEL_LEUART0TXEMPTY )
356  #endif
357  #if defined( LDMA_CH_REQSEL_SIGSEL_MODEMDEBUG )
358  dmadrvPeripheralSignal_MODEM_DEBUG = LDMA_CH_REQSEL_SIGSEL_MODEMDEBUG | LDMA_CH_REQSEL_SOURCESEL_MODEM,
359  #endif
360  #if defined( LDMA_CH_REQSEL_SIGSEL_MSCWDATA )
362  #endif
363  #if defined( LDMA_CH_REQSEL_SIGSEL_PROTIMERBOF )
364  dmadrvPeripheralSignal_PROTIMER_BOF = LDMA_CH_REQSEL_SIGSEL_PROTIMERBOF | LDMA_CH_REQSEL_SOURCESEL_PROTIMER,
365  #endif
366  #if defined( LDMA_CH_REQSEL_SIGSEL_PROTIMERCC0 )
367  dmadrvPeripheralSignal_PROTIMER_CC0 = LDMA_CH_REQSEL_SIGSEL_PROTIMERCC0 | LDMA_CH_REQSEL_SOURCESEL_PROTIMER,
368  #endif
369  #if defined( LDMA_CH_REQSEL_SIGSEL_PROTIMERCC1 )
370  dmadrvPeripheralSignal_PROTIMER_CC1 = LDMA_CH_REQSEL_SIGSEL_PROTIMERCC1 | LDMA_CH_REQSEL_SOURCESEL_PROTIMER,
371  #endif
372  #if defined( LDMA_CH_REQSEL_SIGSEL_PROTIMERCC2 )
373  dmadrvPeripheralSignal_PROTIMER_CC2 = LDMA_CH_REQSEL_SIGSEL_PROTIMERCC2 | LDMA_CH_REQSEL_SOURCESEL_PROTIMER,
374  #endif
375  #if defined( LDMA_CH_REQSEL_SIGSEL_PROTIMERCC3 )
376  dmadrvPeripheralSignal_PROTIMER_CC3 = LDMA_CH_REQSEL_SIGSEL_PROTIMERCC3 | LDMA_CH_REQSEL_SOURCESEL_PROTIMER,
377  #endif
378  #if defined( LDMA_CH_REQSEL_SIGSEL_PROTIMERCC4 )
379  dmadrvPeripheralSignal_PROTIMER_CC4 = LDMA_CH_REQSEL_SIGSEL_PROTIMERCC4 | LDMA_CH_REQSEL_SOURCESEL_PROTIMER,
380  #endif
381  #if defined( LDMA_CH_REQSEL_SIGSEL_PROTIMERPOF )
382  dmadrvPeripheralSignal_PROTIMER_POF = LDMA_CH_REQSEL_SIGSEL_PROTIMERPOF | LDMA_CH_REQSEL_SOURCESEL_PROTIMER,
383  #endif
384  #if defined( LDMA_CH_REQSEL_SIGSEL_PROTIMERWOF )
385  dmadrvPeripheralSignal_PROTIMER_WOF = LDMA_CH_REQSEL_SIGSEL_PROTIMERWOF | LDMA_CH_REQSEL_SOURCESEL_PROTIMER,
386  #endif
387  #if defined( LDMA_CH_REQSEL_SIGSEL_PRSREQ0 )
389  #endif
390  #if defined( LDMA_CH_REQSEL_SIGSEL_PRSREQ1 )
392  #endif
393  #if defined( LDMA_CH_REQSEL_SIGSEL_TIMER0CC0 )
395  #endif
396  #if defined( LDMA_CH_REQSEL_SIGSEL_TIMER0CC1 )
398  #endif
399  #if defined( LDMA_CH_REQSEL_SIGSEL_TIMER0CC2 )
401  #endif
402  #if defined( LDMA_CH_REQSEL_SIGSEL_TIMER0UFOF )
404  #endif
405  #if defined( LDMA_CH_REQSEL_SIGSEL_TIMER1CC0 )
407  #endif
408  #if defined( LDMA_CH_REQSEL_SIGSEL_TIMER1CC1 )
410  #endif
411  #if defined( LDMA_CH_REQSEL_SIGSEL_TIMER1CC2 )
413  #endif
414  #if defined( LDMA_CH_REQSEL_SIGSEL_TIMER1CC3 )
416  #endif
417  #if defined( LDMA_CH_REQSEL_SIGSEL_TIMER1UFOF )
419  #endif
420  #if defined( LDMA_CH_REQSEL_SIGSEL_USART0RXDATAV )
422  #endif
423  #if defined( LDMA_CH_REQSEL_SIGSEL_USART0TXBL )
425  #endif
426  #if defined( LDMA_CH_REQSEL_SIGSEL_USART0TXEMPTY )
428  #endif
429  #if defined( LDMA_CH_REQSEL_SIGSEL_USART1RXDATAV )
431  #endif
432  #if defined( LDMA_CH_REQSEL_SIGSEL_USART1RXDATAVRIGHT )
434  #endif
435  #if defined( LDMA_CH_REQSEL_SIGSEL_USART1TXBL )
437  #endif
438  #if defined( LDMA_CH_REQSEL_SIGSEL_USART1TXBLRIGHT )
440  #endif
441  #if defined( LDMA_CH_REQSEL_SIGSEL_USART1TXEMPTY )
443  #endif
445 
447 typedef enum
448 {
453 
454 #endif /* defined( LDMA_PRESENT ) && ( LDMA_COUNT == 1 ) */
455 
456 Ecode_t DMADRV_AllocateChannel( unsigned int *channelId, void *capabilities );
457 Ecode_t DMADRV_DeInit( void );
458 Ecode_t DMADRV_FreeChannel( unsigned int channelId );
459 Ecode_t DMADRV_Init( void );
460 
461 #if !defined( EMDRV_DMADRV_USE_NATIVE_API ) || defined( DOXY_DOC_ONLY )
462 Ecode_t DMADRV_MemoryPeripheral( unsigned int channelId,
464  peripheralSignal,
465  void *dst,
466  void *src,
467  bool srcInc,
468  int len,
469  DMADRV_DataSize_t size,
470  DMADRV_Callback_t callback,
471  void *cbUserParam );
472 Ecode_t DMADRV_PeripheralMemory( unsigned int channelId,
474  peripheralSignal,
475  void *dst,
476  void *src,
477  bool dstInc,
478  int len,
479  DMADRV_DataSize_t size,
480  DMADRV_Callback_t callback,
481  void *cbUserParam );
483  unsigned int channelId,
485  peripheralSignal,
486  void *dst,
487  void *src0,
488  void *src1,
489  bool srcInc,
490  int len,
491  DMADRV_DataSize_t size,
492  DMADRV_Callback_t callback,
493  void *cbUserParam );
495  unsigned int channelId,
497  peripheralSignal,
498  void *dst0,
499  void *dst1,
500  void *src,
501  bool dstInc,
502  int len,
503  DMADRV_DataSize_t size,
504  DMADRV_Callback_t callback,
505  void *cbUserParam );
506 #endif
507 
508 #if defined( EMDRV_DMADRV_LDMA ) && defined( EMDRV_DMADRV_USE_NATIVE_API )
509 
511  int channelId,
512  LDMA_TransferCfg_t *transfer,
513  LDMA_Descriptor_t *descriptor,
514  DMADRV_Callback_t callback,
515  void *cbUserParam );
516 
517 #endif /* !defined( EMDRV_DMADRV_USE_NATIVE_API ) */
518 
519 Ecode_t DMADRV_StopTransfer( unsigned int channelId );
520 Ecode_t DMADRV_TransferActive( unsigned int channelId, bool *active );
521 Ecode_t DMADRV_TransferCompletePending( unsigned int channelId, bool *pending );
522 Ecode_t DMADRV_TransferDone( unsigned int channelId, bool *done );
523 Ecode_t DMADRV_TransferRemainingCount( unsigned int channelId,
524  int *remaining );
525 
529 #ifdef __cplusplus
530 }
531 #endif
532 
533 #endif /* __SILICON_LABS_DMADRV_H__ */
#define LDMA_CH_REQSEL_SIGSEL_USART1TXBLRIGHT
Trig on TIMER1_UFOF.
Definition: dmadrv.h:418
Byte.
Definition: dmadrv.h:449
DMA transfer configuration structure.
Definition: em_ldma.h:422
Trig on USART1_RXDATAV.
Definition: dmadrv.h:430
#define LDMA_CH_REQSEL_SIGSEL_TIMER0CC0
#define DMAREQ_TIMER0_CC2
#define DMAREQ_I2C0_TXBL
Trig on CRYPTO_DATA0XWR.
Definition: dmadrv.h:334
#define LDMA_CH_REQSEL_SIGSEL_LEUART0TXBL
#define LDMA_CH_REQSEL_SOURCESEL_LEUART0
#define LDMA_CH_REQSEL_SIGSEL_TIMER0UFOF
#define DMAREQ_USART1_RXDATAV
#define LDMA_CH_REQSEL_SOURCESEL_MSC
Trig on TIMER0_UFOF.
Definition: dmadrv.h:403
Ecode_t DMADRV_PeripheralMemory(unsigned int channelId, DMADRV_PeripheralSignal_t peripheralSignal, void *dst, void *src, bool dstInc, int len, DMADRV_DataSize_t size, DMADRV_Callback_t callback, void *cbUserParam)
Start a peripheral to memory DMA transfer.
Definition: dmadrv.c:535
#define DMAREQ_TIMER1_UFOF
Trig on ADC0_SCAN.
Definition: dmadrv.h:319
Ecode_t DMADRV_TransferActive(unsigned int channelId, bool *active)
Check if a transfer is running.
Definition: dmadrv.c:681
Trig on USART0_RXDATAV.
Definition: dmadrv.h:421
Energy Aware drivers error code definitions.
#define DMAREQ_TIMER0_CC1
#define LDMA_CH_REQSEL_SIGSEL_TIMER1CC2
Trig on MSC_WDATA.
Definition: dmadrv.h:361
bool(* DMADRV_Callback_t)(unsigned int channel, unsigned int sequenceNo, void *userParam)
DMADRV transfer completion callback function.
Definition: dmadrv.h:81
#define LDMA_CH_REQSEL_SIGSEL_TIMER0CC2
Trig on USART1_TXEMPTY.
Definition: dmadrv.h:442
#define LDMA_CH_REQSEL_SOURCESEL_CRYPTO
#define DMAREQ_USART1_TXBLRIGHT
#define LDMA_CH_REQSEL_SOURCESEL_PRS
Ecode_t DMADRV_StopTransfer(unsigned int channelId)
Stop an ongoing DMA transfer.
Definition: dmadrv.c:641
Trig on CRYPTO_DATA0WR.
Definition: dmadrv.h:331
CMSIS Cortex-M Peripheral Access Layer for Silicon Laboratories microcontroller devices.
#define DMAREQ_TIMER1_CC1
DMADRV_DataSize_t
Data size of one LDMA transfer item.
Definition: dmadrv.h:447
#define LDMA_CH_REQSEL_SIGSEL_PRSREQ1
#define LDMA_CH_REQSEL_SIGSEL_LEUART0RXDATAV
#define DMAREQ_ADC0_SINGLE
#define LDMA_CH_REQSEL_SIGSEL_TIMER1CC3
#define LDMA_CH_REQSEL_SOURCESEL_ADC0
Ecode_t DMADRV_TransferDone(unsigned int channelId, bool *done)
Check if a transfer has completed.
Definition: dmadrv.c:786
#define LDMA_CH_REQSEL_SIGSEL_USART1RXDATAV
Trig on PRS_REQ1.
Definition: dmadrv.h:391
#define DMAREQ_LEUART0_TXEMPTY
#define DMAREQ_I2C0_RXDATAV
Trig on ADC0_SINGLE.
Definition: dmadrv.h:322
Trig on TIMER0_CC2.
Definition: dmadrv.h:400
#define LDMA_CH_REQSEL_SOURCESEL_USART1
#define LDMA_CH_REQSEL_SIGSEL_ADC0SINGLE
Trig on USART1_TXBLRIGHT.
Definition: dmadrv.h:439
Ecode_t DMADRV_TransferRemainingCount(unsigned int channelId, int *remaining)
Get number of items remaining in a transfer.
Definition: dmadrv.c:852
#define DMAREQ_MSC_WDATA
#define LDMA_CH_REQSEL_SIGSEL_USART0TXBL
Trig on USART0_TXEMPTY.
Definition: dmadrv.h:427
#define LDMA_CH_REQSEL_SIGSEL_CRYPTODATA0WR
#define DMAREQ_TIMER0_CC0
Trig on CRYPTO_DATA1RD.
Definition: dmadrv.h:337
#define LDMA_CH_REQSEL_SIGSEL_CRYPTODATA1RD
#define DMAREQ_USART1_TXBL
Halfword.
Definition: dmadrv.h:450
#define LDMA_CH_REQSEL_SIGSEL_CRYPTODATA1WR
#define DMAREQ_USART1_TXEMPTY
Trig on TIMER0_CC1.
Definition: dmadrv.h:397
#define DMAREQ_LEUART0_RXDATAV
Ecode_t DMADRV_LdmaStartTransfer(int channelId, LDMA_TransferCfg_t *transfer, LDMA_Descriptor_t *descriptor, DMADRV_Callback_t callback, void *cbUserParam)
Start a LDMA transfer.
Definition: dmadrv.c:331
#define LDMA_CH_REQSEL_SIGSEL_CRYPTODATA0XWR
#define LDMA_CH_REQSEL_SIGSEL_TIMER1UFOF
#define DMAREQ_TIMER1_CC2
#define LDMA_CH_REQSEL_SOURCESEL_TIMER1
Trig on USART1_TXBL.
Definition: dmadrv.h:436
Word.
Definition: dmadrv.h:451
#define LDMA_CH_REQSEL_SIGSEL_TIMER0CC1
Ecode_t DMADRV_MemoryPeripheralPingPong(unsigned int channelId, DMADRV_PeripheralSignal_t peripheralSignal, void *dst, void *src0, void *src1, bool srcInc, int len, DMADRV_DataSize_t size, DMADRV_Callback_t callback, void *cbUserParam)
Start a memory to peripheral ping-pong DMA transfer.
Definition: dmadrv.c:469
#define LDMA_CH_REQSEL_SOURCESEL_I2C0
Trig on USART0_TXBL.
Definition: dmadrv.h:424
No peripheral selected for DMA triggering.
Definition: dmadrv.h:317
Trig on USART1_RXDATAVRIGHT.
Definition: dmadrv.h:433
#define LDMA_CH_REQSEL_SIGSEL_TIMER1CC1
Ecode_t DMADRV_Init(void)
Initialize DMADRV.
Definition: dmadrv.c:258
#define LDMA_CH_REQSEL_SIGSEL_USART1TXBL
#define LDMA_CH_REQSEL_SIGSEL_MSCWDATA
#define DMAREQ_USART1_RXDATAVRIGHT
Trig on PRS_REQ0.
Definition: dmadrv.h:388
#define LDMA_CH_REQSEL_SIGSEL_USART0TXEMPTY
#define DMAREQ_TIMER0_UFOF
#define LDMA_CH_REQSEL_SOURCESEL_NONE
Direct memory access (LDMA) API.
DMA descriptor.
Definition: em_ldma.h:314
#define LDMA_CH_REQSEL_SOURCESEL_TIMER0
#define DMAREQ_USART0_RXDATAV
#define LDMA_CH_REQSEL_SIGSEL_PRSREQ0
Ecode_t DMADRV_DeInit(void)
Deinitialize DMADRV.
Definition: dmadrv.c:176
#define LDMA_CH_REQSEL_SIGSEL_I2C0RXDATAV
#define LDMA_CH_REQSEL_SIGSEL_USART0RXDATAV
#define DMAREQ_LEUART0_TXBL
#define LDMA_CH_REQSEL_SOURCESEL_USART0
Ecode_t DMADRV_AllocateChannel(unsigned int *channelId, void *capabilities)
Allocate (reserve) a DMA channel.
Definition: dmadrv.c:131
Trig on TIMER1_CC2.
Definition: dmadrv.h:412
Trig on I2C0_TXBL.
Definition: dmadrv.h:346
Ecode_t DMADRV_MemoryPeripheral(unsigned int channelId, DMADRV_PeripheralSignal_t peripheralSignal, void *dst, void *src, bool srcInc, int len, DMADRV_DataSize_t size, DMADRV_Callback_t callback, void *cbUserParam)
Start a memory to peripheral DMA transfer.
Definition: dmadrv.c:402
DMADRV_PeripheralSignal_t
Peripherals that can trigger LDMA transfers.
Definition: dmadrv.h:315
Trig on I2C0_RXDATAV.
Definition: dmadrv.h:343
Trig on TIMER0_CC0.
Definition: dmadrv.h:394
#define LDMA_CH_REQSEL_SIGSEL_CRYPTODATA0RD
Trig on TIMER1_CC3.
Definition: dmadrv.h:415
uint32_t Ecode_t
Typedef for API function errorcode return values.
Definition: ecode.h:31
#define LDMA_CH_REQSEL_SIGSEL_LEUART0TXEMPTY
Ecode_t DMADRV_TransferCompletePending(unsigned int channelId, bool *pending)
Check if a transfer complete is pending.
Definition: dmadrv.c:733
#define LDMA_CH_REQSEL_SIGSEL_USART1TXEMPTY
Trig on TIMER1_CC0.
Definition: dmadrv.h:406
#define DMAREQ_TIMER1_CC0
#define DMAREQ_USART0_TXEMPTY
Trig on CRYPTO_DATA0RD.
Definition: dmadrv.h:328
#define LDMA_CH_REQSEL_SIGSEL_I2C0TXBL
#define DMAREQ_USART0_TXBL
Trig on LEUART0_TXEMPTY.
Definition: dmadrv.h:355
Trig on LEUART0_TXBL.
Definition: dmadrv.h:352
Ecode_t DMADRV_PeripheralMemoryPingPong(unsigned int channelId, DMADRV_PeripheralSignal_t peripheralSignal, void *dst0, void *dst1, void *src, bool dstInc, int len, DMADRV_DataSize_t size, DMADRV_Callback_t callback, void *cbUserParam)
Start a peripheral to memory ping-pong DMA transfer.
Definition: dmadrv.c:602
#define LDMA_CH_REQSEL_SIGSEL_USART1RXDATAVRIGHT
Trig on LEUART0_RXDATAV.
Definition: dmadrv.h:349
#define DMAREQ_ADC0_SCAN
Direct memory access (DMA) API.
#define LDMA_CH_REQSEL_SIGSEL_TIMER1CC0
#define LDMA_CH_REQSEL_SIGSEL_ADC0SCAN
Trig on CRYPTO_DATA1WR.
Definition: dmadrv.h:340
Ecode_t DMADRV_FreeChannel(unsigned int channelId)
Free an allocate (reserved) DMA channel.
Definition: dmadrv.c:223
Trig on TIMER1_CC1.
Definition: dmadrv.h:409