WINCE基于CH7024实现TV OUT (VGA)功能
********************************LoongEmbedded********************************
作者:LoongEmbedded(kandi)
時間:2011.01.03
類別:WINCE驅動開發
********************************LoongEmbedded********************************
?
系統:WINCE6.0+S3C2443
?
實現原理
CPU(在此為S3C2443)輸出的RGB數字信號通過CH7024轉換成PAL制式的模擬信號輸出到電視。
?
1.?????? 硬件設計
?
圖0
?
?
2.?????? CH7024
2.1?? CH7024引腳的描述
D[0:23]
圖形控制器(這里是LCD控制器)通過這24個輸入引腳把RGB數字信號輸入到CH7024中。
?
H
水平(也即行)同步信號輸入/輸出端,當SYO控制位(0x0E[1])為0,這個引腳作為輸入數據的水平同步信號輸入端;當SYO控制位(0x0E[1])為1,這個引腳作為輸入數據的水平同步信號輸出端
?
V
垂直(也即幀)同步信號輸入/輸出端,當SYO控制位(0x0E[1])為0,這個引腳作為輸入數據的垂直同步信號輸入端;當SYO控制位(0x0E[1])為1,這個引腳作為輸入數據的垂直同步信號輸出端。
?
DE
數據使能引腳,當這個引腳為高電平的時候,輸入的圖像數據是激活的(active);,當這個引腳為低電平的時候,輸入的圖像數據是空白的(blanking),這個引腳是有CPU的GPC4引腳來控制的,那么應該怎么配置呢?先看CPU對GPC4引腳的描述
?
圖1
?
圖2
?
SPD
串行端口(serial port)數據輸入/輸出引腳,這個引腳作為雙流向的(bi-directional)串行端口,在此作為輸入功能,和CPU的IICSDA連接,我們就算是通過IIC總線接口來讀寫CH7024的寄存器的。
?
SPC
串行端口時鐘輸入引腳,這個引腳作為串行端口的時鐘輸入引腳。在此作為輸入功能,和CPU的IICSCL連接。
?
RESET
復位輸入引腳,這個引腳被內部拉高,如果輸入低電平,CH7024就保持在上電的復位狀態(power-on reset condition);如果輸入高電平,那么就可以通過IIC總線接口來寫CH7024的復位寄存器0x03h[1]來復位所有的控制寄存器,見CH7024中對復位寄存器的描述
?
圖3
?
CVBS
混合視頻(composite video)輸出引腳,在S-video Y引腳沒有使用時,這是個主要的混合視頻輸出腳,但如果S-video Y引腳使用時這個引腳就關閉輸出了。
?
Y
亮度輸出(luma output)引腳,在主要的CVBS輸出引腳沒有使用的時候,這是個S-video亮度輸出引腳。
?
C/CVBS
色度(chroma)/CVBS輸出
當S-video使用的時候,這個引腳輸出S-video色度,當如果雙重的CVBS輸出有需要,這個輸出引腳就用來作為除首要的CVBS輸出(也即上面的CVBS引腳)之外的次要的CVBS輸出。
?
P-Out
像素時鐘輸出引腳,這個引腳可以提供時鐘信號給圖像控制器(比如LCD控制器),這可以作為基準頻率(reference frequency),當然了這個引腳也可以直接輸出時鐘給CH7024自身,這樣情況下CH7024就工作在主模式。
?
XI/FIN
晶振輸入/外部基準輸入引腳。
?
XO
晶振輸出引腳
?
XCLK
外部時鐘輸入引腳,這個時鐘輸入信號時作為H、V、DE和D[23:0]這些信號的輸入基準。
?
2.2?? CH7027作為IIC從設備的地址
#define AVO_WRITE???????? (0xEC + 0) //寫CH7024寄存器內容的IIC從設備的地址
#define AVO_READ ??????? (0xEC + 1)//讀取CH7024寄存器內容的IIC從設備的地址
因為我們的系統中CPU是通過IIC接口來camera驅動的TVP5150A和AVOUT驅動CH7024相互的,所以需要分配好它們作為從設備的地址,CH7024的datasheet好像是找不到它作為IIC從設備如何確定從地址,這里是我自己定的,只要不沖突就可以了,應該如此理解。
?
3.?????? AVOUT驅動模型
因為CPU是通過IIC接口來操作CH7024的,所以我借鑒了camera驅動的模型來建立AVOUT驅動的模型,下面我們來看AVO_Init函數中的主要內容:
?
圖4
下面來看看AVO_Initialize的函數體:
?
圖5
接下來看CH7024_WriteAndReadBlock的函數體
?
圖6
CH7024_YCbCr8bit_TV數組的內容如下:
?
圖7
這個數組一維的值是CH7024的寄存器地址,二維的值是寄存器對應的內容。那么這個數組需要包含CH7024哪些寄存器和其對應的值是多少了,這不僅和CH7024工作在主或者從模式有關,還和很多選擇和設置有關,下面部分就來看看是如何得出這個二維數組的內容的
?
?
1.?????? 如何使用CH7024的Setting Wizard.exe來獲取所需要初始化的寄存器的值
⑴雙擊Setting Wizard.exe,選擇Run Wizard來進入參數選擇向導。
?
圖8
⑵選擇Unusing Data Enable Signal
?
圖9
選擇Unusing Data Enable Signal的依據見CH7024的datasheet中的下面的描述
?
圖10
⑶選擇輸入數據的格式
?
圖11
圖12描述在MULTI=0時,對于不同的IDF的總線數據
?
圖12
圖13描述MULTI的使用
?
圖13
圖14描述告訴我們,只有在IDF=2,3和4時才用到HIGH控制位
?
圖14
圖15是IDF=0模式的RGB數據描述
?
圖15
圖16是IDF=0模式的RGB數據描述
?
圖16
⑷選擇輸出
?
圖17
圖18關于SEL_R的描述
?
圖18
⑸根據不同的選擇生成可能合適的HTI和VTI
?
圖19
?
圖20關于XCH的描述
?
?
圖20
?
?
圖21
?
?
2.?????? 如何選擇HTI和VTI,如何調試出正常顯示的圖像
?
圖22
圖22中選擇input之后,會在右邊的生成N組HTI和VTI,那么我們該選擇哪一組會更有利于我們進一步的調試呢(不是選好一組數據后生成寄存器的值之后就ok了),比較好的一組是VTI大于272/0.85(320)的有比較接近的一組,那自然而然我們開始肯定會選擇圖22中VTI=322這一組數據,雙擊322對應得這一行,彈出上面的對話框,選擇確定后點擊右下角的“Gen File”,然后會生成一組寄存器及其的值的文件在Setting Wizard.exe所在的目錄下,生成的文件名是RegSetting.ini,見下圖
?
圖23
我們從RegSetting.ini中獲得我們需要對CH7024哪些寄存器初始化,它們的值是多少,在RegSetting.ini中都有,這里面的值就是用來填充圖7的CH7024_YCbCr8bit_TV數組的內容,這樣我們就可以在電視機上驗證我們對CH7024寄存器的初始化是否正確了。
?
用VTI=322這組數據驗證后發現出來的圖像數據和在LCD上顯示的還有很大的差異,就我調試這時候存在的問題有下面幾點,下面就沒一點存在的問題怎么解決的總結一下:
注:下面提到的圖像都是指在電視機上顯示的圖像
⑴圖像左移(也就是左偏)和上移(也就是上偏)
為什么會這樣呢?應該是由于同一組設置參數產生的圖像在不同電視上顯示的差異性造成,故須預留一部分黑邊兼容不同電視差異,這樣在不同電視上都可以全部顯示輸入數據,但是在有些電視上會出現黑邊沒有充滿電視屏幕,所以我們在圖22中選擇更大的VTI那一組,經過調試發現,在VTI=360這一組的圖像不會左移和上移了。
?
⑵圖像向上快速移動
這種情況,我們可以微調VBPD的值,我有8為9后就可以定住圖像了,不會往上移動了,當然,微調VFPD也可以。
?
⑶在LCD上顯示的圖像在電視機上在水平方向大概只能顯示95%。
怎么解決這個問題呢?看下圖
?
圖24
從上圖第1Eh和1Fh的描述可知,這兩個寄存器的值越大在水平方向上顯示的TV圖像就越大,所以根據我們的問題,我們就需要把這個對TVHA的值調小,這樣才能讓在LCD上顯示的圖像在電視機上可以100%顯示,所以我們就需要在CH7024_YCbCr8bit_TV數組中添加者兩個寄存器,那么它們的值是多少合適的,這就根據調試的效果來決定了。
?
⑷圖像的顏色顯示等和LCD上顯示的顏色不一致
可以通過對寄存器0x05,0x06,0x07,0x08和0x09的調整來滿足。
?
調試總結:
⑴要利用Setting Wizard.exe工具來生成我們需要的寄存器的值。
⑵要認真搞清楚寄存器對應的作用,如何控制和跳轉。
⑶熟悉CH7024的引腳的功能。
?
?RK27電視輸出功能詳解V1.0_百度文庫
http://wenku.baidu.com/view/e3fbc638376baf1ffc4fad32.html
?
?
?
?
總結
以上是生活随笔為你收集整理的WINCE基于CH7024实现TV OUT (VGA)功能的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WINCE基于hive注册表的实现
- 下一篇: WINCE6.0 中文支持