TIwilliam hill官网
直播中

study875

12年用户 1160经验值
私信 关注
[问答]

DSP有什么标识位可以知道EDMA正在搬运的buf是txbuf0还是txbuf1?


  •   问题是这样,我们用算法计算完后的音频数据更新到txbuf0和txbuf1,然后通过EDMA搬运到arm板子上,我们处理音频数据的流程是这样的。
    算法处理后数据-------》更新到txbuf0或txbuf1-------》EDMA搬运-------》ARM。
    我现在将算法处理后的数据传送到txbuf0和txbuf1,一定要避免EDMA传输的时候,txbuf被DSP改写了。因为音频数据是连续的,我不能在更新buf的时候关闭DMA,这样会造成音频断续。所以我想问一下DSP有什么标识位可以让我知道EDMA正在搬运的buf是txbuf0还是txbuf1,这样我在更新数据的时候就更新另外一个没有被搬运的buf,从而保证不会同时读写同一块区域造成数据错乱。

回帖(2)

李岩

2024-10-24 09:36:41
   edma 有地址指针寄存器吧
我觉得在你的 arm 软件里, 可以自己设置标志
举报

叹久

2024-10-24 11:35:26
在DSP中,通常可以通过EDMA(Enhanced Direct Memory Access)控制器的寄存器来获取当前正在搬运的缓冲区信息。具体的方法可能因DSP型号和EDMA控制器的实现而异,但一般可以通过以下步骤来实现:

1. 首先,需要查阅你所使用的DSP的参考手册或数据手册,了解EDMA控制器的寄存器结构和相关功能。

2. 在EDMA控制器的寄存器中,通常会有一个或多个寄存器用于存储当前正在搬运的缓冲区信息。例如,可能有一个寄存器用于存储当前正在搬运的缓冲区的地址,或者有一个寄存器用于存储当前正在搬运的缓冲区的索引。

3. 通过读取这些寄存器的值,可以判断EDMA当前正在搬运的是哪个缓冲区(txbuf0或txbuf1)。例如,如果寄存器中存储的地址是txbuf0的地址,那么可以认为EDMA正在搬运txbuf0;如果寄存器中存储的地址是txbuf1的地址,那么可以认为EDMA正在搬运txbuf1。

4. 在更新音频数据时,可以根据EDMA当前正在搬运的缓冲区信息,选择更新另一个缓冲区。例如,如果EDMA正在搬运txbuf0,那么可以更新txbuf1;如果EDMA正在搬运txbuf1,那么可以更新txbuf0。

5. 为了确保音频数据的连续性,可以在更新缓冲区时使用双缓冲区技术。即在EDMA搬运一个缓冲区的同时,算法处理后的数据更新到另一个缓冲区。当EDMA完成搬运后,再切换到另一个缓冲区进行搬运。

6. 另外,还可以通过设置EDMA的中断服务例程(ISR)来实现缓冲区的切换。在ISR中,可以检查EDMA搬运完成的缓冲区,并更新另一个缓冲区的数据。

总之,通过查阅DSP的参考手册,了解EDMA控制器的寄存器结构和功能,可以找到标识EDMA正在搬运的缓冲区的方法。然后,根据这些信息,可以实现在更新音频数据时避免EDMA传输时的缓冲区被改写。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分