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:
Giovanni Di Sirio 2021-04-18 10:20:19 +00:00
parent 8e0f307e75
commit 0353abddd1
1 changed files with 29 additions and 6 deletions

View File

@ -161,7 +161,7 @@ __STATIC_INLINE bool dmaChannelIsBusyX(const rp_dma_channel_t *dmachp) {
__STATIC_INLINE uint32_t dmaChannelGetAndClearInterrupts(const rp_dma_channel_t *dmachp) {
uint32_t ctrl_trig;
ctrl_trig= dmachp->channel->CTRL_TRIG;
ctrl_trig = dmachp->channel->CTRL_TRIG;
dmachp->channel->CTRL_TRIG = ctrl_trig |
DMA_CTRL_TRIG_READ_ERROR |
DMA_CTRL_TRIG_WRITE_ERROR;
@ -267,11 +267,24 @@ __STATIC_INLINE void dmaChannelSetModeX(const rp_dma_channel_t *dmachp,
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.
*
* @param[in] dmachp pointer to a rp_dma_channel_t structure
*
* @special
*/
@ -280,19 +293,29 @@ __STATIC_INLINE void dmaChannelEnableX(const rp_dma_channel_t *dmachp) {
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.
*
* @param[in] dmachp pointer to a rp_dma_channel_t structure
*
* @special
*/
__STATIC_INLINE void dmaChannelDisableX(const rp_dma_channel_t *dmachp) {
dmachp->dma->CHAN_ABORT |= dmachp->chnmask;
while ((dmachp->dma->CHAN_ABORT & dmachp->chnmask) != 0U) {
}
dmaChanneSuspendX(dmachp);
dmaChannelAbortX(dmachp);
(void) dmaChannelGetAndClearInterrupts(dmachp);
}