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