DMA improvements.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@14224 27425a3e-05d8-49a3-a47f-9c15f0e5edd8
This commit is contained in:
parent
8e0f307e75
commit
0353abddd1
|
@ -267,11 +267,24 @@ __STATIC_INLINE void dmaChannelSetModeX(const rp_dma_channel_t *dmachp,
|
||||||
DMA_CTRL_TRIG_CHAIN_TO(dmachp->chnidx);
|
DMA_CTRL_TRIG_CHAIN_TO(dmachp->chnidx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Aborts the current transfer on a DMA channel.
|
||||||
|
*
|
||||||
|
* @param[in] dmachp pointer to a rp_dma_channel_t structure
|
||||||
|
*
|
||||||
|
* @special
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE void dmaChannelAbortX(const rp_dma_channel_t *dmachp) {
|
||||||
|
|
||||||
|
dmachp->dma->SET.CHAN_ABORT = dmachp->chnmask;
|
||||||
|
while ((dmachp->dma->CHAN_ABORT & dmachp->chnmask) != 0U) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Enables a DMA channel.
|
* @brief Enables a DMA channel.
|
||||||
*
|
*
|
||||||
* @param[in] dmachp pointer to a rp_dma_channel_t structure
|
* @param[in] dmachp pointer to a rp_dma_channel_t structure
|
||||||
|
|
||||||
*
|
*
|
||||||
* @special
|
* @special
|
||||||
*/
|
*/
|
||||||
|
@ -280,19 +293,29 @@ __STATIC_INLINE void dmaChannelEnableX(const rp_dma_channel_t *dmachp) {
|
||||||
dmachp->channel->CTRL_TRIG |= DMA_CTRL_TRIG_EN;
|
dmachp->channel->CTRL_TRIG |= DMA_CTRL_TRIG_EN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Suspends a DMA channel.
|
||||||
|
*
|
||||||
|
* @param[in] dmachp pointer to a rp_dma_channel_t structure
|
||||||
|
*
|
||||||
|
* @special
|
||||||
|
*/
|
||||||
|
__STATIC_INLINE void dmaChanneSuspendX(const rp_dma_channel_t *dmachp) {
|
||||||
|
|
||||||
|
dmachp->channel->CTRL_TRIG &= ~DMA_CTRL_TRIG_EN;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Disables a DMA channel aborting the current transfer.
|
* @brief Disables a DMA channel aborting the current transfer.
|
||||||
*
|
*
|
||||||
* @param[in] dmachp pointer to a rp_dma_channel_t structure
|
* @param[in] dmachp pointer to a rp_dma_channel_t structure
|
||||||
|
|
||||||
*
|
*
|
||||||
* @special
|
* @special
|
||||||
*/
|
*/
|
||||||
__STATIC_INLINE void dmaChannelDisableX(const rp_dma_channel_t *dmachp) {
|
__STATIC_INLINE void dmaChannelDisableX(const rp_dma_channel_t *dmachp) {
|
||||||
|
|
||||||
dmachp->dma->CHAN_ABORT |= dmachp->chnmask;
|
dmaChanneSuspendX(dmachp);
|
||||||
while ((dmachp->dma->CHAN_ABORT & dmachp->chnmask) != 0U) {
|
dmaChannelAbortX(dmachp);
|
||||||
}
|
|
||||||
(void) dmaChannelGetAndClearInterrupts(dmachp);
|
(void) dmaChannelGetAndClearInterrupts(dmachp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue