之前将DMA设置成2维后确实能播放语音了,但是我又遇到了几个问题,1.首先语音还是很短,我怀疑是不是我算的数据量出错了,我看程序应该是把AD1836设置为48Khz采样及24bit量化,数据数据没有压扩(就是零填充),那理论上是不是48K*5=240K,也就是一个int[240K]的buff能储存5s的语音数据,对么?但是我将这个240K的buff(均有数据) 输出成dat文件后,进行播放,貌似是只有1s左右的声音,AD1836的初始化函数如下:
volatile short sCodec1836TxRegs[CODEC_1836_REGS_LENGTH] =
{
DAC_CONTROL_1 | 0x000,
DAC_CONTROL_2 | 0x000,
DAC_VOLUME_0 | 0x3ff,
DAC_VOLUME_1 | 0x3ff,
DAC_VOLUME_2 | 0x3ff,
DAC_VOLUME_3 | 0x3ff,
DAC_VOLUME_4 | 0x000,
DAC_VOLUME_5 | 0x000,
ADC_CONTROL_1 | 0x000,
ADC_CONTROL_2 | 0x000,
ADC_CONTROL_3 | 0x000
};
第二个问题是,我将iRxBuffer1[240000],iTxBuffer1[240000],将DMA1和DMA2的enable函数分开写之后,我将pDMA1_CONFIG配置成stop模式并且传完产生中断,终端服务子程序里用for循环将iRxBuffer1[24000]的数据全部赋给iTxBuffer1[240000]后再enableDMA2,但是程序RUN完后,我没有听到声音,查看memory里发现只有iRxBuffer1[24000]里有数据,iTxBuffer1[240000]的数据全为0,不知道是为什么