8A8K64D4串口DMA怎么实现交替发送两个数组?
请教一个问题,我在使用8A8K64D4时,我想实现串口DMA 交替发送两个数组 实现类似乒乓操作,尝试修改官方例程,在发送时重新指定DMA_UR1T_AMT发送数组长度和DMA_UR1T_TXA所指向的数组,但一直不行,数组好像无法切换,除了使用memcpy以外我该怎么做?发送时不能更改地址和长度,顺序不对
应该在发送的时候对另一个缓冲区填入内容,然后等待发送完成中断,在中断里重新装载后发送。
双缓冲区我试过,是没问题的 参考这个演示视频介绍:
https://www.stcaimcu.com/plugin.php?id=x7ree_v:x7ree_v&code_7ree=1&id_7ree=46 王昱顺 发表于 2025-2-24 09:13
发送时不能更改地址和长度,顺序不对
应该在发送的时候对另一个缓冲区填入内容,然后等待发送完成中断,在 ...
你说的等待发送完成中断,应该是指的DMA发送完成中断吧?我在程序初始化时就初始化了一个较大的发送缓冲区,如果在发送时,这个缓冲区填不满,发送不完全,那这个DMA发送中断是不是就不会触发,所以还是处于发送过程中,无法修改地址和长度? marshallemon 发表于 2025-2-24 14:24
你说的等待发送完成中断,应该是指的DMA发送完成中断吧?我在程序初始化时就初始化了一个较大的发送缓冲 ...
是的,如果你使用的是较大的发送数组,可以尝试环形缓冲填入的方式。
具体为不更改发送长度和地址,在完成发送中断的时候直接再次拉起。
然后通过读取已经发送字节的寄存器获取到当前发送到的位置,在之前位置的数组直接填入数据。即可实现环形数据填入,从而实现无装载等待时间。 王昱顺 发表于 2025-2-24 14:39
是的,如果你使用的是较大的发送数组,可以尝试环形缓冲填入的方式。
具体为不更改发送长度和地址,在完 ...
我觉得我可以这样做,在程序初始化时,先不初始化串口发送DMA,在需要发送时再初始化串口发送DMA,指定要发送的缓冲区,和实际的长度,这样串口DMA发送就会触发,从而就可以切换缓冲区 marshallemon 发表于 2025-2-24 14:42
我觉得我可以这样做,在程序初始化时,先不初始化串口发送DMA,在需要发送时再初始化串口发送DMA,指定要 ...
可以试一下
页:
[1]