如何不间断地实现DAC波形输出,并可以实时更新输出数据?

2019-07-20 22:41发布

本帖最后由 1201yuge 于 2016-4-23 09:26 编辑

   问题是这样的,我想用DAC输出连续的信号,现在假设是需要输出一种无规律的波形(可以认为是噪声),并且需要以2MHz的转换速率输出;现在的实现方式是在内存中定义一个50K的数组,配置成DMA DAC输出,那么现在问题来了,以2MHz的速率输出,那么输出完50K 16位的数组只需要15.6ms,我想每次输出的波形是不重复的,那么怎么样才可以实现数据的更新呢?

我想到的方法有:
1.每次DMA传输完产生一个完成中断,然后更新数据,再次触发DMA传输,可以保证数据不重复,但是不连续了。
2.每次DMA传输到一半的时候或者完成的时候产生一个中断,更新缓冲区前一半或者后一半的数据,DMA是连续传输方式。

注:我现在更新的数据来源是随机数发生器,速率跟不上DAC的输出,请问有没有朋友做过类似的东西,给点意见,谢谢。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
adlu
1楼-- · 2019-07-20 23:01
我之前用F1的DAC输出,做过播放WAV文件的。
播放的采样率比较低,大概16k。音频数据是存放在SPI FLASH中的。
基本思路就是定时器触发DMA传输到DAC寄存器,给DMA开辟两个缓冲区。
xuyaqi
2楼-- · 2019-07-21 02:15
 精彩回答 2  元偷偷看……
1201yuge
3楼-- · 2019-07-21 07:21
xuyaqi 发表于 2016-4-23 10:30
如果要连续,就直接采样一次DAC输出一次,不必要DMA传输。

这个只是初步测试,我中间需要使用DSP库进行一些数据处理的
xuyaqi
4楼-- · 2019-07-21 07:48
如果要连续,采样率要和DAC输出率一致只能在采样输出间隙干一些其他事,用定时触发比较好。
adlu
5楼-- · 2019-07-21 10:22
要实现连续输出,用DMA的ping-pong缓冲模式是比较合理的思路。就是LZ说的第二点。

如果数据产生的速率达不到设计的要求,那就没办法了。可以把缓冲区开大一些试试。
1201yuge
6楼-- · 2019-07-21 13:52
 精彩回答 2  元偷偷看……

一周热门 更多>