最近一直在弄用AD转换声音信号,然后用DA还原播放声音,可是一直都实现不了,希望有人指导一下,谢谢!以下是主要的代码(我是采用DMA方式传输的)
AD主要代码(在AD的实验上加了DMA配置和定时器2中断实现AD开始转换):
#define ADC1_DR_Address 0x4001244C
u16 ADC_Value;
//DMA配置
//定时器2配置
DAC1主要代码(利用DMA传输、定时器6定时触发DAC)
#define DAC_DHR12R1_Address 0x40007408
uint16_t DAC_Value;
主函数主要部分
extern u16 ADC_Value;
extern uint16_t DAC_Value;
DMA_Config(
ADC1_DR_Address,(u32)&ADC_Value,1);
再初始化其他函数后
while(1)
{
DAC_Value =
ADC_Value;
}
#xuande
---------------------------------
1、好像波形挺完整的,黄 {MOD}表示AD端,蓝 {MOD}表示DA端,只不过感觉DA的波形不够平滑,采样频率是40KHz
2、到这一步,功放如果正常,应当可以听到声音了。声音可能不完美,比如音量太大会失真,以及有变调。变换几种不同频率试试。
不错,快了。
---------------------------------
1、前面问过你采样定理的事,你可以查查,即:采样速率必须大于信号最高频率的两倍,才能无失真重现原信号。
对于音频,40K采样率,已经是最低要求了。高保真的设备,可以达到上百K。
2、你的程序。
我做过类似定时器触发AD的设计,根本不用开溢出中断,溢出信号直接在CPU内部触发AD,开始转换。
就是说,完全是硬件实现触发,无需软件干预。所以,开中断无用,反而误事。
有了软件参与,这软件实现的“时钟”可能就不准确了。
DA,也是同样,完全用内部硬件实现。
想想,看怎么实现。做到这一点,水平是个大提高。
一周热门 更多>