33 #ifndef __SILICON_LABS_EM_LDMA_H__
34 #define __SILICON_LABS_EM_LDMA_H__
38 #if defined( LDMA_PRESENT ) && ( LDMA_COUNT == 1 )
67 ldmaCtrlBlockSizeUnit1 = _LDMA_CH_CTRL_BLOCKSIZE_UNIT1,
68 ldmaCtrlBlockSizeUnit2 = _LDMA_CH_CTRL_BLOCKSIZE_UNIT2,
69 ldmaCtrlBlockSizeUnit3 = _LDMA_CH_CTRL_BLOCKSIZE_UNIT3,
70 ldmaCtrlBlockSizeUnit4 = _LDMA_CH_CTRL_BLOCKSIZE_UNIT4,
71 ldmaCtrlBlockSizeUnit6 = _LDMA_CH_CTRL_BLOCKSIZE_UNIT6,
72 ldmaCtrlBlockSizeUnit8 = _LDMA_CH_CTRL_BLOCKSIZE_UNIT8,
73 ldmaCtrlBlockSizeUnit16 = _LDMA_CH_CTRL_BLOCKSIZE_UNIT16,
74 ldmaCtrlBlockSizeUnit32 = _LDMA_CH_CTRL_BLOCKSIZE_UNIT32,
75 ldmaCtrlBlockSizeUnit64 = _LDMA_CH_CTRL_BLOCKSIZE_UNIT64,
76 ldmaCtrlBlockSizeUnit128 = _LDMA_CH_CTRL_BLOCKSIZE_UNIT128,
77 ldmaCtrlBlockSizeUnit256 = _LDMA_CH_CTRL_BLOCKSIZE_UNIT256,
78 ldmaCtrlBlockSizeUnit512 = _LDMA_CH_CTRL_BLOCKSIZE_UNIT512,
79 ldmaCtrlBlockSizeUnit1024 = _LDMA_CH_CTRL_BLOCKSIZE_UNIT1024,
80 ldmaCtrlBlockSizeAll = _LDMA_CH_CTRL_BLOCKSIZE_ALL
81 } LDMA_CtrlBlockSize_t;
86 ldmaCtrlStructTypeXfer = _LDMA_CH_CTRL_STRUCTTYPE_TRANSFER,
87 ldmaCtrlStructTypeSync = _LDMA_CH_CTRL_STRUCTTYPE_SYNCHRONIZE,
88 ldmaCtrlStructTypeWrite = _LDMA_CH_CTRL_STRUCTTYPE_WRITE
89 } LDMA_CtrlStructType_t;
94 ldmaCtrlReqModeBlock = _LDMA_CH_CTRL_REQMODE_BLOCK,
95 ldmaCtrlReqModeAll = _LDMA_CH_CTRL_REQMODE_ALL
101 ldmaCtrlSrcIncOne = _LDMA_CH_CTRL_SRCINC_ONE,
102 ldmaCtrlSrcIncTwo = _LDMA_CH_CTRL_SRCINC_TWO,
103 ldmaCtrlSrcIncFour = _LDMA_CH_CTRL_SRCINC_FOUR,
104 ldmaCtrlSrcIncNone = _LDMA_CH_CTRL_SRCINC_NONE
110 ldmaCtrlSizeByte = _LDMA_CH_CTRL_SIZE_BYTE,
111 ldmaCtrlSizeHalf = _LDMA_CH_CTRL_SIZE_HALFWORD,
112 ldmaCtrlSizeWord = _LDMA_CH_CTRL_SIZE_WORD
118 ldmaCtrlDstIncOne = _LDMA_CH_CTRL_DSTINC_ONE,
119 ldmaCtrlDstIncTwo = _LDMA_CH_CTRL_DSTINC_TWO,
120 ldmaCtrlDstIncFour = _LDMA_CH_CTRL_DSTINC_FOUR,
121 ldmaCtrlDstIncNone = _LDMA_CH_CTRL_DSTINC_NONE
127 ldmaCtrlSrcAddrModeAbs = _LDMA_CH_CTRL_SRCMODE_ABSOLUTE,
128 ldmaCtrlSrcAddrModeRel = _LDMA_CH_CTRL_SRCMODE_RELATIVE
129 } LDMA_CtrlSrcAddrMode_t;
134 ldmaCtrlDstAddrModeAbs = _LDMA_CH_CTRL_DSTMODE_ABSOLUTE,
135 ldmaCtrlDstAddrModeRel = _LDMA_CH_CTRL_DSTMODE_RELATIVE
136 } LDMA_CtrlDstAddrMode_t;
141 ldmaLinkModeAbs = _LDMA_CH_LINK_LINKMODE_ABSOLUTE,
142 ldmaLinkModeRel = _LDMA_CH_LINK_LINKMODE_RELATIVE
148 ldmaCfgArbSlotsAs1 = _LDMA_CH_CFG_ARBSLOTS_ONE,
149 ldmaCfgArbSlotsAs2 = _LDMA_CH_CFG_ARBSLOTS_TWO,
150 ldmaCfgArbSlotsAs4 = _LDMA_CH_CFG_ARBSLOTS_FOUR,
151 ldmaCfgArbSlotsAs8 = _LDMA_CH_CFG_ARBSLOTS_EIGHT
152 } LDMA_CfgArbSlots_t;
157 ldmaCfgSrcIncSignPos = _LDMA_CH_CFG_SRCINCSIGN_POSITIVE,
158 ldmaCfgSrcIncSignNeg = _LDMA_CH_CFG_SRCINCSIGN_NEGATIVE
159 } LDMA_CfgSrcIncSign_t;
164 ldmaCfgDstIncSignPos = _LDMA_CH_CFG_DSTINCSIGN_POSITIVE,
165 ldmaCfgDstIncSignNeg = _LDMA_CH_CFG_DSTINCSIGN_NEGATIVE
166 } LDMA_CfgDstIncSign_t;
171 ldmaPeripheralSignal_NONE = LDMA_CH_REQSEL_SOURCESEL_NONE,
172 #if defined( LDMA_CH_REQSEL_SIGSEL_ADC0SCAN )
173 ldmaPeripheralSignal_ADC0_SCAN = LDMA_CH_REQSEL_SIGSEL_ADC0SCAN | LDMA_CH_REQSEL_SOURCESEL_ADC0,
175 #if defined( LDMA_CH_REQSEL_SIGSEL_ADC0SINGLE )
176 ldmaPeripheralSignal_ADC0_SINGLE = LDMA_CH_REQSEL_SIGSEL_ADC0SINGLE | LDMA_CH_REQSEL_SOURCESEL_ADC0,
178 #if defined( LDMA_CH_REQSEL_SIGSEL_AGCRSSI )
179 ldmaPeripheralSignal_AGC_RSSI = LDMA_CH_REQSEL_SIGSEL_AGCRSSI | LDMA_CH_REQSEL_SOURCESEL_AGC,
181 #if defined( LDMA_CH_REQSEL_SIGSEL_CRYPTODATA0RD )
182 ldmaPeripheralSignal_CRYPTO_DATA0RD = LDMA_CH_REQSEL_SIGSEL_CRYPTODATA0RD | LDMA_CH_REQSEL_SOURCESEL_CRYPTO,
184 #if defined( LDMA_CH_REQSEL_SIGSEL_CRYPTODATA0WR )
185 ldmaPeripheralSignal_CRYPTO_DATA0WR = LDMA_CH_REQSEL_SIGSEL_CRYPTODATA0WR | LDMA_CH_REQSEL_SOURCESEL_CRYPTO,
187 #if defined( LDMA_CH_REQSEL_SIGSEL_CRYPTODATA0XWR )
188 ldmaPeripheralSignal_CRYPTO_DATA0XWR = LDMA_CH_REQSEL_SIGSEL_CRYPTODATA0XWR | LDMA_CH_REQSEL_SOURCESEL_CRYPTO,
190 #if defined( LDMA_CH_REQSEL_SIGSEL_CRYPTODATA1RD )
191 ldmaPeripheralSignal_CRYPTO_DATA1RD = LDMA_CH_REQSEL_SIGSEL_CRYPTODATA1RD | LDMA_CH_REQSEL_SOURCESEL_CRYPTO,
193 #if defined( LDMA_CH_REQSEL_SIGSEL_CRYPTODATA1WR )
194 ldmaPeripheralSignal_CRYPTO_DATA1WR = LDMA_CH_REQSEL_SIGSEL_CRYPTODATA1WR | LDMA_CH_REQSEL_SOURCESEL_CRYPTO,
196 #if defined( LDMA_CH_REQSEL_SIGSEL_I2C0RXDATAV )
197 ldmaPeripheralSignal_I2C0_RXDATAV = LDMA_CH_REQSEL_SIGSEL_I2C0RXDATAV | LDMA_CH_REQSEL_SOURCESEL_I2C0,
199 #if defined( LDMA_CH_REQSEL_SIGSEL_I2C0TXBL )
200 ldmaPeripheralSignal_I2C0_TXBL = LDMA_CH_REQSEL_SIGSEL_I2C0TXBL | LDMA_CH_REQSEL_SOURCESEL_I2C0,
202 #if defined( LDMA_CH_REQSEL_SIGSEL_LEUART0RXDATAV )
203 ldmaPeripheralSignal_LEUART0_RXDATAV = LDMA_CH_REQSEL_SIGSEL_LEUART0RXDATAV | LDMA_CH_REQSEL_SOURCESEL_LEUART0,
205 #if defined( LDMA_CH_REQSEL_SIGSEL_LEUART0TXBL )
206 ldmaPeripheralSignal_LEUART0_TXBL = LDMA_CH_REQSEL_SIGSEL_LEUART0TXBL | LDMA_CH_REQSEL_SOURCESEL_LEUART0,
208 #if defined( LDMA_CH_REQSEL_SIGSEL_LEUART0TXEMPTY )
209 ldmaPeripheralSignal_LEUART0_TXEMPTY = LDMA_CH_REQSEL_SIGSEL_LEUART0TXEMPTY | LDMA_CH_REQSEL_SOURCESEL_LEUART0,
211 #if defined( LDMA_CH_REQSEL_SIGSEL_MODEMDEBUG )
212 ldmaPeripheralSignal_MODEM_DEBUG = LDMA_CH_REQSEL_SIGSEL_MODEMDEBUG | LDMA_CH_REQSEL_SOURCESEL_MODEM,
214 #if defined( LDMA_CH_REQSEL_SIGSEL_MSCWDATA )
215 ldmaPeripheralSignal_MSC_WDATA = LDMA_CH_REQSEL_SIGSEL_MSCWDATA | LDMA_CH_REQSEL_SOURCESEL_MSC,
217 #if defined( LDMA_CH_REQSEL_SIGSEL_PROTIMERBOF )
218 ldmaPeripheralSignal_PROTIMER_BOF = LDMA_CH_REQSEL_SIGSEL_PROTIMERBOF | LDMA_CH_REQSEL_SOURCESEL_PROTIMER,
220 #if defined( LDMA_CH_REQSEL_SIGSEL_PROTIMERCC0 )
221 ldmaPeripheralSignal_PROTIMER_CC0 = LDMA_CH_REQSEL_SIGSEL_PROTIMERCC0 | LDMA_CH_REQSEL_SOURCESEL_PROTIMER,
223 #if defined( LDMA_CH_REQSEL_SIGSEL_PROTIMERCC1 )
224 ldmaPeripheralSignal_PROTIMER_CC1 = LDMA_CH_REQSEL_SIGSEL_PROTIMERCC1 | LDMA_CH_REQSEL_SOURCESEL_PROTIMER,
226 #if defined( LDMA_CH_REQSEL_SIGSEL_PROTIMERCC2 )
227 ldmaPeripheralSignal_PROTIMER_CC2 = LDMA_CH_REQSEL_SIGSEL_PROTIMERCC2 | LDMA_CH_REQSEL_SOURCESEL_PROTIMER,
229 #if defined( LDMA_CH_REQSEL_SIGSEL_PROTIMERCC3 )
230 ldmaPeripheralSignal_PROTIMER_CC3 = LDMA_CH_REQSEL_SIGSEL_PROTIMERCC3 | LDMA_CH_REQSEL_SOURCESEL_PROTIMER,
232 #if defined( LDMA_CH_REQSEL_SIGSEL_PROTIMERCC4 )
233 ldmaPeripheralSignal_PROTIMER_CC4 = LDMA_CH_REQSEL_SIGSEL_PROTIMERCC4 | LDMA_CH_REQSEL_SOURCESEL_PROTIMER,
235 #if defined( LDMA_CH_REQSEL_SIGSEL_PROTIMERPOF )
236 ldmaPeripheralSignal_PROTIMER_POF = LDMA_CH_REQSEL_SIGSEL_PROTIMERPOF | LDMA_CH_REQSEL_SOURCESEL_PROTIMER,
238 #if defined( LDMA_CH_REQSEL_SIGSEL_PROTIMERWOF )
239 ldmaPeripheralSignal_PROTIMER_WOF = LDMA_CH_REQSEL_SIGSEL_PROTIMERWOF | LDMA_CH_REQSEL_SOURCESEL_PROTIMER,
241 #if defined( LDMA_CH_REQSEL_SIGSEL_PRSREQ0 )
242 ldmaPeripheralSignal_PRS_REQ0 = LDMA_CH_REQSEL_SIGSEL_PRSREQ0 | LDMA_CH_REQSEL_SOURCESEL_PRS,
244 #if defined( LDMA_CH_REQSEL_SIGSEL_PRSREQ1 )
245 ldmaPeripheralSignal_PRS_REQ1 = LDMA_CH_REQSEL_SIGSEL_PRSREQ1 | LDMA_CH_REQSEL_SOURCESEL_PRS,
247 #if defined( LDMA_CH_REQSEL_SIGSEL_TIMER0CC0 )
248 ldmaPeripheralSignal_TIMER0_CC0 = LDMA_CH_REQSEL_SIGSEL_TIMER0CC0 | LDMA_CH_REQSEL_SOURCESEL_TIMER0,
250 #if defined( LDMA_CH_REQSEL_SIGSEL_TIMER0CC1 )
251 ldmaPeripheralSignal_TIMER0_CC1 = LDMA_CH_REQSEL_SIGSEL_TIMER0CC1 | LDMA_CH_REQSEL_SOURCESEL_TIMER0,
253 #if defined( LDMA_CH_REQSEL_SIGSEL_TIMER0CC2 )
254 ldmaPeripheralSignal_TIMER0_CC2 = LDMA_CH_REQSEL_SIGSEL_TIMER0CC2 | LDMA_CH_REQSEL_SOURCESEL_TIMER0,
256 #if defined( LDMA_CH_REQSEL_SIGSEL_TIMER0UFOF )
257 ldmaPeripheralSignal_TIMER0_UFOF = LDMA_CH_REQSEL_SIGSEL_TIMER0UFOF | LDMA_CH_REQSEL_SOURCESEL_TIMER0,
259 #if defined( LDMA_CH_REQSEL_SIGSEL_TIMER1CC0 )
260 ldmaPeripheralSignal_TIMER1_CC0 = LDMA_CH_REQSEL_SIGSEL_TIMER1CC0 | LDMA_CH_REQSEL_SOURCESEL_TIMER1,
262 #if defined( LDMA_CH_REQSEL_SIGSEL_TIMER1CC1 )
263 ldmaPeripheralSignal_TIMER1_CC1 = LDMA_CH_REQSEL_SIGSEL_TIMER1CC1 | LDMA_CH_REQSEL_SOURCESEL_TIMER1,
265 #if defined( LDMA_CH_REQSEL_SIGSEL_TIMER1CC2 )
266 ldmaPeripheralSignal_TIMER1_CC2 = LDMA_CH_REQSEL_SIGSEL_TIMER1CC2 | LDMA_CH_REQSEL_SOURCESEL_TIMER1,
268 #if defined( LDMA_CH_REQSEL_SIGSEL_TIMER1CC3 )
269 ldmaPeripheralSignal_TIMER1_CC3 = LDMA_CH_REQSEL_SIGSEL_TIMER1CC3 | LDMA_CH_REQSEL_SOURCESEL_TIMER1,
271 #if defined( LDMA_CH_REQSEL_SIGSEL_TIMER1UFOF )
272 ldmaPeripheralSignal_TIMER1_UFOF = LDMA_CH_REQSEL_SIGSEL_TIMER1UFOF | LDMA_CH_REQSEL_SOURCESEL_TIMER1,
274 #if defined( LDMA_CH_REQSEL_SIGSEL_USART0RXDATAV )
275 ldmaPeripheralSignal_USART0_RXDATAV = LDMA_CH_REQSEL_SIGSEL_USART0RXDATAV | LDMA_CH_REQSEL_SOURCESEL_USART0,
277 #if defined( LDMA_CH_REQSEL_SIGSEL_USART0TXBL )
278 ldmaPeripheralSignal_USART0_TXBL = LDMA_CH_REQSEL_SIGSEL_USART0TXBL | LDMA_CH_REQSEL_SOURCESEL_USART0,
280 #if defined( LDMA_CH_REQSEL_SIGSEL_USART0TXEMPTY )
281 ldmaPeripheralSignal_USART0_TXEMPTY = LDMA_CH_REQSEL_SIGSEL_USART0TXEMPTY | LDMA_CH_REQSEL_SOURCESEL_USART0,
283 #if defined( LDMA_CH_REQSEL_SIGSEL_USART1RXDATAV )
284 ldmaPeripheralSignal_USART1_RXDATAV = LDMA_CH_REQSEL_SIGSEL_USART1RXDATAV | LDMA_CH_REQSEL_SOURCESEL_USART1,
286 #if defined( LDMA_CH_REQSEL_SIGSEL_USART1RXDATAVRIGHT )
287 ldmaPeripheralSignal_USART1_RXDATAVRIGHT = LDMA_CH_REQSEL_SIGSEL_USART1RXDATAVRIGHT | LDMA_CH_REQSEL_SOURCESEL_USART1,
289 #if defined( LDMA_CH_REQSEL_SIGSEL_USART1TXBL )
290 ldmaPeripheralSignal_USART1_TXBL = LDMA_CH_REQSEL_SIGSEL_USART1TXBL | LDMA_CH_REQSEL_SOURCESEL_USART1,
292 #if defined( LDMA_CH_REQSEL_SIGSEL_USART1TXBLRIGHT )
293 ldmaPeripheralSignal_USART1_TXBLRIGHT = LDMA_CH_REQSEL_SIGSEL_USART1TXBLRIGHT | LDMA_CH_REQSEL_SOURCESEL_USART1,
295 #if defined( LDMA_CH_REQSEL_SIGSEL_USART1TXEMPTY )
296 ldmaPeripheralSignal_USART1_TXEMPTY = LDMA_CH_REQSEL_SIGSEL_USART1TXEMPTY | LDMA_CH_REQSEL_SOURCESEL_USART1
298 } LDMA_PeripheralSignal_t;
322 uint32_t structType : 2;
323 uint32_t reserved0 : 1;
324 uint32_t structReq : 1;
325 uint32_t xferCnt : 11;
326 uint32_t byteSwap : 1;
327 uint32_t blockSize : 4;
328 uint32_t doneIfs : 1;
329 uint32_t reqMode : 1;
330 uint32_t decLoopCnt : 1;
331 uint32_t ignoreSrec : 1;
335 uint32_t srcAddrMode: 1;
336 uint32_t dstAddrMode: 1;
341 uint32_t linkMode : 1;
343 int32_t linkAddr : 30;
351 uint32_t structType : 2;
352 uint32_t reserved0 : 1;
353 uint32_t structReq : 1;
354 uint32_t xferCnt : 11;
355 uint32_t byteSwap : 1;
356 uint32_t blockSize : 4;
357 uint32_t doneIfs : 1;
358 uint32_t reqMode : 1;
359 uint32_t decLoopCnt : 1;
360 uint32_t ignoreSrec : 1;
364 uint32_t srcAddrMode: 1;
365 uint32_t dstAddrMode: 1;
367 uint32_t syncSet : 8;
368 uint32_t syncClr : 8;
369 uint32_t reserved3 : 16;
370 uint32_t matchVal : 8;
371 uint32_t matchEn : 8;
372 uint32_t reserved4 : 16;
374 uint32_t linkMode : 1;
376 int32_t linkAddr : 30;
382 uint32_t structType : 2;
383 uint32_t reserved0 : 1;
384 uint32_t structReq : 1;
385 uint32_t xferCnt : 11;
386 uint32_t byteSwap : 1;
387 uint32_t blockSize : 4;
388 uint32_t doneIfs : 1;
389 uint32_t reqMode : 1;
390 uint32_t decLoopCnt : 1;
391 uint32_t ignoreSrec : 1;
395 uint32_t srcAddrMode: 1;
396 uint32_t dstAddrMode: 1;
401 uint32_t linkMode : 1;
403 int32_t linkAddr : 30;
410 uint8_t ldmaInitCtrlNumFixed;
411 uint8_t ldmaInitCtrlSyncPrsClrEn;
412 uint8_t ldmaInitCtrlSyncPrsSetEn;
413 uint8_t ldmaInitIrqPriority;
425 uint8_t ldmaCtrlSyncPrsClrOff;
426 uint8_t ldmaCtrlSyncPrsClrOn;
427 uint8_t ldmaCtrlSyncPrsSetOff;
428 uint8_t ldmaCtrlSyncPrsSetOn;
431 uint8_t ldmaCfgArbSlots;
432 uint8_t ldmaCfgSrcIncSign;
433 uint8_t ldmaCfgDstIncSign;
435 } LDMA_TransferCfg_t;
444 #define LDMA_INIT_DEFAULT \
446 .ldmaInitCtrlNumFixed = _LDMA_CTRL_NUMFIXED_DEFAULT, \
447 .ldmaInitCtrlSyncPrsClrEn = 0, \
448 .ldmaInitCtrlSyncPrsSetEn = 0, \
449 .ldmaInitIrqPriority = 3 \
456 #define LDMA_TRANSFER_CFG_MEMORY() \
459 false, false, ldmaCfgArbSlotsAs1, \
460 ldmaCfgSrcIncSignPos, ldmaCfgDstIncSignPos, 0 \
467 #define LDMA_TRANSFER_CFG_MEMORY_LOOP( loopCnt) \
470 false, false, ldmaCfgArbSlotsAs1, \
471 ldmaCfgSrcIncSignPos, ldmaCfgDstIncSignPos, \
479 #define LDMA_TRANSFER_CFG_PERIPHERAL( signal ) \
481 signal, 0, 0, 0, 0, \
482 false, false, ldmaCfgArbSlotsAs1, \
483 ldmaCfgSrcIncSignPos, ldmaCfgDstIncSignPos, 0 \
490 #define LDMA_TRANSFER_CFG_PERIPHERAL_LOOP( signal, loopCnt ) \
492 signal, 0, 0, 0, 0, \
493 false, false, ldmaCfgArbSlotsAs1, \
494 ldmaCfgSrcIncSignPos, ldmaCfgDstIncSignPos, loopCnt \
504 #define LDMA_DESCRIPTOR_SINGLE_M2M_WORD( src, dest, count ) \
508 .structType = ldmaCtrlStructTypeXfer, \
510 .xferCnt = ( count ) - 1, \
512 .blockSize = ldmaCtrlBlockSizeUnit1, \
514 .reqMode = ldmaCtrlReqModeAll, \
517 .srcInc = ldmaCtrlSrcIncOne, \
518 .size = ldmaCtrlSizeWord, \
519 .dstInc = ldmaCtrlDstIncOne, \
520 .srcAddrMode = ldmaCtrlSrcAddrModeAbs, \
521 .dstAddrMode = ldmaCtrlDstAddrModeAbs, \
522 .srcAddr = (uint32_t)(src), \
523 .dstAddr = (uint32_t)(dest), \
537 #define LDMA_DESCRIPTOR_SINGLE_M2M_HALF( src, dest, count ) \
541 .structType = ldmaCtrlStructTypeXfer, \
543 .xferCnt = ( count ) - 1, \
545 .blockSize = ldmaCtrlBlockSizeUnit1, \
547 .reqMode = ldmaCtrlReqModeAll, \
550 .srcInc = ldmaCtrlSrcIncOne, \
551 .size = ldmaCtrlSizeHalf, \
552 .dstInc = ldmaCtrlDstIncOne, \
553 .srcAddrMode = ldmaCtrlSrcAddrModeAbs, \
554 .dstAddrMode = ldmaCtrlDstAddrModeAbs, \
555 .srcAddr = (uint32_t)(src), \
556 .dstAddr = (uint32_t)(dest), \
570 #define LDMA_DESCRIPTOR_SINGLE_M2M_BYTE( src, dest, count ) \
574 .structType = ldmaCtrlStructTypeXfer, \
576 .xferCnt = ( count ) - 1, \
578 .blockSize = ldmaCtrlBlockSizeUnit1, \
580 .reqMode = ldmaCtrlReqModeAll, \
583 .srcInc = ldmaCtrlSrcIncOne, \
584 .size = ldmaCtrlSizeByte, \
585 .dstInc = ldmaCtrlDstIncOne, \
586 .srcAddrMode = ldmaCtrlSrcAddrModeAbs, \
587 .dstAddrMode = ldmaCtrlDstAddrModeAbs, \
588 .srcAddr = (uint32_t)(src), \
589 .dstAddr = (uint32_t)(dest), \
608 #define LDMA_DESCRIPTOR_LINKABS_M2M_WORD( src, dest, count ) \
612 .structType = ldmaCtrlStructTypeXfer, \
614 .xferCnt = ( count ) - 1, \
616 .blockSize = ldmaCtrlBlockSizeUnit1, \
618 .reqMode = ldmaCtrlReqModeAll, \
621 .srcInc = ldmaCtrlSrcIncOne, \
622 .size = ldmaCtrlSizeWord, \
623 .dstInc = ldmaCtrlDstIncOne, \
624 .srcAddrMode = ldmaCtrlSrcAddrModeAbs, \
625 .dstAddrMode = ldmaCtrlDstAddrModeAbs, \
626 .srcAddr = (uint32_t)(src), \
627 .dstAddr = (uint32_t)(dest), \
628 .linkMode = ldmaLinkModeAbs, \
646 #define LDMA_DESCRIPTOR_LINKABS_M2M_HALF( src, dest, count ) \
650 .structType = ldmaCtrlStructTypeXfer, \
652 .xferCnt = ( count ) - 1, \
654 .blockSize = ldmaCtrlBlockSizeUnit1, \
656 .reqMode = ldmaCtrlReqModeAll, \
659 .srcInc = ldmaCtrlSrcIncOne, \
660 .size = ldmaCtrlSizeHalf, \
661 .dstInc = ldmaCtrlDstIncOne, \
662 .srcAddrMode = ldmaCtrlSrcAddrModeAbs, \
663 .dstAddrMode = ldmaCtrlDstAddrModeAbs, \
664 .srcAddr = (uint32_t)(src), \
665 .dstAddr = (uint32_t)(dest), \
666 .linkMode = ldmaLinkModeAbs, \
684 #define LDMA_DESCRIPTOR_LINKABS_M2M_BYTE( src, dest, count ) \
688 .structType = ldmaCtrlStructTypeXfer, \
690 .xferCnt = ( count ) - 1, \
692 .blockSize = ldmaCtrlBlockSizeUnit1, \
694 .reqMode = ldmaCtrlReqModeAll, \
697 .srcInc = ldmaCtrlSrcIncOne, \
698 .size = ldmaCtrlSizeByte, \
699 .dstInc = ldmaCtrlDstIncOne, \
700 .srcAddrMode = ldmaCtrlSrcAddrModeAbs, \
701 .dstAddrMode = ldmaCtrlDstAddrModeAbs, \
702 .srcAddr = (uint32_t)(src), \
703 .dstAddr = (uint32_t)(dest), \
704 .linkMode = ldmaLinkModeAbs, \
728 #define LDMA_DESCRIPTOR_LINKREL_M2M_WORD( src, dest, count, linkjmp ) \
732 .structType = ldmaCtrlStructTypeXfer, \
734 .xferCnt = ( count ) - 1, \
736 .blockSize = ldmaCtrlBlockSizeUnit1, \
738 .reqMode = ldmaCtrlReqModeAll, \
741 .srcInc = ldmaCtrlSrcIncOne, \
742 .size = ldmaCtrlSizeWord, \
743 .dstInc = ldmaCtrlDstIncOne, \
744 .srcAddrMode = ldmaCtrlSrcAddrModeAbs, \
745 .dstAddrMode = ldmaCtrlDstAddrModeAbs, \
746 .srcAddr = (uint32_t)(src), \
747 .dstAddr = (uint32_t)(dest), \
748 .linkMode = ldmaLinkModeRel, \
750 .linkAddr = ( linkjmp ) * 4 \
772 #define LDMA_DESCRIPTOR_LINKREL_M2M_HALF( src, dest, count, linkjmp ) \
776 .structType = ldmaCtrlStructTypeXfer, \
778 .xferCnt = ( count ) - 1, \
780 .blockSize = ldmaCtrlBlockSizeUnit1, \
782 .reqMode = ldmaCtrlReqModeAll, \
785 .srcInc = ldmaCtrlSrcIncOne, \
786 .size = ldmaCtrlSizeHalf, \
787 .dstInc = ldmaCtrlDstIncOne, \
788 .srcAddrMode = ldmaCtrlSrcAddrModeAbs, \
789 .dstAddrMode = ldmaCtrlDstAddrModeAbs, \
790 .srcAddr = (uint32_t)(src), \
791 .dstAddr = (uint32_t)(dest), \
792 .linkMode = ldmaLinkModeRel, \
794 .linkAddr = ( linkjmp ) * 4 \
816 #define LDMA_DESCRIPTOR_LINKREL_M2M_BYTE( src, dest, count, linkjmp ) \
820 .structType = ldmaCtrlStructTypeXfer, \
822 .xferCnt = ( count ) - 1, \
824 .blockSize = ldmaCtrlBlockSizeUnit1, \
826 .reqMode = ldmaCtrlReqModeAll, \
829 .srcInc = ldmaCtrlSrcIncOne, \
830 .size = ldmaCtrlSizeByte, \
831 .dstInc = ldmaCtrlDstIncOne, \
832 .srcAddrMode = ldmaCtrlSrcAddrModeAbs, \
833 .dstAddrMode = ldmaCtrlDstAddrModeAbs, \
834 .srcAddr = (uint32_t)(src), \
835 .dstAddr = (uint32_t)(dest), \
836 .linkMode = ldmaLinkModeRel, \
838 .linkAddr = ( linkjmp ) * 4 \
849 #define LDMA_DESCRIPTOR_SINGLE_P2M_BYTE( src, dest, count ) \
853 .structType = ldmaCtrlStructTypeXfer, \
855 .xferCnt = ( count ) - 1, \
857 .blockSize = ldmaCtrlBlockSizeUnit1, \
859 .reqMode = ldmaCtrlReqModeBlock, \
862 .srcInc = ldmaCtrlSrcIncNone, \
863 .size = ldmaCtrlSizeByte, \
864 .dstInc = ldmaCtrlDstIncOne, \
865 .srcAddrMode = ldmaCtrlSrcAddrModeAbs, \
866 .dstAddrMode = ldmaCtrlDstAddrModeAbs, \
867 .srcAddr = (uint32_t)(src), \
868 .dstAddr = (uint32_t)(dest), \
882 #define LDMA_DESCRIPTOR_SINGLE_M2P_BYTE( src, dest, count ) \
886 .structType = ldmaCtrlStructTypeXfer, \
888 .xferCnt = ( count ) - 1, \
890 .blockSize = ldmaCtrlBlockSizeUnit1, \
892 .reqMode = ldmaCtrlReqModeBlock, \
895 .srcInc = ldmaCtrlSrcIncOne, \
896 .size = ldmaCtrlSizeByte, \
897 .dstInc = ldmaCtrlDstIncNone, \
898 .srcAddrMode = ldmaCtrlSrcAddrModeAbs, \
899 .dstAddrMode = ldmaCtrlDstAddrModeAbs, \
900 .srcAddr = (uint32_t)(src), \
901 .dstAddr = (uint32_t)(dest), \
920 #define LDMA_DESCRIPTOR_LINKREL_P2M_BYTE( src, dest, count, linkjmp ) \
924 .structType = ldmaCtrlStructTypeXfer, \
926 .xferCnt = ( count ) - 1, \
928 .blockSize = ldmaCtrlBlockSizeUnit1, \
930 .reqMode = ldmaCtrlReqModeBlock, \
933 .srcInc = ldmaCtrlSrcIncNone, \
934 .size = ldmaCtrlSizeByte, \
935 .dstInc = ldmaCtrlDstIncOne, \
936 .srcAddrMode = ldmaCtrlSrcAddrModeAbs, \
937 .dstAddrMode = ldmaCtrlDstAddrModeAbs, \
938 .srcAddr = (uint32_t)(src), \
939 .dstAddr = (uint32_t)(dest), \
940 .linkMode = ldmaLinkModeRel, \
942 .linkAddr = ( linkjmp ) * 4 \
958 #define LDMA_DESCRIPTOR_LINKREL_M2P_BYTE( src, dest, count, linkjmp ) \
962 .structType = ldmaCtrlStructTypeXfer, \
964 .xferCnt = ( count ) - 1, \
966 .blockSize = ldmaCtrlBlockSizeUnit1, \
968 .reqMode = ldmaCtrlReqModeBlock, \
971 .srcInc = ldmaCtrlSrcIncOne, \
972 .size = ldmaCtrlSizeByte, \
973 .dstInc = ldmaCtrlDstIncNone, \
974 .srcAddrMode = ldmaCtrlSrcAddrModeAbs, \
975 .dstAddrMode = ldmaCtrlDstAddrModeAbs, \
976 .srcAddr = (uint32_t)(src), \
977 .dstAddr = (uint32_t)(dest), \
978 .linkMode = ldmaLinkModeRel, \
980 .linkAddr = ( linkjmp ) * 4 \
990 #define LDMA_DESCRIPTOR_SINGLE_WRITE( value, address ) \
994 .structType = ldmaCtrlStructTypeWrite, \
1008 .immVal = (value), \
1009 .dstAddr = (uint32_t)(address), \
1027 #define LDMA_DESCRIPTOR_LINKABS_WRITE( value, address ) \
1031 .structType = ldmaCtrlStructTypeWrite, \
1045 .immVal = (value), \
1046 .dstAddr = (uint32_t)(address), \
1047 .linkMode = ldmaLinkModeAbs, \
1064 #define LDMA_DESCRIPTOR_LINKREL_WRITE( value, address, linkjmp ) \
1068 .structType = ldmaCtrlStructTypeWrite, \
1082 .immVal = (value), \
1083 .dstAddr = (uint32_t)(address), \
1084 .linkMode = ldmaLinkModeRel, \
1086 .linkAddr = ( linkjmp ) * 4 \
1098 #define LDMA_DESCRIPTOR_SINGLE_SYNC( set, clr, matchValue, matchEnable ) \
1102 .structType = ldmaCtrlStructTypeSync, \
1118 .matchVal = (matchValue), \
1119 .matchEn = (matchEnable), \
1139 #define LDMA_DESCRIPTOR_LINKABS_SYNC( set, clr, matchValue, matchEnable ) \
1143 .structType = ldmaCtrlStructTypeSync, \
1159 .matchVal = (matchValue), \
1160 .matchEn = (matchEnable), \
1161 .linkMode = ldmaLinkModeAbs, \
1180 #define LDMA_DESCRIPTOR_LINKREL_SYNC( set, clr, matchValue, matchEnable, linkjmp ) \
1184 .structType = ldmaCtrlStructTypeSync, \
1200 .matchVal = (matchValue), \
1201 .matchEn = (matchEnable), \
1202 .linkMode = ldmaLinkModeRel, \
1204 .linkAddr = ( linkjmp ) * 4 \
1212 void LDMA_DeInit(
void );
1213 void LDMA_Init( LDMA_Init_t *init );
1214 void LDMA_StartTransfer(
int ch,
1215 LDMA_TransferCfg_t *transfer,
1216 LDMA_Descriptor_t *descriptor );
1217 void LDMA_StopTransfer(
int ch );
1218 bool LDMA_TransferDone(
int ch );
1219 uint32_t LDMA_TransferRemainingCount(
int ch );
1230 __STATIC_INLINE
void LDMA_IntClear(uint32_t flags)
1244 __STATIC_INLINE
void LDMA_IntDisable(uint32_t flags)
1246 LDMA->IEN &= ~flags;
1263 __STATIC_INLINE
void LDMA_IntEnable(uint32_t flags)
1280 __STATIC_INLINE uint32_t LDMA_IntGet(
void)
1300 __STATIC_INLINE uint32_t LDMA_IntGetEnabled(
void)
1305 return LDMA->IF & ien;
1317 __STATIC_INLINE
void LDMA_IntSet(uint32_t flags)
CMSIS Cortex-M Peripheral Access Layer for Silicon Laboratories microcontroller devices.