找回密码
 立即注册
查看: 212|回复: 6

8A8K64D4串口DMA怎么实现交替发送两个数组?

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-03-08 11:18:15

2

主题

19

回帖

100

积分

注册会员

积分
100
发表于 2025-2-24 08:56:22 | 显示全部楼层 |阅读模式
请教一个问题,我在使用8A8K64D4时,我想实现串口DMA 交替发送两个数组 实现类似乒乓操作,尝试修改官方例程,在发送时重新指定DMA_UR1T_AMT发送数组长度和DMA_UR1T_TXA所指向的数组,但一直不行,数组好像无法切换,除了使用memcpy以外我该怎么做?
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2219

回帖

5452

积分

版主

积分
5452
发表于 2025-2-24 09:13:13 | 显示全部楼层
发送时不能更改地址和长度,顺序不对
应该在发送的时候对另一个缓冲区填入内容,然后等待发送完成中断,在中断里重新装载后发送。
双缓冲区我试过,是没问题的
回复 支持 反对

使用道具 举报 送花

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

39

主题

2006

回帖

6841

积分

论坛元老

积分
6841
发表于 2025-2-24 09:16:31 | 显示全部楼层
参考这个演示视频介绍:
https://www.stcaimcu.com/plugin. ... ee=1&id_7ree=46
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-03-08 11:18:15

2

主题

19

回帖

100

积分

注册会员

积分
100
发表于 2025-2-24 14:24:17 | 显示全部楼层
王*** 发表于 2025-2-24 09:13
发送时不能更改地址和长度,顺序不对
应该在发送的时候对另一个缓冲区填入内容,然后等待发送完成中断,在 ...

你说的等待发送完成中断,应该是指的DMA发送完成中断吧?我在程序初始化时就初始化了一个较大的发送缓冲区,如果在发送时,这个缓冲区填不满,发送不完全,那这个DMA发送中断是不是就不会触发,所以还是处于发送过程中,无法修改地址和长度?

点评

是的,如果你使用的是较大的发送数组,可以尝试环形缓冲填入的方式。 具体为不更改发送长度和地址,在完成发送中断的时候直接再次拉起。 然后通过读取已经发送字节的寄存器获取到当前发送到的位置,在之前位置的数组  详情 回复 发表于 2025-2-24 14:39
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2219

回帖

5452

积分

版主

积分
5452
发表于 2025-2-24 14:39:08 | 显示全部楼层
marsha*** 发表于 2025-2-24 14:24
你说的等待发送完成中断,应该是指的DMA发送完成中断吧?我在程序初始化时就初始化了一个较大的发送缓冲 ...

是的,如果你使用的是较大的发送数组,可以尝试环形缓冲填入的方式。
具体为不更改发送长度和地址,在完成发送中断的时候直接再次拉起。
然后通过读取已经发送字节的寄存器获取到当前发送到的位置,在之前位置的数组直接填入数据。即可实现环形数据填入,从而实现无装载等待时间。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-03-08 11:18:15

2

主题

19

回帖

100

积分

注册会员

积分
100
发表于 2025-2-24 14:42:58 | 显示全部楼层
王*** 发表于 2025-2-24 14:39
是的,如果你使用的是较大的发送数组,可以尝试环形缓冲填入的方式。
具体为不更改发送长度和地址,在完 ...

我觉得我可以这样做,在程序初始化时,先不初始化串口发送DMA,在需要发送时再初始化串口发送DMA,指定要发送的缓冲区,和实际的长度,这样串口DMA发送就会触发,从而就可以切换缓冲区

点评

可以试一下  详情 回复 发表于 2025-2-24 15:12
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2219

回帖

5452

积分

版主

积分
5452
发表于 2025-2-24 15:12:03 | 显示全部楼层
marsha*** 发表于 2025-2-24 14:42
我觉得我可以这样做,在程序初始化时,先不初始化串口发送DMA,在需要发送时再初始化串口发送DMA,指定要 ...

可以试一下
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 02:42 , Processed in 0.145050 second(s), 87 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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