|
- void SPI2_IRQHandler(void)
- {
- //I2S_CODEC_DataTransfer();
-
- if (wm8978.status == STA_RECORDING){
- if (SPI_I2S_GetITStatus(SPI2, SPI_I2S_IT_TXE) == SET)
- {
- if (SPI_I2S_GetFlagStatus(SPI2, I2S_FLAG_CHSIDE))
- {
- I2S2ext->DR = speex_codec.adc_buffer[0][speex_codec.adc_stop[0]];
- speex_codec.adc_stop[0] ++;
- speex_codec.adc_stop[0] &= 0x3FF;
- }
- else
- {
- I2S2ext->DR = speex_codec.adc_buffer[0][speex_codec.adc_stop[0]];
- }
- SPI_I2S_ClearITPendingBit(SPI2, SPI_I2S_IT_TXE);
- }
- if (SPI_I2S_GetITStatus(I2S2ext, SPI_I2S_IT_RXNE) == SET)
- {
- if (SPI_I2S_GetFlagStatus(I2S2ext, I2S_FLAG_CHSIDE))
- {
- wm8978.audio_point[wm8978.audio_cursor] = I2S2ext->DR;
- speex_codec.adc_start[1]++;
- speex_codec.adc_start[1] &= 0x3FF;
- }else{
- wm8978.audio_point[wm8978.audio_cursor] = I2S2ext->DR;
- speex_codec.adc_start[0]++;
- speex_codec.adc_start[0] &= 0x3FF;
- }
- SPI_I2S_ClearITPendingBit(I2S2ext, SPI_I2S_IT_RXNE);
- }
- }
- }
复制代码 speex 有个限制是这样的,
在做 speex 是针对事先储存好的资料做压缩,非实时的
如我要压缩一段 1024B 的数字音频,就必须等1024B都采样完才能压缩
但其实抓好速度的话,可以在1024B采样完就立刻压缩,尽可能接近实时
用 V5 - WM8978范例做实验的时候,遇到了一个问题(代码如上)
I2S_IRQ一直在跑,要怎麽样才能跳出来?
有正确压缩,时间上来的及,没有撞帧
就只是跳不出去,请问该怎麽做呢? |
|