<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于ARM處理器S3C2440A的便攜式視頻展示臺(tái)的設(shè)計(jì)

          基于ARM處理器S3C2440A的便攜式視頻展示臺(tái)的設(shè)計(jì)

          作者: 時(shí)間:2016-10-10 來源:網(wǎng)絡(luò) 收藏

          3.3 VGA驅(qū)動(dòng)設(shè)計(jì)方案
          3.3.1 LCD幀緩沖設(shè)備驅(qū)動(dòng)結(jié)構(gòu)
          幀緩沖是Linux為顯示設(shè)備提供的一個(gè)接口,它把一些顯示設(shè)備描述成一個(gè)緩沖區(qū),允許應(yīng)用程序通過FrameBuffer定義好的接口訪問這些圖形設(shè)備,而不用去關(guān)心具體的硬件細(xì)節(jié)。對(duì)于幀緩沖設(shè)備而言,只要在顯示緩沖區(qū)與顯示點(diǎn)對(duì)應(yīng)的區(qū)域?qū)懭腩伾?,?duì)應(yīng)的顏色就會(huì)自動(dòng)的在屏幕上顯示。LCD控制器驅(qū)動(dòng)是VGA設(shè)備驅(qū)動(dòng)的核心,是一個(gè)標(biāo)準(zhǔn)的linux2.6內(nèi)核下的framebuffer設(shè)備驅(qū)動(dòng)。在VGA驅(qū)動(dòng)設(shè)計(jì)的過程中首要的是配置LCD控制器。而在配置LCD控制器中最重要的一步則是幀緩沖區(qū)(FrameBuffer)的指定。因此,驅(qū)動(dòng)幀緩沖是實(shí)現(xiàn)是整個(gè)驅(qū)動(dòng)開發(fā)過程的重點(diǎn)。幀緩沖驅(qū)動(dòng)需要完成的的工作主要有5個(gè)部分:編寫初始化函數(shù),編寫成員函數(shù),讀寫,映射,輸入輸出控制。
          1)初始化LCD控制器
          通過寫寄存器,設(shè)置顯示模式和顏色數(shù),然后分配LCD顯示緩沖區(qū)。緩沖區(qū)大小為:點(diǎn)陣行數(shù)×點(diǎn)陣列數(shù)×用于表示一個(gè)像素的比特?cái)?shù)/8。緩沖區(qū)通常分配在大容量的片外SDRAM中,起始地址保存在LCD控制寄存器中。文中采用的LCD顯示方式為800x600,需要分配的顯示緩沖區(qū)為960 KB。最后是初始化一個(gè)fb_info結(jié)構(gòu),填充其中的成員變量,并調(diào)用register_framebuffer(tb_info),將fb_info登記入內(nèi)核。
          2)編寫成員函數(shù)
          該函數(shù)主要用于編寫fb_info()結(jié)構(gòu)體中指針fb_ops()對(duì)應(yīng)的底層操作函數(shù),主要是3個(gè)函數(shù):
          c.jpg
          以上這些函數(shù)都是用來獲取fb_info()中的成員變量的,當(dāng)應(yīng)用程序調(diào)用ioctl()操作時(shí)將會(huì)調(diào)用這些函數(shù)。
          讀寫函數(shù)就是用來讀寫屏幕緩沖區(qū),地址映射操作可以將文件的內(nèi)容映射到用戶空間,這樣用戶就可以通過讀寫這段地址來訪問緩沖區(qū)了。輸入輸出操作就是設(shè)備文件ioctl()讀取和設(shè)置顯示設(shè)備的參數(shù),具體的ioctl()的實(shí)現(xiàn)由底層驅(qū)動(dòng)程序來完成。
          3.3.2 根據(jù)VGA時(shí)序設(shè)定LCD控制器寄存器
          視頻展示臺(tái)選擇SVGA顯示,像素時(shí)鐘信號(hào)VCLK為40 MHz,分辨率為800x600,幀頻率為60 Hz,16位真色彩顯示,SVGA時(shí)序如下圖所示。

          本文引用地址:http://www.ex-cimer.com/article/201610/306063.htm

          d.JPG


          根據(jù)圖3、圖4所示SVGA顯示時(shí)序的特點(diǎn),對(duì)LCD控制器中的控制寄存器進(jìn)行如下配置。
          1)LCDCON1寄存
          CLKVAL:確定VCLK頻率的參數(shù)。公式為VCLK=HCLK/[(CLKVAL+1)x2],在本設(shè)計(jì)中的HCLK=100MHz,VCLK=40 MHz,故需設(shè)置CLKVAL=0.25,設(shè)置BPPMODE=0xC,即選擇TFT 16位模式。
          2)LCDCON2寄存器
          VBPD:確定幀同步信號(hào)和幀數(shù)據(jù)傳輸前的時(shí)延,是幀數(shù)據(jù)傳輸前延遲時(shí)間和行同步時(shí)鐘間隔寬度的比值,如圖4所示,VBPD=p/c=0.6 ms/20 μs=30。
          VFPD:確定幀數(shù)據(jù)傳輸完成后到下一幀同步信號(hào)到來的一段延時(shí),是幀數(shù)據(jù)傳輸后延遲時(shí)間和行同步時(shí)鐘間隔寬度的比值,VFPD=r/c= 0.026 ms/20μs=10。
          LINEVAL:確定顯示的垂直方向大小,LINEVAL=YSIZE-1=599。
          VSPW:確定幀同步時(shí)鐘脈沖寬度,是幀同步信號(hào)時(shí)鐘寬度和行同步時(shí)鐘間隔寬度的比值,VSPW=o/c=0.1 ms/20μs=5。
          3)LCDCON3寄存器
          HBPD:確定行同步信號(hào)和行數(shù)據(jù)傳輸前的延時(shí),描述行數(shù)據(jù)傳輸前延遲時(shí)間內(nèi)VCLK脈沖個(gè)數(shù),HBPD=bxVCLK=2.2μsx40 MHz=88。
          HOZAL:確定顯示的水平方向尺寸。這里HOZAL=XSIZE-1=799。
          HFPD:確定行數(shù)據(jù)傳輸完成后到下一行同步信號(hào)到來的一段延遲時(shí)間,描述行數(shù)據(jù)傳輸后延遲時(shí)間內(nèi)VCLK脈沖個(gè)數(shù),HFPD=dxVCLK=1 μsx40 MHz=40。
          4)LCDCON4寄存器
          HSPW:確定行同步時(shí)鐘脈沖寬度。描述行同步脈沖寬度時(shí)間內(nèi)VCLK脈沖個(gè)數(shù),HSPW=axVCLK=3.2μsx40 MHz=128。
          5)LCDCON5寄存器
          BPP24BL:確定數(shù)據(jù)存儲(chǔ)格式。此處設(shè)置BPP24BL=0x0,即選擇小端模式存放。
          FRM565:確定16位數(shù)據(jù)輸出格式。設(shè)置FRM565=0x1,即選擇5:6:5的輸出格式。

          4 結(jié)束語
          文中根據(jù)市場(chǎng)對(duì)視頻展示臺(tái)的大量需求現(xiàn)狀,提出了基于9的S3C2440的視頻展示臺(tái)的設(shè)計(jì)方案。與用CPLD/FPGA來實(shí)現(xiàn)VGA顯示的系統(tǒng)相比,本方案節(jié)約成本和資源,且接口電路簡(jiǎn)單,應(yīng)用靈活、可靠。由本方案做成的視頻展示臺(tái)體積小,易于攜帶。本方案經(jīng)過Linux軟件測(cè)試論證,方案切實(shí)可行,對(duì)實(shí)物、圖片、文檔或者過程的顯示效果清晰,無抖動(dòng)。


          上一頁 1 2 下一頁

          關(guān)鍵詞: S3C2440A ARM 處理器 便攜式

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();