35 #if defined( LDMA_PRESENT ) && ( LDMA_COUNT == 1 )
205 #if defined( LDMA_IRQ_HANDLER_TEMPLATE )
210 void LDMA_IRQHandler(
void )
212 uint32_t pending, chnum, chmask;
216 pending &=
LDMA->IEN;
227 for ( chnum = 0, chmask = 1;
229 chnum++, chmask <<= 1 )
231 if ( pending & chmask )
265 EFM_ASSERT( init != NULL );
286 LDMA->IFC = 0xFFFFFFFF;
314 uint32_t chMask = 1 << ch;
316 EFM_ASSERT( ch < DMA_CHAN_COUNT );
317 EFM_ASSERT( transfer != NULL );
340 LDMA->CH[ ch ].LOOP =
362 LDMA->REQDIS |= chMask;
367 LDMA->DBGHALT |= chMask;
397 LDMA->LINKLOAD = chMask;
416 uint32_t chMask = 1 << ch;
418 EFM_ASSERT( ch < DMA_CHAN_COUNT );
422 LDMA->IEN &= ~chMask;
441 uint32_t chMask = 1 << ch;
443 EFM_ASSERT( ch < DMA_CHAN_COUNT );
446 if ( ( (
LDMA->CHEN & chMask ) == 0 )
447 && ( (
LDMA->CHDONE & chMask ) == chMask ) )
472 uint32_t remaining, done, iflag;
473 uint32_t chMask = 1 << ch;
475 EFM_ASSERT( ch < DMA_CHAN_COUNT );
480 remaining =
LDMA->CH[ ch ].CTRL;
485 remaining = ( remaining
489 if ( done || ( ( remaining == 0 ) && iflag ) )
494 return remaining + 1;
Clock management unit (CMU) API.
DMA transfer configuration structure.
uint8_t ldmaCtrlSyncPrsSetOn
uint8_t ldmaInitCtrlSyncPrsSetEn
uint32_t LDMA_TransferRemainingCount(int ch)
Get number of items remaining in a transfer.
Emlib peripheral API "assert" implementation.
#define _LDMA_CH_CFG_SRCINCSIGN_SHIFT
RAM and peripheral bit-field set and clear API.
#define _LDMA_CH_CTRL_XFERCNT_MASK
__STATIC_INLINE uint32_t INT_Enable(void)
Enable interrupts.
#define _LDMA_CTRL_SYNCPRSCLREN_MASK
#define _LDMA_CH_REQSEL_MASK
uint8_t ldmaCtrlSyncPrsClrOn
#define _LDMA_CTRL_SYNCPRSSETEN_MASK
uint8_t ldmaCfgDstIncSign
void LDMA_StopTransfer(int ch)
Stop a DMA transfer.
void LDMA_Init(LDMA_Init_t *init)
Initialize the LDMA controller.
#define _LDMA_CTRL_SYNCPRSSETEN_SHIFT
Interrupt enable/disable unit API.
#define _LDMA_CH_CFG_DSTINCSIGN_MASK
void LDMA_DeInit(void)
De-initialize the LDMA controller.
#define _LDMA_CH_CFG_DSTINCSIGN_SHIFT
#define _LDMA_CTRL_SYNCPRSCLREN_SHIFT
uint8_t ldmaInitCtrlSyncPrsClrEn
#define _LDMA_CH_CFG_SRCINCSIGN_MASK
void CMU_ClockEnable(CMU_Clock_TypeDef clock, bool enable)
Enable/disable a clock.
#define _LDMA_CH_LOOP_LOOPCNT_MASK
uint8_t ldmaCtrlSyncPrsClrOff
__STATIC_INLINE void BUS_RegMaskedSet(volatile uint32_t *addr, uint32_t mask)
Perform a masked set operation on peripheral register address.
bool LDMA_TransferDone(int ch)
Check if a DMA transfer has completed.
uint8_t ldmaCtrlSyncPrsSetOff
Direct memory access (LDMA) API.
#define _LDMA_CH_CTRL_XFERCNT_SHIFT
__STATIC_INLINE void BUS_RegMaskedClear(volatile uint32_t *addr, uint32_t mask)
Perform a masked clear operation on peripheral register address.
#define _LDMA_CTRL_NUMFIXED_MASK
LDMA initialization configuration structure.
uint8_t ldmaInitCtrlNumFixed
#define _LDMA_CTRL_NUMFIXED_SHIFT
uint8_t ldmaInitIrqPriority
#define _LDMA_CH_LOOP_LOOPCNT_SHIFT
__STATIC_INLINE uint32_t INT_Disable(void)
Disable interrupts.
void LDMA_StartTransfer(int ch, LDMA_TransferCfg_t *transfer, LDMA_Descriptor_t *descriptor)
Start a DMA transfer.
#define _LDMA_CH_CFG_ARBSLOTS_SHIFT
uint8_t ldmaCfgSrcIncSign
#define _LDMA_CH_CFG_ARBSLOTS_MASK
#define _LDMA_CH_LINK_LINKADDR_MASK