#ifndef __DMA_H__ #define __DMA_H__ /** * @brief 清除DMA传输完成标志 * @param {DMA_HandleTypeDef} *DMAX DMA总线句柄 * @param {uint32_t} CHx DMA通道号 * @return {*} 操作结果 * @note: 该宏用于清除DMA总线的传输完成标志。它首先检查DMA总线的传输完成标志是否已置位,如果已置位,则清除该标志。 */ #define DMA_ClEAR_FLAG_TC(DMAX, CHx) \ do \ { \ if (LL_DMA_IsActiveFlag_TC##CHx(DMAX)) \ { \ LL_DMA_ClearFlag_TC##CHx(DMAX); \ } \ } while (__LINE__ == -1) /** * @brief 清除DMA传输错误标志 * @param {DMA_HandleTypeDef} *DMAX DMA总线句柄 * @param {uint32_t} CHx DMA通道号 * @return {*} 操作结果 * @note: 该宏用于清除DMA总线的传输错误标志。它首先检查DMA总线的传输错误标志是否已置位,如果已置位,则清除该标志。 */ #define DMA_ClEAR_FLAG_TE(DMAX, CHx) \ do \ { \ if (LL_DMA_IsActiveFlag_TE##CHx(DMAX)) \ { \ LL_DMA_ClearFlag_TE##CHx(DMAX); \ } \ } while (__LINE__ == -1) /** * @file uarts.c * @brief This file contains the implementation of DMA_CLEAR_FLAG_TC_CHANNEL macro. */ /** * @brief Clear the Transfer Complete (TC) flag of a specific DMA channel. * * @param dma The DMA peripheral. * @param channel The DMA channel number. */ #define DMA_CLEAR_FLAG_TC_CHANNEL(dma, channel) \ switch (channel) \ { \ case LL_DMA_CHANNEL_1: \ DMA_ClEAR_FLAG_TC(dma, 1); \ break; \ case LL_DMA_CHANNEL_2: \ DMA_ClEAR_FLAG_TC(dma, 2); \ break; \ case LL_DMA_CHANNEL_3: \ DMA_ClEAR_FLAG_TC(dma, 3); \ break; \ case LL_DMA_CHANNEL_4: \ DMA_ClEAR_FLAG_TC(dma, 4); \ break; \ case LL_DMA_CHANNEL_5: \ DMA_ClEAR_FLAG_TC(dma, 5); \ break; \ case LL_DMA_CHANNEL_6: \ DMA_ClEAR_FLAG_TC(dma, 6); \ break; \ case LL_DMA_CHANNEL_7: \ DMA_ClEAR_FLAG_TC(dma, 7); \ break; \ default: \ break; \ } /** * @brief Clear the Transfer Error (TE) flag for the specified DMA channel. * * @param dma The DMA peripheral. * @param channel The DMA channel number. */ #define DMA_CLEAR_FLAG_TE_CHANNEL(dma, channel) \ switch (channel) \ { \ case 1: \ DMA_ClEAR_FLAG_TE(dma, 1); \ break; \ case 2: \ DMA_ClEAR_FLAG_TE(dma, 2); \ break; \ case 3: \ DMA_ClEAR_FLAG_TE(dma, 3); \ break; \ case 4: \ DMA_ClEAR_FLAG_TE(dma, 4); \ break; \ case 5: \ DMA_ClEAR_FLAG_TE(dma, 5); \ break; \ case 6: \ DMA_ClEAR_FLAG_TE(dma, 6); \ break; \ case 7: \ DMA_ClEAR_FLAG_TE(dma, 7); \ break; \ default: \ break; \ } /** * @brief Clears the flags of a DMA channel * @param DMAX DMAx register base * @param CHx DMA channel number * @param Flag a boolean variable that indicates if the transfer is complete * @note This function should be called within the interrupt service routine of the DMA channel */ #define DMA_ClEAR_FLAG(DMAX, CHx, Flag) \ do \ { \ if (LL_DMA_IsActiveFlag_TC##CHx(DMAX)) \ { \ LL_DMA_ClearFlag_TC##CHx(DMAX); \ LL_DMA_ClearFlag_GI##CHx(DMAX); \ Flag = TRUE; \ } \ if (LL_DMA_IsActiveFlag_TE##CHx(DMAX)) \ { \ LL_DMA_ClearFlag_TE##CHx(DMAX); \ } \ if (LL_DMA_IsActiveFlag_GI##CHx(DMAX)) \ { \ LL_DMA_ClearFlag_GI##CHx(DMAX); \ } \ } while (__LINE__ == -1) #endif // __DMA_H__