今天完成了一个DAC音频输出。虽然是找到问题并解决,输出清晰的声音了。但还是想寻求下相关方法。
描述如下:一开始音频从DAC输出的时候,用示波器抓到的波形是一组方波,功放喇叭输出的声音很刺耳。为什么会这样呢?原来是我采样率不对,后来调整采样率发现声音输出的波形还是方波。
检查程序:我程序采用DMA将声音数据传送到DAC上,DAC的配置启用通道1触发,tim6定时器定时触发DMA。
DAC通道1配置如下:
rw_DAC_CR&=0xe000e000; //初始化话DAC
rw_DAC_CR|=(0x08<<8); //设置波形波幅
rw_DAC_CR&=~(0x03<<6); //关闭波形发生器
rw_DAC_CR|=(0<<3); //启用定时器6触发
rw_DAC_CR|=(0<<2); //DAC通道1触发使能
rw_DAC_CR|=(0<<1); //开启缓存还能,提高驱动能力
经过查阅数据手册,我发现DAC启用通道1触发功能后,写入寄存器DAC_DHRx的数据在3 个APB1时钟周期后传入寄存器DAC_DORx 。这个可能是导致我输出的声波是一个方波,而不是一个圆润类似正弦波的原因。鉴于此,我改用定时器6中断对DAC传输数据,竟然成功了。
在这里,我想问问各位,面对上面这个问题,除了定时器中断方法外,还有什么方法可以使用?如果规定就只能用DMA传输数据的话,我该怎么处理上面这个问题?求一个解决问题的方向。
|