查看: 561|回复: 5

[求助] RT1052串口DMA接收一段时间后没有使用的通道产生了异常

[复制链接]
  • TA的每日心情
    难过
    2025-6-4 11:18
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    7

    主题

    16

    帖子

    0

    注册会员

    Rank: 2

    积分
    187
    最后登录
    2025-7-24
    发表于 2025-6-4 11:18:02 | 显示全部楼层 |阅读模式
    我使用了多个串口+DMA+空闲中断接收,dma发送,每个串口接收dma使用4个tcd每个tcd管理20k缓冲区共80k首尾相连组成循环接收的形式,数据量大概5.5k/s、2k/s、1k/s三个串口,3个串口每个串口对应一个freertos任务,两个数据量较少的在空闲中断中使用了信号量,大的不使用信号量直接让任务做轮询处理数据。
    问题:发现在运行一段时间后dma出现了异常但是查看寄存器显示的通道是我没有使用的通道没有初始化过它,我使用的通道开启了异常中断,出现异常的时候也没有进入异常中断,搞不清楚为什么,麻烦大家帮忙分析分析
    我学不会啊!!
    回复

    使用道具 举报

  • TA的每日心情
    难过
    2025-6-4 11:18
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    7

    主题

    16

    帖子

    0

    注册会员

    Rank: 2

    积分
    187
    最后登录
    2025-7-24
     楼主| 发表于 2025-6-5 15:39:40 | 显示全部楼层
    测试下来
    1.不把dma配置多个tcd而是留下一个20k的缓冲区减少了dma中断后暂时没有出现上面的问题
    2.或者把dma中断配置优先级较高,将别的定时器调低,串口的空闲中断优先级调至dma与别的中断中间,这个问题也几乎没有出现
    是因为中断嵌套抢占之类的造成的故障吗,不理解
    我学不会啊!!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    1

    帖子

    0

    新手上路

    Rank: 1

    积分
    11
    最后登录
    2025-6-16
    发表于 2025-6-11 15:34:10 | 显示全部楼层
    关注一下
    回复

    使用道具 举报

  • TA的每日心情
    难过
    2025-6-4 11:18
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    7

    主题

    16

    帖子

    0

    注册会员

    Rank: 2

    积分
    187
    最后登录
    2025-7-24
     楼主| 发表于 2025-6-12 17:39:57 | 显示全部楼层
    目前是配个25k的环形缓冲区用着,把别的任务做成通知,高频做成轮询,不会产生dma故障,又把所有的中断优先级排了一遍,高频的串口对应的任务不能用任务通知不然就会慢很多...不知道是我用错了还是就是这样,我其实需要一个大的串口dma接收缓冲区
    我学不会啊!!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    30

    主题

    61

    帖子

    0

    高级会员

    Rank: 4

    积分
    980
    最后登录
    2025-7-28
    发表于 2025-6-15 11:54:22 | 显示全部楼层
    eefocus_4072065 发表于 2025-6-12 17:39
    目前是配个25k的环形缓冲区用着,把别的任务做成通知,高频做成轮询,不会产生dma故障,又把所有的中断优先 ...

         IMX RT的 eDMA支持 半满中断 (DMA_CSR_INTHALF_MASK)和 全满中断(DMA_CSR_INTMAJOR_MASK)功能。可以在接收数据过半时将已收到的前半部分数据写入fifo,然后产生满中断时将后半部分数据写入fifo,此时eDMA会自动将写指针移动到接收缓存的头部继续接收,循环这个过程,就不必关闭DMA,不会丢失串口数据。每个串口DMA收/发只需要使用2个tcd,简单高效。
    通过eDMA半满中断实现RT LPUART串口可靠接收.pdf (117.07 KB, 下载次数: 4)
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2025-6-4 11:18
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    7

    主题

    16

    帖子

    0

    注册会员

    Rank: 2

    积分
    187
    最后登录
    2025-7-24
     楼主| 发表于 2025-7-21 17:06:57 | 显示全部楼层
    lszisgood 发表于 2025-6-15 11:54
    IMX RT的 eDMA支持 半满中断 (DMA_CSR_INTHALF_MASK)和 全满中断(DMA_CSR_INTMAJOR_MASK)功能。 ...

    感谢,我是通过调整了中断优先级,缩小了tcd现在平均每秒处理平均8k/s的数据量还是正常的,我之前试过转发时用拷贝+freertos的队列,任务中加阻塞,都会导致转发任务反应慢,转发不及时,所以直接拿dma接收缓冲区的数据dma发送的,现在已经没有这个问题了
    我学不会啊!!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-31 02:50 , Processed in 0.096900 second(s), 25 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表