找回密码
 立即注册
查看: 569|回复: 13

串口DMA遇到一个奇怪的问题?

[复制链接]

该用户从未签到

19

主题

527

回帖

1658

积分

荣誉版主

积分
1658
发表于 2024-1-29 16:24:14 | 显示全部楼层 |阅读模式
本帖最后由 tzz1983 于 2024-2-1 13:42 编辑

芯片型号: STC32G12K128     
使用场景:UART1   DMA模式收发, 允许DMA中断, 不允许UART1中断。
使用uCOS-ii ,进入空闲任务后会执行挂起CPU,如下指令:

PCON|=0X01;     //IDL
_nop_();_nop_();_nop_();_nop_();

添加这两句后串口就工作不正常了,去掉这两句又可以恢复正常.  除串口外别的设备都正常运行,ADC,TIM等不受影响。

按道理来说DMA属于外设,应该不受IDLE影响. 本人怀疑DMA是不是依赖CPU时钟.

不死心, 又尝试了打开串口中断,添加中断函数如下: (因为还是DMA传输,所以只是允许串口中断,只清标志,没有其它有效代码)
void UART1_ISR_Handler (void) interrupt UART1_VECTOR
{
    TI=RI=0;
}

当允许串口中断时,串口工作又正常了,我的理解是串口中断激活了CPU时钟,所以DMA又工作了.

现在是: 假如我的理解是正确的话, 那么DMA运行逻辑是不是该说明一下,或者说这是一个硬件BUG?   还是说当使用片上外设DMA时,就不能进IDLE模式了


本帖被以下淘专辑推荐:

回复 送花

使用道具 举报

  • TA的每日心情
    开心
    前天 17:54
  • 签到天数: 132 天

    [LV.7]常住居民III

    26

    主题

    1298

    回帖

    4049

    积分

    论坛元老

    积分
    4049
    发表于 2024-1-30 11:02:57 | 显示全部楼层
    进入IDLE后,CPU时钟被停止了,无法设置DMA中断标志。需要判断DMA传输完成后再进低功耗模式。

    点评

    借楼淘理由:DMA的使用与CPU使用相同的时钟源。当CPU进入IDLE模式后DMA也停止了工作。板凳层有解释。  发表于 2024-2-1 13:37
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    550

    主题

    9328

    回帖

    1万

    积分

    管理员

    积分
    13928
    发表于 2024-1-30 11:29:47 | 显示全部楼层
    我们目前的时钟比较强大复杂,但是原始的时钟只有2个:
    1,CPU clock;是CPU和flash和SFR在用的;
    2,外设-I/O clock; 是 外设-I/O 在用的;

    当进入IDLE mode后, CPU clock 被停止/不给CPU供应时钟,
    而 外设-I/O clock 会继续。

    估计 DMA-外设 用到了 CPU 时钟,没彻底使用 外设-I/O clock

    点评

    应该是这样子的,等有时间了我再试试内存到内存DMA,用一些方法实测可以得到答案  详情 回复 发表于 2024-1-30 15:38
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    550

    主题

    9328

    回帖

    1万

    积分

    管理员

    积分
    13928
    发表于 2024-1-30 11:34:48 | 显示全部楼层
    暂时不要使用 IDLE, 使用等待来代替
    相差 1.1mA@11.0592MHz,  110uA/MHz

    截图202401301139485585.jpg

    点评

    顺带问一下各位领导啥时候放年假呀,^-^  发表于 2024-1-30 16:15
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    19

    主题

    527

    回帖

    1658

    积分

    荣誉版主

    积分
    1658
     楼主| 发表于 2024-1-30 15:38:03 | 显示全部楼层
    神农鼎 发表于 2024-1-30 11:29
    我们目前的时钟比较强大复杂,但是原始的时钟只有2个:
    1,CPU clock;是CPU和flash和SFR在用的;
    2,外设-I/O ...

    应该是这样子的,等有时间了我再试试内存到内存DMA,用一些方法实测可以得到答案
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    550

    主题

    9328

    回帖

    1万

    积分

    管理员

    积分
    13928
    发表于 2024-1-30 16:57:32 | 显示全部楼层
    后续的新品 STC8051H, STC32G96K256 已改这部分
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    慵懒
    6 天前
  • 签到天数: 134 天

    [LV.7]常住居民III

    20

    主题

    1039

    回帖

    2459

    积分

    金牌会员

    积分
    2459
    发表于 2024-1-30 17:03:18 | 显示全部楼层
    神农鼎 发表于 2024-1-30 11:29
    我们目前的时钟比较强大复杂,但是原始的时钟只有2个:
    1,CPU clock;是CPU和flash和SFR在用的;
    2,外设-I/O ...

    话说 上述的情况时只存在于STC32G系列单片机中 还是所有拥有DMA的单片机中呢?
    参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
    技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    550

    主题

    9328

    回帖

    1万

    积分

    管理员

    积分
    13928
    发表于 2024-1-30 17:14:13 | 显示全部楼层
    就是 DMA 用哪个时钟的问题,小事,前面的 DMA 不要用不常用的 IDLE
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-22 09:44
  • 签到天数: 2 天

    [LV.1]初来乍到

    1

    主题

    5

    回帖

    55

    积分

    注册会员

    积分
    55
    发表于 2024-4-16 09:13:11 | 显示全部楼层
    碰到同样的问题
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-22 09:44
  • 签到天数: 2 天

    [LV.1]初来乍到

    1

    主题

    5

    回帖

    55

    积分

    注册会员

    积分
    55
    发表于 2024-4-16 09:15:00 | 显示全部楼层
    操作系统中定义了PCON=0X01,导致串口DMA出错

    点评

    可能空闲模式把 DMA 的时钟停了,不要用空闲模式  详情 回复 发表于 2024-4-16 10:25
    回复 支持 反对 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-6 01:29 , Processed in 0.072070 second(s), 71 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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