梁皓東,張國平,潘 梁
(1.華中師范大學(xué) 物理科學(xué)與技術(shù)學(xué)院,湖北 武漢 430079;2.湖北省武黃高速管理處 湖北 武漢 430079)
視頻展示臺是將實(shí)物、文稿、圖片和過程等信息轉(zhuǎn)換為圖像信號輸出在投影機(jī)、顯示器上展示出來的一種演示設(shè)備。便攜式視頻展示臺由于具有體積小,易于攜帶等優(yōu)點(diǎn),被廣泛用于教學(xué)、大型會議及產(chǎn)品展示等場合,具有較大的研究前景。本視頻展示臺的設(shè)計(jì)采用三星基于ARM9內(nèi)核的S3C2440A芯片,運(yùn)用模塊化的設(shè)計(jì)原則,具有體積小、便攜帶、低功耗、易維護(hù)性等特點(diǎn),整個系統(tǒng)的設(shè)計(jì)由兩部分構(gòu)成,分別是實(shí)物、圖片、文檔或者過程等圖像采集部分和VGA傳輸顯示部分。此視頻展示臺的顯示分辨率為800×600。
本便攜式視頻展示臺采用三星S3C2440A處理器,其CPU的工作頻率可達(dá)400 MHz,可以很好的處理圖像數(shù)據(jù)。它的外設(shè)包括:LCD控制器、CAMIF單元、UART接口、IIC BUS接口、USB主從接口等。系統(tǒng)采用具有極快讀寫速度的2片32 MB的SDRAM來保證linux操作系統(tǒng)的流暢運(yùn)行,采用具有掉電保護(hù)功能的128 MB的Nandflash來存放操作系統(tǒng)和驅(qū)動程序。此外,130萬像素的ov9650攝像頭用來采集視頻圖像數(shù)據(jù),ADV7120將數(shù)字RGB信號轉(zhuǎn)換成VGA顯示需要的模擬彩色信號,顯示分辨率為800×600。電源管理模塊能夠提供多種供電,包括芯片內(nèi)核電壓采用1.8 V供電,芯片的IO口部分采用3.3 V供電。為了給實(shí)物、文檔、圖片或者演示過程提供照明光源,在ov9650攝像頭旁邊加了一圈led小燈。下圖1是方案的硬件電路設(shè)計(jì)框圖。
視頻采集模塊是本便攜式視頻展示臺的一個重要組塊之一。本模塊采用攝像頭接口控制單元CAMIF和IIC總線來控制和傳輸OV9650攝像頭采集實(shí)物、圖片、文檔或者過程等視頻數(shù)據(jù)。選擇CMOS傳感器是因?yàn)樗泄牡汀⒕幊谭奖?、成本低等?yōu)點(diǎn)。其主要引腳及功能描述如下:CAMCLKOUT是CPU輸出的采樣時鐘,幀同步信號VSYNC、行同步信號HREF、像素時鐘信號PCLK由OV9650內(nèi)部產(chǎn)生,輸入到S3C2440A芯片中,用于對圖像采集進(jìn)行控制。攝像頭在每個PCLK脈沖過程中依次采集—個字節(jié)的數(shù)據(jù),直到一幀圖像數(shù)據(jù)采集完成[1]。
圖1 實(shí)物投影儀硬件電路設(shè)計(jì)框圖Fig.1 Design block diagram of portable video
攝像頭采集的數(shù)據(jù)經(jīng)過處理后進(jìn)入幀緩沖區(qū),幀緩沖區(qū)由4個Ping Pong存貯器組成,因此圖像幀的讀寫操作可以同時進(jìn)行。然后通過預(yù)覽DMA連到AHB總線上,通過AHB總線將數(shù)據(jù)送往內(nèi)存。整個過程由linux操作系統(tǒng)來控制,如圖2所示。
圖2 視頻圖像采集過程Fig.2 The process of video image
file_operations結(jié)構(gòu)是Linux2.6內(nèi)核提供的一個標(biāo)準(zhǔn)化的文件操作實(shí)現(xiàn)接口,定義ov9650_ops為file_operations結(jié)構(gòu)。編寫用于上層軟件接口函數(shù):
通過這些調(diào)用函數(shù),應(yīng)用程序就可實(shí)現(xiàn)對CMOS攝像頭的打開、關(guān)閉、視頻數(shù)據(jù)的讀取、內(nèi)部寄存器的設(shè)置等進(jìn)行操作。在啟動驅(qū)動程序時,系統(tǒng)首先調(diào)用已經(jīng)定義的ov9650攝像頭驅(qū)動程序的入口函數(shù)init(ov9650_init)對攝像頭進(jìn)行初始化,初始化的主要內(nèi)容是復(fù)位、通過IIC配置相關(guān)攝像頭寄存器、攝像頭采樣時鐘配置以及中斷配置等,然后等待進(jìn)一步命令。應(yīng)用程序使用結(jié)束后,系統(tǒng)調(diào)用已經(jīng)定義的ov9650出口函數(shù) exit(ov9650_exit)退出[2]。
本便攜式視頻展示臺的另一個重要組塊是VGA顯示模塊。S3C2440A帶有LCD控制器,可以很方便地控制驅(qū)動掃描式接口的TFT顯示。其主要功能引腳有:像素時鐘信號引腳VCLK/LCD,場同步信號引腳VFRAME/VSYNC,行同步信號引腳 VLINE/HSYNC,VD[23:0]是 LCD數(shù)據(jù)輸出端口。 當(dāng)把VSYNC、HSYNC、VCLOCK等信號參數(shù)設(shè)定好,并把幀內(nèi)存(frame memory)的地址告訴LCD控制器后,LCD控制器即可通過DMA自動獲取幀內(nèi)存中的圖像數(shù)據(jù)[3]。
VGA接口使用模擬RGB通道,逐點(diǎn)、逐行掃描。VGA接口信號為模擬信號,其關(guān)鍵信號有5個,分別是行同步信號,場同步信號,紅色模擬信號,綠色模擬信號和籃色模擬信號。電子槍從左至右,從上而下的進(jìn)行掃描,每行結(jié)束時,用行同步信號進(jìn)行同步。掃描完所有的行后用場同步信號進(jìn)行場同步。
通過比較LCD掃描式接口時序和VGA時序可知,LCD控制器驅(qū)動TFT顯示的行場同步信號時序和VGA行場同步信號時序很像。只是信號的極性VGA是負(fù)極性,LCD信號是正極性,這個通過調(diào)整Linux內(nèi)核顯示模塊來調(diào)整LCD的時序以適應(yīng)SVGA時序即可。因此,可以利用高性能視頻D/A轉(zhuǎn)換芯片ADV7120將S3C2440A自帶的LCD掃描式接口轉(zhuǎn)換為VGA接口,然后用帶有VGA接口的顯示器顯示。此外,LCD控制器用于控制數(shù)據(jù)信號的使能的引腳VDEN在D/A轉(zhuǎn)換模塊中可用來控制信號轉(zhuǎn)換的使能,LCD控制器的VCLK可用作D/A轉(zhuǎn)換模塊的時鐘信號。
ADV7120的輸入及控制信號非常簡單:3組8位的數(shù)字視頻數(shù)據(jù)輸入端,用以連接LCD控制器的數(shù)據(jù)輸出接口VD[23:0],數(shù)據(jù)輸入端采用標(biāo)準(zhǔn)TTL電平接口;4條視頻控制信號線包括復(fù)合同步信號SYNC、消隱信號BLANK、白電平參考信號REF WHITE和像素時鐘信號CLOCK,外接一個1.23 V數(shù)模轉(zhuǎn)換參考電壓源和1個輸出滿度調(diào)節(jié)。
ADV7120的輸出信號只有4條:3條模擬RGB信號和同步參考電流輸出信號Isync。VGA接口的行場同步信號和LCD掃描式接口的行場同步信號是一致的,因此LCD控制器接口中的行場同步掃描信號HSYNC和VSYNC直接接到VGA接口。LCD控制器和VGA接口是由硬件實(shí)現(xiàn)的兩種接口的電器轉(zhuǎn)接,不需要寫任何驅(qū)動程序,這是在嵌入式系統(tǒng)平臺上擴(kuò)張VGA接口最方便的方案[4],也是本便攜式視頻展示臺體積小,易攜帶性設(shè)計(jì)的基礎(chǔ)。
3.3.1 LCD幀緩沖設(shè)備驅(qū)動結(jié)構(gòu)
幀緩沖是Linux為顯示設(shè)備提供的一個接口,它把一些顯示設(shè)備描述成一個緩沖區(qū),允許應(yīng)用程序通過FrameBuffer定義好的接口訪問這些圖形設(shè)備,而不用去關(guān)心具體的硬件細(xì)節(jié)。對于幀緩沖設(shè)備而言,只要在顯示緩沖區(qū)與顯示點(diǎn)對應(yīng)的區(qū)域?qū)懭腩伾担瑢?yīng)的顏色就會自動的在屏幕上顯示。LCD控制器驅(qū)動是VGA設(shè)備驅(qū)動的核心,是一個標(biāo)準(zhǔn)的linux2.6內(nèi)核下的framebuffer設(shè)備驅(qū)動。在VGA驅(qū)動設(shè)計(jì)的過程中首要的是配置LCD控制器。而在配置LCD控制器中最重要的一步則是幀緩沖區(qū)(FrameBuffer)的指定。因此,驅(qū)動幀緩沖是實(shí)現(xiàn)是整個驅(qū)動開發(fā)過程的重點(diǎn)。幀緩沖驅(qū)動需要完成的的工作主要有5個部分:編寫初始化函數(shù),編寫成員函數(shù),讀寫,映射,輸入輸出控制。
1)初始化LCD控制器
通過寫寄存器,設(shè)置顯示模式和顏色數(shù),然后分配LCD顯示緩沖區(qū)。緩沖區(qū)大小為:點(diǎn)陣行數(shù)×點(diǎn)陣列數(shù)×用于表示一個像素的比特?cái)?shù)/8。緩沖區(qū)通常分配在大容量的片外SDRAM中,起始地址保存在LCD控制寄存器中。文中采用的LCD顯示方式為800×600,需要分配的顯示緩沖區(qū)為960 KB。最后是初始化一個fb_info結(jié)構(gòu),填充其中的成員變量,并調(diào)用register_framebuffer( &fb_info),將 fb_info 登記入內(nèi)核[5]。
2)編寫成員函數(shù)
該函數(shù)主要用于編寫fb_info()結(jié)構(gòu)體中指針fb_ops()對應(yīng)的底層操作函數(shù),主要是3個函數(shù):
static int s3c2440fb_get_fix (struct fb_fix_screeninfo*fix,int con, st ruct fb_info 3 info);
static int s3c2440fb_get_var (struct fb_var_screeninfo*var,int con, st ruct fb_info 3 info);
static int s3c2440fb_set_var (struct fb_var_screeninfo*var,int con, st ruct fb_info 3 info);
以上這些函數(shù)都是用來獲取fb_info()中的成員變量的,當(dāng)應(yīng)用程序調(diào)用ioctl()操作時將會調(diào)用這些函數(shù)。
讀寫函數(shù)就是用來讀寫屏幕緩沖區(qū),地址映射操作可以將文件的內(nèi)容映射到用戶空間,這樣用戶就可以通過讀寫這段地址來訪問緩沖區(qū)了。輸入輸出操作就是設(shè)備文件ioctl()讀取和設(shè)置顯示設(shè)備的參數(shù),具體的ioctl()的實(shí)現(xiàn)由底層驅(qū)動程序來完成[6]。
3.3.2 根據(jù)VGA時序設(shè)定LCD控制器寄存器
本便攜式視頻展示臺選擇SVGA顯示,像素時鐘信號VCLK為 40 MHz,分辨率為 800x600,幀頻率為 60 Hz,16位真色彩顯示,SVGA時序如下圖所示。
根據(jù)圖3、圖4所示 SVGA顯示時序的特點(diǎn),對LCD控制器中的控制寄存器進(jìn)行如下配置。
1)LCDCON1寄存
CLKVAL:確定VCLK頻率的參數(shù)。公式為VCLK=HCLK/[(CLKVAL+1)x2]. 在 本 設(shè) 計(jì) 中 S3C2440A 的 HCLK=100 MHz,VCLK=40 MHz, 故 需 設(shè) 置 CLKVAL=0.25, 設(shè) 置BPPMODE=0xC,即選擇TFT 16位模式。
圖3 VGA行數(shù)據(jù)時序Fig.3 Line timing
圖4 VGA幀數(shù)據(jù)時序Fig.4 Frame timing
2)LCDCON2 寄存器
VBPD:確定幀同步信號和幀數(shù)據(jù)傳輸前的時延,是幀數(shù)據(jù)傳輸前延遲時間和行同步時鐘間隔寬度的比值,如圖4所示,VBPD=p/c=0.6 ms/20 μs=30。
VFPD:確定幀數(shù)據(jù)傳輸完成后到下一幀同步信號到來的一段延時,是幀數(shù)據(jù)傳輸后延遲時間和行同步時鐘間隔寬度的比值,VFPD=r/c=0.026 ms/20 μs=10。
LINEVAL:確定顯示的垂直方向大小,LINEVAL=YSIZE-1=599。
VSPW:確定幀同步時鐘脈沖寬度,是幀同步信號時鐘寬度和行同步時鐘間隔寬度的比值,VSPW=o/c=0.1 ms/20 μs=5。
3)LCDCON3 寄存器
HBPD:確定行同步信號和行數(shù)據(jù)傳輸前的延時,描述行數(shù)據(jù)傳輸前延遲時間內(nèi)VCLK脈沖個數(shù),HBPD=b×VCLK=2.2 μs×40 MHz=88.
HOZAL:確定顯示的水平方向尺寸。這里HOZAL=XSIZE-1=799。
HFPD:確定行數(shù)據(jù)傳輸完成后到下一行同步信號到來的一段延遲時間,描述行數(shù)據(jù)傳輸后延遲時間內(nèi)VCLK脈沖個數(shù),HFPD=d×VCLK=1 μs×40 MHz=40。
4)LCDCON4 寄存器
HSPW:確定行同步時鐘脈沖寬度。描述行同步脈沖寬度時間內(nèi) VCLK 脈沖個數(shù),HSPW=a×VCLK=3.2 μs×40 MHz=128。
5)LCDCON5 寄存器
BPP24BL:確定數(shù)據(jù)存儲格式。此處設(shè)置BPP24BL=0x0,即選擇小端模式存放。
FRM565:確定16位數(shù)據(jù)輸出格式。設(shè)置FRM565=0x1,即選擇5:6:5的輸出格式。
文中根據(jù)市場對視頻展示臺的大量需求現(xiàn)狀,提出了基于ARM9的S3C2440的便攜式視頻展示臺的設(shè)計(jì)方案。與用CPLD/FPGA來實(shí)現(xiàn)VGA顯示的系統(tǒng)相比,本方案節(jié)約成本和資源,且接口電路簡單,應(yīng)用靈活、可靠。由本方案做成的視頻展示臺體積小,易于攜帶。本方案經(jīng)過Linux軟件測試論證,方案切實(shí)可行,對實(shí)物、圖片、文檔或者過程的顯示效果清晰,無抖動。
[1]OV9650FSL Userps manual 2003[Z].OmniVision Co.Ltd:3220.
[2]周曉光,潘延濤.基于S3C2440A的嵌入式視頻系統(tǒng)設(shè)計(jì)[J].電子測量技術(shù),2006,6(12):84-86.ZHOU Xiao-guang,PAN Yan-tao.Design of embedded video system based on S3C2440A [J].Electronic Measurement Technology,2006,6(12):84-86.
[3]紀(jì)寧寧,孫靈燕.S3C2440A驅(qū)動RGB接口TFT LCD的研究[J].液晶與顯示,2008,1(2):96-100.JI Ning-ning,SUN Ling-yan.Study of TFT LCD about RGB driver of S3C2440[J].Chinese Journal of Liquid Crystals and Displays,2008,1(2):96-100.
[4]鄭佃好,張紅雨,張洪斌.基于ADV7125的嵌入式系統(tǒng)VGA接口設(shè)計(jì)[J].新器件新技術(shù),2011,8(4):37-45.ZHENG Tian-hao,ZHANG Hong-yu,ZHANG Hong-bing.Embedded System VGA Interface Design Based on ADV7125[J].Newproduct&Tech,2011,8(4):37-45.
[5]韋東山.嵌入式Linux應(yīng)用開發(fā)完全手冊[M].北京:人民郵電出版社,2008.
[6]劉淼.嵌入式系統(tǒng)接口設(shè)計(jì)與Linux驅(qū)動程序開發(fā)[M].北京:北京航空航天大學(xué)出版社,2006.