碰到奇怪的音频问题,CSDN求助收藏帖!

 


原来系统没有问题,将显示驱动由16bit该为24bit之后显示没有问题,但是奇怪的是音频竟然出问题了: 
explore时有开机声音,但只是一开始响一下就没了,有时是开始正常,点触摸屏几下后或打开个文件夹后触摸点击声就没了! 
改回16bit后一切正常! 
这音频驱动怎么会和受显示驱动影响了呢? 
望高手指点!

 

你有驱动的源码吗?你得看看在分辨率调高了之后,显示驱动当中都做了什么事情,是不是有碰到声音的IO

查过了,没有用到声音IO口,新加的八根线原来没有用到

 

有可能是时序的问题,在音频驱动的OutputDMA,最后起动DMA前加点延时5ms等待一下看看

加过了,没改善好像

 

首先确定声音播放的速度和效果是否正确,播放下mp3看看。然后增大WAV驱动线程的优先级,能改善效果。

 

还有一个现象:我把新加的八根管脚,即八根数据线屏蔽掉,情况就有改善 

 

可否告知你用的 Audio Codec and Touch ADC 用的是哪一顆 Chip. 
還可否告知你原來所 clone BSP, 原始線路圖中, VD16 ~ VD23 是接去做什麼了, 還是單純地 floating. 
Audio Codec WM9711 
Touch
直接到2440 
原始線路圖中, VD16 ~ VD23 是设为output, floating

 

24-bits display 可能是用 4 bytes 來儲存一個 pixel, 故其資料量是 16-bits 的兩倍 
不知是不是 Audio DMA 發生 Underrun 的錯誤, 而程式碼又沒處理好, 建議你可將 display pixel clock 先減半試試看, 是否 audio 就沒錯誤發生, 那就可以判別是不是這個錯誤, 不過螢幕會閃很厲害就是了. 
當然這只是猜測, 或許會害你做白工 

试过了,我把分辨率减半,这样数据量就减半了,但还是不行,不过还是很感谢你的! 
郁闷了! 


另外, 你在 7 樓描述 "还有一个现象:我把新加的八根管脚,即八根数据线屏蔽掉,情况就有改善", 不知何謂 "屏蔽", 還是你的硬體有 "互相干擾" 的問題, 那就不是軟體能解決的了. 

就是把那八个管脚由VD重新改为output 
这样的话,数据量没有变化,好像不像是DMA的问题 

 

你把 分辨率 (應該是 resolution ) 減半, 但若是 pclk 沒變, vsync 是不是會加倍呢?? 這樣數據量可能就沒變了. 
可否請你拿示波器 (Oscilloscope) 量一下 vsync 來做個確認, 也許是我的觀念錯誤. 

我后面要转成模拟信号的,所以vsync确定是60hz,否则无法显示,行数不变,分辨率 (即每行的点数) 減半,pclk也减半,所以数据量也减半了 
关键是声音不是一直没有,而是一种不定态,有时放map3三四分钟就没声音了,有时开机声音完了就没声音了! 
没思路了,难道就我一人碰到这种问题了? 
再仔细看下音频驱动! 

 

没有声音后发现上层给下来的数据正常吗?还是说根本就没有数据下来了 
检查一下这个时候Codec的通路有没有问题?

我打印串口信息,发现没声音时DMA就没有触发中断了

 

你這種現象, 可能的原因可能有 
1. I/O conflict -- 
看來你已排除 
2. DMA arbitrator fail -- 
據你所稱, DMA 資料量減半後, 現象仍然不變, 故似也可排除 
3.
硬體干擾, VD16-VD23 AC97 clock, sync 等信號干擾 -- 請自行量測, 沒法幫你 
4. Audio driver
不夠 robust, 一些 hardware error 沒去處理, ac97 沒法繼續工作. -- 軟體上的可能原因 
建議你 build debug mode, 或是開始狂加 RETAILMSG, 尤其是 IST 的部份. 
我之前遇過, 2440 audio driver IST 內有一個 while loop, 偶會跑不出來, 要加 retry times 的限制. 


疑问: 
ac97
不工作会导致无法触发DMA中断么? 
DMA
中断触发条件是什么? 
跟了一下代码,发现:放mp3或点击触摸,正常一段时间后,有一次初始化DMA后就进不去中断了!之后就再也进不去了! 

1. DMA request 來自 AC97 TX FIFO empty or RX FIFO full, 當然, 應該說是 under water level or over water level. 
2. DMA interrupt
來自 DMA buffer empty or full. 
AC97 不工作, FIFO 不會變動, 則不會產生 DMA request, DMA buffer 就不會變動, 當然 interrupt 就不會觸發 
Source code
就自己追吧, 這就無法幫你了

 

可能是硬件问题,之前没往这方面想,汗! 
wm9711
偶尔会停振,原因查找中……

 

问题解决,不知道RESET脚受到什么东西影响,还是多了8脚输出后2440 AC97RESET脚不是很稳定?此脚加一105电容解决问题。 
硬件的问题真是说不清,道不明…… 
不过这只是暂时解决 
我觉得还是代码不够好,引用Paul, Chao 的话:Audio driver 不夠 robust, 一些 hardware error 沒去處理, ac97 沒法繼續工作 
有时间还是要再仔细研究一下代码!
非常感谢几位的热心帮助:Paul Chao hzdysymbol……,向你们学习! 

你可能感兴趣的:(工作,buffer,audio,output,conflict,Codec)