freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于嵌入式linux電表采集終端顯示模塊設計論文-在線瀏覽

2025-01-13 02:39本頁面
  

【正文】 器/客戶端結構,適應面廣,非常靈活方便。3. 專門定位于嵌入式平臺的通用GUI產(chǎn)品,如Mini GUI,Micro Window等。它們大多支持多窗口的隨意切換、覆蓋、以及可移動、可動態(tài)改變尺寸的窗口,諸如此類在多數(shù)嵌入式應用中幾乎永遠用不到的特性,使得應用程序的開發(fā)要考慮很多不必要的細節(jié)。同時,它的響應速度也要有很大提高,進一步滿足實時性要求[3]。字符設備和塊設備的主要區(qū)別是:在對字符設備發(fā)出讀/寫請求時,實際的硬件I/O一般就緊接著發(fā)生了。為提高效率,系統(tǒng)對于塊設備的讀寫提供了緩存機制,由于涉及緩沖區(qū)管理、調(diào)度和同步等問題,實現(xiàn)起來比字符設備復雜得多。 Linux設備管理Linux的設備管理是和文件系統(tǒng)緊密結合的,各種設備都以文件的形式存放在/dev目錄下,稱為設備文件。為了管理這些設備,系統(tǒng)為設備編了號,每個設備號又分為主設備號和次設備號。對于常用設備,Linux有約定俗成的編號,如硬盤的主設備號是3。這個數(shù)據(jù)結構中包括許多操作函數(shù)的指針,如open()、close()、read()和write()等,但由于外設的種類較多,操作方式各不相同。打開一個文件就是調(diào)用這個文件file_operations中的open操作。這樣,應用程序根本不必考慮操作的是設備還是普通文件,可一律當作文件處理,具有非常清晰統(tǒng)一的I/O接口。 framebuffer驅(qū)動幀緩沖區(qū)是出現(xiàn)在Linux ,這種接口將顯示設備抽象為幀緩沖區(qū)設備區(qū)。這樣軟件無須了解任何涉及硬件底層驅(qū)動的東西(如硬件寄存器)。通過專門的設備節(jié)點可對該設備進行訪問,如/dev/fb*。 硬件介紹LCD(液晶顯示)模塊滿足了嵌入式系統(tǒng)日益提高的要求,它可以顯示漢字、字符和圖形,同時還具有低壓、低功耗、體積小、重量輕和超薄等很多優(yōu)點。因此在嵌入式系統(tǒng)中開發(fā)LCD驅(qū)動得以廣泛運用。 LCD控制器LCD控制器的功能是顯示驅(qū)動信號,進而驅(qū)動LCD。在驅(qū)動LCD設計的過程中首要的是配置LCD控制器,而在配置LCD控制器中最重要的一步則是幀緩沖區(qū)(framebuffer)的指定。幀緩沖區(qū)的大小由屏幕的分辨率和顯示色彩數(shù)決定。S3C2410中的LCD控制器可支持STN和TFT兩種液晶。TFT液晶平板可支持1248bpp(bits per pixel)調(diào)色板顯示模式和16bpp非調(diào)色板真彩顯示。除了控制信號,S3C2410還有輸出視頻數(shù)據(jù)的端口VD[23:0]。2. 控制流程REGBANK、LCDCDMA、VIDPRCS和LPC3600組成()。LCDCDMA是一個專用DMA,自動從幀存儲器傳輸數(shù)據(jù)到LCD控制器,用這個特殊的DMA,視頻數(shù)據(jù)可不經(jīng)過CPU干涉就顯示在屏幕上。TIMEGEN由可編程邏輯組成,以支持不同LCD驅(qū)動器的接口時序和速率的不同要求。REGBANKTIMEGENVIDEOMUXLCDCDMAVIDPRCSLPC3600VCLK/LCDHCLKVLINE/VSYNC/CPVVFRAME/VSYNC/SYVVM/VDEN/TPLCDVF0LCDVF1LCDVF2VD[23:0] S3C2410 LCD控制器內(nèi)部方框圖3. 數(shù)據(jù)流描述FIFO存儲器位于LCDCDMA。當這個傳送請求被存儲控制器中的總線仲裁器接受到后,從系統(tǒng)存儲器到內(nèi)部FIFO就會成功傳送4個字。S3C2410有兩個FIFO來支持雙掃描顯示模式。4. TFT控制器操作S3C2410支持STNLCD和TFTLCD。這些控制信號與REGBANK寄存器組中的LCDCON1/2/3/4/5寄存器的配置關系相當密切,基于LCD控制寄存器中的這些可編程配置,TIMEGEN產(chǎn)生可編程控制信號來支持不同類型的LCD驅(qū)動器。HOZVAL和LINEVAL的值由LCD屏的尺寸決定,見式()、():HOZVAL = 水平顯示尺寸 1 ()LINEVAL = 垂直顯示尺寸 1 ()VCLK信號的頻率取決于LCDCON1寄存器中的CLKVAL域。大多數(shù)LCD驅(qū)動器都需要與顯示器相匹配的幀頻率,幀頻率計算公式如下:RATE = 1/{[(VSPW+1)+(VBPD+1)+(LINEVAL+1)+(VFPD+1)]*[(HSPW+1)+(HBPD+1)+(HFPD+1)+(HOZVAL+1)*[2*(CLKVAL+1)/(HCLK)]} ()[5] 小鍵盤驅(qū)動Linux由于其具有內(nèi)核強大且穩(wěn)定,易于擴展和裁減,豐富的硬件支持等諸多優(yōu)點,在嵌入式系統(tǒng)中得到了廣泛的應用。 Linux鍵盤驅(qū)動概述Linux中的大多數(shù)驅(qū)動程序都采用了層次型的體系結構,鍵盤驅(qū)動程序也不例外。其中,上層是一個通用的鍵盤抽象層,完成鍵盤驅(qū)動中不依賴于底層具體硬件的一些功能,并且負責為底層提供服務;下層則是硬件處理層,與具體硬件密切相關,主要負責對硬件進行直接操作。該文件中最重要的就是內(nèi)核用EXPORT_SYMBOL這個宏導出的handle_scancode函數(shù)??梢钥闯觯@個函數(shù)完成的是鍵盤驅(qū)動程序中最核心的一些工作,而這些核心的邏輯功能是不依賴于底層硬件的,所以可以將其獨立出來,并且導出給底層的硬件處理函數(shù)調(diào)用。比如kbd_init_hw, kbd_translate, kbd_unexpected_up等等。例如PC平臺上標準鍵盤的底層硬件處理函數(shù)都集中在driver/。在這種體系結構下,要添加一塊特殊鍵盤到系統(tǒng)中就顯得格外清晰。一般說來,底層硬件處理函數(shù)中最重要的工作就是在鍵盤中斷處理中獲取被按下鍵的掃描碼,并且以它為參數(shù)調(diào)用handle_scancode,該掃描碼可以自己定義,但它必須唯一地標識出被按下鍵在鍵盤上的位置。具體的鍵碼轉(zhuǎn)換,將目標碼放到終端的輸入緩沖區(qū),以及回顯等工作都由handle_scancode負責完成。 小鍵盤硬件描述本系統(tǒng)的構建選用了三星公司的S3C2410開發(fā)板作為硬件平臺。ZLG7289A是廣州周立功單片機發(fā)展有限公司自行設計的,具有SPI串行接口功能的可同時驅(qū)動8位共陰式數(shù)碼管(或64只獨立LED)的智能顯示驅(qū)動芯片,該芯片同時還可連接多達64鍵的鍵盤矩陣,單片即可完成LED顯示、鍵盤接口的全部功能。 實現(xiàn)原理在鍵盤產(chǎn)生按鍵動作之后,鍵盤上的掃描芯片獲得鍵盤的掃描碼,并將其發(fā)送到主機端。模式判斷的對應關系如下圖所示:鍵盤模式有4種,這四種模式的對應關系是:Scancode mode(RAW)模式:將鍵盤端口上讀出的掃描碼放入緩沖區(qū),通過參數(shù)s可以設置。ASCII mode(XLATE)模式:識別各種鍵盤碼的組合,轉(zhuǎn)換為TTY終端代碼放入緩沖區(qū),通過參數(shù)a可以設置。4.電表終端顯示模塊的設計與實現(xiàn)自20世紀80年代以來,隨著液晶屏幕成本的降低,各種嵌入式圖形消費產(chǎn)品和工業(yè)設備逐步獲得了廣泛的應用,從面向?qū)I(yè)人員的高端產(chǎn)品逐步轉(zhuǎn)變成為面向普通消費者和普通技術人員的低端產(chǎn)品??紤]到實際應用的專用性以及消費類產(chǎn)品對成本的敏感性,由桌面PC操作系統(tǒng)演變來的Windows CE /QT Embedded等嵌入式操作系統(tǒng)所提供的GU I所要求的資源普遍較高。因此本文從實際應用出發(fā),在上文完成的framebuffer驅(qū)動和小鍵盤驅(qū)動基礎上,開發(fā)了一套適合電表采集終端顯示信息的圖形界面。如果系統(tǒng)有多個顯卡,Linux還支持多個幀緩沖設備,最多可達32個,即/dev/fb0~/dev/fb31。當然在嵌入式系統(tǒng)中支持一個顯示設備就夠了。分別對應/dev/fb0~/dev/fb31。在文件層為之定義了以下數(shù)據(jù)結構。主要結構體還有以下幾個。它包含了屏幕緩沖區(qū)的物理地址和長度。它包括顯示屏幕的分辨率、每個像素的比特數(shù)和一些時序變量。 struct fb_info:Linux為幀緩沖設備定義的驅(qū)動層接口。每個幀緩沖設備都與一個fb_info結構相對應。 LCD驅(qū)動開發(fā)的主要工作包括如下三個步驟:初始化函數(shù)首先初始化LCD控制器,通過寫寄存器設置顯示模式和顏色數(shù),然后分配LCD顯示緩沖區(qū)。緩沖區(qū)大小為:點陣行數(shù)點陣列數(shù)用于表示一個像素的比特數(shù)/8。本文采用的LCD顯示方式為240320,16位彩色,則需要分配的顯示緩沖區(qū)為2403202=150kb。fb_info),將fb_info登記入內(nèi)核。struct fb_ops{…… int (*fb_get_fix)(struct fb_fix_screeninfo *fix, int con, struct fb_info *info)。int (*fb_set_var)(struct fb_var_screeninfo *var, int con, struct fb_info *info)。這些函數(shù)都是用來設置/獲取fb_info結構中的成員變量的。對于fb_get_fix(),應用程序傳入的是fb_fix_screeninfo結構,在函數(shù)中對其成員變量賦值,主要是smem_start(緩沖區(qū)起始地址)和smem_len(緩沖區(qū)長度),最終返回給應用程序。 實現(xiàn)顯示設備的主要操作。 映射(map)操作:由于Linux工作在內(nèi)核保護模式,每個應用程序都有自己的虛擬地址空間,在應用程序中是不能直接訪問物理緩沖區(qū)地址的。對于幀緩沖設備,則可通過映射操作,可將屏幕緩沖區(qū)的物理地址映射到用戶空間的一段虛擬地址中,之后用戶就可以通過讀寫這段虛擬地址訪問屏幕緩沖區(qū),在屏幕上繪圖了。ioctl的操作是由底層的驅(qū)動程序來完成的。 加載LCD驅(qū)動編寫模塊化驅(qū)動程序,有以下幾個關鍵的函數(shù)。 s3c2410fb_init(void)//當模塊被載入時執(zhí)行 s3c2410fb_ioctl(struct*inode, struct*file, unsigned int cmd, unsigned longarg) //其他功能 每當裝配設備驅(qū)動程序時,系統(tǒng)自動調(diào)用初始化模塊s3c2410fb_init(void)。執(zhí)行insmod ,執(zhí)行rmmod s3c2410fb命令即可從內(nèi)核中刪除LCD驅(qū)動。s3c2410_keypad_init ()在對鍵盤的工作模式及其他參數(shù)進行配置后,調(diào)用HW_keypad_init()。然后將keyboard tasklet加入到tasklet鏈表中。 響應按鍵 如何處理鍵盤事件是鍵盤驅(qū)動中最為重要的一部分。handle_scancode()這個函數(shù)完成按鍵處理的過程,它的功能是與TY設備通訊,keymap表裝入,按鍵處理。這個函數(shù)就是將處理函數(shù)的結果發(fā)送到TY或者console進行顯示。這里調(diào)用函數(shù)pckdb_translate,實現(xiàn)了scancode和keycode之間的轉(zhuǎn)換。 圖形引擎的設計 全局變量的定義static unsigned char* _lGUI_pFrameBuffer。static struct fb_var_screeninfo _lGUI_vInfo。static int _lGUI_iFrameHeight。 圖形引擎初始化_lGUI_iFrameBuffer = open (/dev/fb0, O_RDWR)。_lGUI_vInfo)。_lGUI_iFrameWidth=。打開fb0,并將framebuffer映射到用戶空間字符數(shù)組,首地址存放在_lGUI_pFrameBuffer中。無論何時,只要程序在分配的地址范圍內(nèi)進行讀取或者寫入,實際上就是對設備的訪問,使用 mmap 可以既快速又簡單地訪問顯示卡的內(nèi)存。 基本圖元設計1. 點的繪制void inline lGUI_SetPixel_Direct( int x, int y, COLORREF color){ unsigned char* pDest。 if(_lGUI_iBytesPerPixel == 3){ *pDest = B(color)。 *(pDest+2) = R(color)。}首先計算將要畫點的地址。然后根據(jù)定義的顏色結構,將pDest強制類型轉(zhuǎn)換為定義的顏色類型指針,最后在pDest指向的地址里賦值。2. 直線的繪制直線由點構成,更精確的說,直線是由靠近這條線的像素構成。本文使用簡單的直線方程算法。假設我們已經(jīng)知道直線的起始坐標點(Xbegin,Ybegin)和終點(Xend,Yend),x,y,是當前的坐標點,如果我們通過增加x反算出y的方法的話,這個公式就可以很容易轉(zhuǎn)換為偽代碼。case 水平在x,Ybegin處畫點for y = Ybegin to Yenddefault:{在x,y處畫點//draw rectangle frame with color crFrameColorBOOL GUIAPIDrawRect( RECT *lprc, COLORREF crFrameColor){ int i。 //top line LineTo(lprc,lprcleft,lprctop,lprcright1,lprctop,crFrameColor)。 //right line LineTo(lprc,lprcright,lprctop+1,lprcright,lprcbottom,crFrameColor)。 return true。 if(!lprc) return false。inBottomRect。point)。 LineTo(lprc,nLeftRect,i,nRightRect1,i,crFillColor)。 } 顯示ASCII碼點陣字
點擊復制文檔內(nèi)容
黨政相關相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1