找回密码
 立即注册
查看: 604|回复: 3

关于8H8K64U的DMA停止问题

[复制链接]

2

主题

12

回帖

64

积分

注册会员

积分
64
发表于 2023-4-17 14:00:25 | 显示全部楼层 |阅读模式
正在尝试做USB-CDC转双串口,参考了“一箭双雕”代码,尝试改成定时器中断+DMA方式,而非轮询。

采用双缓冲切换方式,收发均可用,但是:接收时DMA切换缓冲区,会发生1-5byte的数据丢失。
定时器采用的定时器4,中断优先级与usb中断同为最低。

故想请问一下:是否有任何方式,可以安全地停止DMA,改变地址后重启?

已经尝试:
1.将DMA_UR1R_CR=0,此后读取DMA_UR1R_DONE值常为0,无法获取接收长度;
2.强行更改DMA_UR1R_RXA,此后重新触发DMA(DMA_UR1R_CR = 0xa0,不清除FIFO),仍然丢失数据。

更新地址和重新触发的代码很短,在50个周期以内能够完成,系统主频FOSC=44.2368MHz,波特率115200-921600均可发生。


回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:415
  • 最近打卡:2025-04-30 09:58:34
已绑定手机

39

主题

2006

回帖

6843

积分

论坛元老

积分
6843
发表于 2023-4-19 11:13:17 | 显示全部楼层
将DMA_UR1R_CR=0就能停止DMA接收,主要是停止的时间点能否控制在当前数据已接收完,并且在下一次数据来临之前完成地址切换并重新启动。

点评

那为啥中断DMA后已接收字节数寄存器会被清零呢?这是硬件设计的复位吗,没有在数据手册体现?  发表于 2023-4-20 00:21
回复 支持 反对

使用道具 举报 送花

2

主题

12

回帖

64

积分

注册会员

积分
64
发表于 2023-4-20 00:23:15 | 显示全部楼层
加上了定时器中断,判断串口空闲才刷新缓冲区,终于不丢数据了!感谢指点!
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 15:45 , Processed in 0.133024 second(s), 60 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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