void dma_set_per_addr(dma_dev *dev, dma_channel channel, volatile void *addr) { dma_channel_reg_map *chan_regs; ASSERT_FAULT(!dma_is_channel_enabled(dev, channel)); chan_regs = dma_channel_regs(dev, channel); chan_regs->CPAR = (uint32)addr; }
/** * @brief Set the base memory address where data will be read from or * written to. * * You must not call this function while the channel is enabled. * * If the DMA memory size is 16 bits, the address is automatically * aligned to a half-word. If the DMA memory size is 32 bits, the * address is aligned to a word. * * @param dev DMA Device * @param channel Channel whose base memory address to set. * @param addr Memory base address to use. */ void dma_set_mem_addr(dma_dev *dev, dma_channel channel, __io void *addr) { dma_channel_reg_map *chan_regs; ASSERT_FAULT(!dma_is_channel_enabled(dev, channel)); chan_regs = dma_channel_regs(dev, channel); chan_regs->CMAR = (uint32)addr; }
void dma_set_num_transfers(dma_dev *dev, dma_channel channel, uint16 num_transfers) { dma_channel_reg_map *channel_regs; ASSERT_FAULT(!dma_is_channel_enabled(dev, channel)); channel_regs = dma_channel_regs(dev, channel); channel_regs->CNDTR = num_transfers; }
void dma_set_priority(dma_dev *dev, dma_channel channel, dma_priority priority) { dma_channel_reg_map *channel_regs; uint32 ccr; ASSERT_FAULT(!dma_is_channel_enabled(dev, channel)); channel_regs = dma_channel_regs(dev, channel); ccr = channel_regs->CCR; ccr &= ~DMA_CCR_PL; ccr |= (priority << 12); channel_regs->CCR = ccr; }