打印
[其他]

HC32F460_DDL_Rev3.2.0中DMA函数存在问题

[复制链接]
1585|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Alohaq|  楼主 | 2024-1-19 16:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Alohaq 于 2024-2-4 14:17 编辑

若在DMA_ChCmd使用中有中断触发,导致第二次DMA_ChCmd触发,则会直接返回LL_ERR; 假如我用的两个DMA单元,则会导致被中断触发的DMA单元被正在使能的DMA单元使能失败,如DMA1正在通道使能,这时外部中断触发,去使能DMA2的通道,结果DMA2使能失败,直接导致传输失败,所以需要分开,设为DMA_ChCmd_1和DMA_ChCmd_2

int32_t DMA_ChCmd(CM_DMA_TypeDef *DMAx, uint8_t u8Ch, en_functional_state_t enNewState)
{
    static __IO uint8_t u8DmaChEnState = DMA_IDLE;
    ```

    ```
    if (DMA_IDLE == u8DmaChEnState) {
       ```
       return LL_OK;
    }
        return LL_ERR;
}






使用特权

评论回复
沙发
elephant00| | 2024-1-31 10:01 | 只看该作者
一般是DMA初始化、数据传输等问题

使用特权

评论回复
板凳
jinyuhang123456| | 2024-1-31 14:14 | 只看该作者
意思是这个函数要写两遍?还是说,函数内容里面要将两个DMA分开?

使用特权

评论回复
地板
Alohaq|  楼主 | 2024-2-4 14:21 | 只看该作者
jinyuhang123456 发表于 2024-1-31 14:14
意思是这个函数要写两遍?还是说,函数内容里面要将两个DMA分开?

就是我用了两个DMA单元,库函数里只有一个DMA_ChCmd,假设正在使能DMA2的通道,恰好外部中断来了,触发DMA1的传输,那么这时候使能DMA1的通道,也需要用到DMA_ChCmd,这里直接返回Err,按理DMA1和2两者之间的通道使能不会冲突,这个函数里没处理好导致两者冲突了,我单独为两个DMA搞了使能通道函数,分别为DMA_ChCmd_1和DMA_ChCmd_2,就不会引起冲突了

使用特权

评论回复
5
xdvca| | 2024-7-31 22:42 | 只看该作者
一个DMA通道正在进行传输,另一个DMA通道的使能请求可能会由于并发操作而导致冲突。针对这个问题,可以采取一些措施来确保DMA通道的稳定性和数据传输的可靠性。
禁用中断:在进行DMA通道使能或禁用时,临时禁用相关的中断,以避免中断请求导致的并发问题。例如,可以使用__disable_irq()和__enable_irq()函数在操作时禁用和恢复全局中断。
使用互斥锁:在多线程环境下,可以使用互斥锁或其他同步机制来确保同一时间只有一个DMA通道的使能操作在进行。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

38

帖子

0

粉丝