原来系统没有问题,将显示驱动由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 AC97的RESET脚不是很稳定?此脚加一105电容解决问题。
硬件的问题真是说不清,道不明……
不过这只是暂时解决
我觉得还是代码不够好,引用Paul, Chao 的话:Audio driver 不夠 robust, 一些 hardware error 沒去處理, ac97 沒法繼續工作
有时间还是要再仔细研究一下代码!
非常感谢几位的热心帮助:Paul Chao 、hzdysymbol……,向你们学习!