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

正文內(nèi)容

基于嵌入式linux電表采集終端顯示模塊設(shè)計論文-文庫吧資料

2024-11-18 02:39本頁面
  

【正文】 x、y表示點位于LCD顯示屏上的第x行,第y列,由此計算映射到用戶空間的字符數(shù)組的偏移量,加上字符數(shù)組首地址既是要畫點的地址pDest。 } else *((PCOLORREF)pDest)=color。 *(pDest+1) = G(color)。 pDest = _lGUI_pFrameBuffer + _lGUI_iLineSize * y + (x * _lGUI_iBytesPerPixel)。對于象這樣的性能要求比較嚴格的應(yīng)用來說,直接訪問能給我們提供很大不同。使用mmap函數(shù)使用戶空間的一段內(nèi)存關(guān)聯(lián)到設(shè)備內(nèi)存(framebuffer)上。_lGUI_pFrameBuffer =mmap (NULL, _lGUI_iBufferSize, PROT_READ | PROT_WRITE, MAP_SHARED, _lGUI_iFrameBuffer, 0)。_lGUI_iFrameHeight=。ioctl (_lGUI_iFrameBuffer, FBIOGET_VSCREENINFO, amp。其中_lGUI_pFrameBuffer是用來將framebuffer映射到用戶空間,_lGUI_fInfo,_lGUI_vInfo分別用來存儲framebuffer的不可變信息和可變信息。static int _lGUI_iFrameWidth。static struct fb_fix_screeninfo _lGUI_fInfo。 通用按鍵處理在完成鍵盤掃描碼轉(zhuǎn)換之后就可以進行按鍵處理。 轉(zhuǎn)化按鍵掃描碼 在完成鍵盤的初始化之后,就需要完成對鍵盤掃描碼的轉(zhuǎn)化。handle_scancode()處理的結(jié)果就是把按鍵發(fā)給相應(yīng)的處理函數(shù),這些函數(shù)基本上都會調(diào)用put_queue()函數(shù)。當(dāng)有按鍵事件產(chǎn)生時,則用鍵盤中斷處理函數(shù),也就是IRQ_keypad_interrupt(),它會調(diào)用到HR_del_pre_scancode()并調(diào)用handle_scancode()函數(shù)。至此鍵盤驅(qū)動的初始化工作已經(jīng)完成。對于上層來說,s3c2410_keypad_init()是一個統(tǒng)一的接口,對于不同體系結(jié)構(gòu)或同體系下的不同開發(fā)板,它們的HW_keypad_init()的實現(xiàn)代碼是不同的,它就是進行鍵盤的硬件初始化功能。 小鍵盤驅(qū)動實現(xiàn) 初始化s3c2410_keypad_init()函數(shù)是鍵盤代碼執(zhí)行的入口點。另一個必須提供的函數(shù)是s3c2410fb_exit(void),它在模塊被卸載時調(diào)用,負責(zé)進行設(shè)備驅(qū)動程序的工作。 s3c2410fb_exit(void)//當(dāng)模塊被移出內(nèi)核空間時被執(zhí)行 在應(yīng)用程序中,操作/dev/fb的一般步驟如下:打開/dev/fb設(shè)備文件;用ioctrl操作取得當(dāng)前顯示屏幕的參數(shù),如屏幕分辨率和每個像素的比特數(shù),根據(jù)屏幕參數(shù)可計算屏幕緩沖區(qū)的大?。粚⑵聊痪彌_區(qū)映射到用戶空間;映射后即可直接讀寫屏幕緩沖區(qū),進行繪圖和圖片顯示了。 I/O控制:對于幀緩沖設(shè)備,對設(shè)備文件的ioctl操作可讀取/設(shè)置顯示設(shè)備及屏幕的參數(shù),如分辨率、顯示顏色數(shù)和屏幕大小等。為此,Linux在文件操作 file_operations結(jié)構(gòu)中提供了mmap函數(shù),可將文件的內(nèi)容映射到用戶空間。讀/寫(read/write)/dev/fb:相當(dāng)于讀/寫屏幕緩沖區(qū)。而fb_set_var()函數(shù)的傳入?yún)?shù)是fb_var_screeninfo,函數(shù)中需要對xres、yres和bits_per_pixel賦值。當(dāng)應(yīng)用程序?qū)υO(shè)備文件進行ioctl操作時候會調(diào)用它們?!瓆struct fb_ops在include/linux/。int (*fb_get_var)(struct fb_var_screeninfo *var, int con, struct fb_info *info)。編寫結(jié)構(gòu)fb_info中函數(shù)指針fb_ops對應(yīng)的成員函數(shù),對于嵌入式系統(tǒng)的簡單實現(xiàn),只需要下列三個函數(shù)就可以了。最后是初始化一個fb_info結(jié)構(gòu),填充其中的成員變量,并調(diào)用register_framebuffer(amp。緩沖區(qū)通常分配在大容量的片外SDRAM中,起始地址保存在LCD控制寄存器中。在Linux中可以用kmalloc()函數(shù)分配一段連續(xù)的空間。其中成員變量modename為設(shè)備名稱,fontname為顯示字體,fbops為指向底層操作的函數(shù)的指針。它不僅包含了底層函數(shù),而且還有記錄設(shè)備狀態(tài)的數(shù)據(jù)。其中變量xres定義了屏幕一行所占的像素數(shù),yres定義了屏幕一列所占的像素數(shù),bits_per_pixel定義了每個像素用多少個位來表示。 struct fb_var_screeninfo:記錄了幀緩沖設(shè)備和指定顯示模式的可修改信息。struct fb_fix_screeninfo:記錄了幀緩沖設(shè)備和指定顯示模式的不可修改信息。Static struct file_operations fb_fops={ower: THIS_MODULE,read: fb_read, /*讀操作*/write: fb_write, /*寫操作*/ioct1: fb_ioct1, /*I/O操作*/mmap: fb_mmap, /*映射操作*/open: fb_open, /*打開操作*/release: fb_release, /*關(guān)閉操作*/}其成員函數(shù)都在linux/driver/video/,其中的函數(shù)對具體的硬件進行操作,對寄存器進行設(shè)置,對顯示緩沖進行映射。幀緩沖設(shè)備采用“文件層驅(qū)動層”的接口方式。幀緩沖設(shè)備為標準字符設(shè)備,主設(shè)備號為29,次設(shè)備號則從0到31。而/dev/fb則為當(dāng)前缺省的幀緩沖設(shè)備,通常指向/dev/fb0。framebuffer小鍵盤framebuffer,小鍵盤設(shè)備驅(qū)動通用APIopenreadwriteclose圖形界面 電表終端圖形界面系統(tǒng)結(jié)構(gòu) framebuffer驅(qū)動實現(xiàn)幀緩沖設(shè)備對應(yīng)的設(shè)備文件是/dev/fb*。Mini GU I等GU I系統(tǒng)雖然專為嵌入式系統(tǒng)設(shè)計,但開發(fā)使用需要考慮較多瑣碎的細節(jié)。作為人機交互的紐帶,圖形用戶界面(GUI)的重要性越來越凸現(xiàn)出來。UTF8 mode(Unicode)模式:Unicode模式基本上與XLATE相同,只不過可以通過數(shù)字小鍵盤間接輸入Unicode代碼,通過參數(shù)u可以設(shè)置。Keycode mode(MEDIUMRAW)模式:將掃描碼過濾為鍵盤碼放入緩沖區(qū),通過參數(shù)k可以設(shè)置。在主機端的處理過程為端口讀取掃描碼后,對鍵盤模式作一個判斷,如果是RAW模式,則直接將鍵盤掃描碼發(fā)送給應(yīng)用程序;如果是其它模式,則就將掃描碼轉(zhuǎn)化成為鍵盤碼,然后再判斷模式以決定是否將鍵盤碼直接發(fā)送給應(yīng)用程序:如果是XLATE或Unicode模式,則將鍵盤碼再次轉(zhuǎn)化成符號碼,然后根據(jù)對符號碼解析,獲得相應(yīng)的處理函數(shù),并將其送到TY設(shè)備的緩存中。ZLG7289A內(nèi)部含有譯碼器,可直接接收BCD碼或16進制碼,并同時具有2種譯碼方式,此外,還具有多種控制指令,如消隱、閃爍、左移、右移、段尋址等。特殊鍵盤的硬件模塊是ZLG7289A芯片。在此我們也可以看出,內(nèi)核導(dǎo)出函數(shù)handle_scancode在整個鍵盤驅(qū)動程序中,起著將上層通用抽象層和底層硬件處理層粘和起來的關(guān)鍵作用。此外,開發(fā)者還需要提供對應(yīng)的從自定義掃描碼到鍵碼的轉(zhuǎn)換函數(shù)kbd_translate。開發(fā)者只需為其編寫驅(qū)動程序中的底層硬件處理函數(shù),就可以將該鍵盤驅(qū)動起來。這個文件包括了鍵盤中斷處理函數(shù)keyboard_interrupt,掃描碼到鍵碼轉(zhuǎn)換函數(shù)pckbd_translate等其他一些與底層硬件密切相關(guān)的函數(shù)。其中kbd_translate由handle_scancode調(diào)用,負責(zé)將掃描碼轉(zhuǎn)換成鍵碼;鍵盤驅(qū)動程序的底層硬件處理部分則根據(jù)不同的硬件有不同的實現(xiàn)。在這個文件中還定義了其它幾個回調(diào)函數(shù),它們由鍵盤驅(qū)動程序中的上層公共部分調(diào)用,并由底層硬件處理函數(shù)實現(xiàn)。handle_scancode完成的功能是:首先將掃描碼轉(zhuǎn)換成鍵碼,接著根據(jù)shift, alt等擴展鍵的按下情況將鍵碼轉(zhuǎn)換成目標碼,一般情況下是ASCII碼,最后將該ASCII碼放到終端設(shè)備的緩沖區(qū)中,并且調(diào)度一個tasklet負責(zé)將其在顯示器上回顯出來。鍵盤驅(qū)動程序的上層公共部分都在driver/。在Linux中,鍵盤驅(qū)動被劃分成兩層來實現(xiàn)。很多嵌入式Linux系統(tǒng),特別是一些具有與用戶強交互的嵌入式系統(tǒng),往往需要配備一個特殊鍵盤,此時開發(fā)者需要根據(jù)實際情況,為自己的特殊鍵盤編寫驅(qū)動程序。VCLK和CLKVAL域的關(guān)系如下,其中CLKVAL的最小值是0:VCLK(Hz) = HCLK/[(CLKVAL+1)*2] ()幀頻率是VSYNC信號的頻率,它與LCDCON1和LCDCON2/3/4寄存器的VSYNC、VDPD、VFPD、LINEVAL、HSYNC、HBPD、HFPD、HOZVAL和CLKVAL都有關(guān)系。VSYNC和HSYNC脈沖的產(chǎn)生依賴于LCDCON2/3寄存器的HOZVAL域和LINEVAL域的培植。TIMEGEN產(chǎn)生LCD驅(qū)動器的控制信號,如VSYNC、HSYNC、VCLK、VDEN和LEND等。在單掃描模式下,只使用一個FIFO(FIFOH)。FIFO的總大小是28個字,其中低位FIFOL是12個字,高位FIFOH是16個字。當(dāng)FIFO空或部分空時,LCDCDMA要求從基于突發(fā)傳輸模式的幀緩存器中來取來數(shù)據(jù),存入要顯示的圖像數(shù)據(jù),而這個幀存儲器是LCD控制器在RAM中開辟的一片緩沖區(qū)。TIMEGEN產(chǎn)生VFRAME、VLINE、VCLK、VM信號等。IDPRCS接受從LCDCDMA來的視頻數(shù)據(jù)并在將其改變到合適數(shù)據(jù)格式后經(jīng)VD[23:0]將之送到LCD驅(qū)動器,如4/8單掃描或4雙掃描顯示模式。REGBANK有17個可編程寄存器組和256*16的調(diào)色板存儲器,用來設(shè)定LCD控制器。SamsungS3C2410XLCD控制器VCLK/LCD HCLKVLINE/VSYNC/CPVVFRAME/VSYNC/STVVM/VDEN/TPVD[23:0]LENDLCDPWRENLCDVF0LCDVF01LCDVF02 S3C2410 LCD控制器1. 寄存器介紹LCD的寄存器主要有:LCDCON1寄存器、LCDCON2寄存器、LCDCON3寄存器、LCDCON4寄存器和LCDCON5寄存器。S3C2410 LCD控制器用于傳輸視頻數(shù)據(jù)和產(chǎn)生必要的控制信號,如VFRAME、VLINE、VCLK、VM等。對于STN 液晶平板,該LCD控制器可支持4位雙掃描、4位單掃描和8位單掃描三種顯示類型,支持4級和16級灰度級單色顯示模式,支持256色和4096色顯示,可接多種分辨率的LCD,例如640480、320240和160160等,在256色顯示模式時,最大可支持409610220482048和10244096顯示。驅(qū)動幀緩沖的實現(xiàn)是整個驅(qū)動開發(fā)過程的重點。用戶所要顯示的內(nèi)容皆是從緩沖區(qū)中讀出,從而顯示到屏幕上的。用戶只需要通過讀寫一系列的寄存器,完成配置和顯示驅(qū)動。本文硬件采用三星公司的S3C2410芯片的開發(fā)板,軟件采用Linux ,編譯器為armlinuxgcc的交叉編譯器,使用夏普LQ035Q7DB02 TFT顯示模塊,在240320分辨率下可提供16位彩色顯示,通過對其Linux驅(qū)動程序進行改寫和調(diào)試,成功地實現(xiàn)了對該種屏的驅(qū)動和顯示。隨著嵌入式系統(tǒng)的應(yīng)用越來越廣泛,功能也越來越強大,對系統(tǒng)中的人機界面的要求也越來越高,在應(yīng)用需求的驅(qū)使下,許多工作在Linux下的圖形界面軟件包的開發(fā)和移植工作中都涉及到底層LCD驅(qū)動的開發(fā)問題。用戶可以將它看成是顯示內(nèi)存的一個映像,將其映射到進程地址空間之后,就可以進行讀寫操作,而讀寫操作可以反映到LCD。它允許上層應(yīng)用程序在圖形模式下直接對顯示緩沖區(qū)進行讀寫和I/O控制等操作。幀緩沖區(qū)為圖像硬件設(shè)備提供了一種抽象化處理,它代表了一些視頻硬件設(shè)備,允許應(yīng)用軟件通過定義明確的接口來訪問圖像硬件設(shè)備。所以file_operations是文件層次的I/O接口[4]。不同類型的文件有不同的file_operations成員函數(shù),如普通的磁盤數(shù)據(jù)文件,接口函數(shù)完成磁盤數(shù)據(jù)塊讀寫操作;而對于各種設(shè)備文件,則最終調(diào)用各自驅(qū)動程序中的I/O函數(shù)進行具體設(shè)備的操作。struct file_operations結(jié)構(gòu)體中的成員為一系列的接口函數(shù),如用于讀/寫的read/write函數(shù)和用于控制的ioctl等。Linux為所有的設(shè)備文件都提供了統(tǒng)一的操作函數(shù)接口,方法是使用數(shù)據(jù)結(jié)構(gòu)struct file_operations。主設(shè)備號用來區(qū)分不同種類的設(shè)備,而次設(shè)備號用來區(qū)分同一類型的多個設(shè)備。應(yīng)用程序可以打開、關(guān)閉和讀寫這些設(shè)備文件,完成對設(shè)備的操作,就像操作普通的數(shù)據(jù)文件一樣。LCD是以字符設(shè)備方式加以訪問和管理的,Linux把顯示驅(qū)動看作字符設(shè)備,把要顯示的數(shù)據(jù)一字節(jié)、一字節(jié)地送往LCD驅(qū)動器。字符設(shè)備以單個字節(jié)為單位進行順序讀寫操作,通常不使用緩沖技術(shù);塊設(shè)備則是以固定大小的數(shù)據(jù)塊進行存儲和讀寫的,如硬盤、軟盤等,并利用一塊系統(tǒng)內(nèi)存作為緩沖區(qū)。3. Linux設(shè)備驅(qū)動 Linux設(shè)備驅(qū)動的概念 Linux設(shè)備驅(qū)動類別Linux將設(shè)備分為最基本的兩大類:一類是字符設(shè)備,另一類是塊設(shè)備。 考慮到上述原因,一種較好的解決方案是自行設(shè)計一種輕型、適合電表采集終端要求的圖形用戶界面,顯示功能齊全,操作簡便,在應(yīng)用、功能上都能滿足用戶需求,并且應(yīng)大大降低成本。這種GUI的設(shè)計目標仍然是通
點擊復(fù)制文檔內(nèi)容
黨政相關(guān)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1