亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

在Linux下驅動STN彩色LCD

2019-11-18 12:28:03
字體:
來源:轉載
供稿:網友

  伴隨著高性能嵌入式處理器的飛速發展與普及,非凡是ARM處理器系列的出現,嵌入式系統的功能也變得越來越強大。以前的單色LCD已不能滿足現今的各種多媒體應用,彩色LCD被越來越多地應用到嵌入式系統中。同時,在應用需求的促使下,許多工作在linux下的圖形界面軟件包的開發和移植工作中都涉及到底層LCD驅動的開發問題。
  
  在硬件采用Intel ASSABET開發板,軟件采用Linux 2.4.19平臺,編譯器為arm-linux-gcc的交叉編譯器作為開發的前提下,因為ASSABET開發板上使用的是Sharp 3.9英寸320×240 TFT彩色LCD,現改用Kyocera 7.7英寸640×480 STN型彩色LCD,所以通過對其Linux驅動程序進行改寫和調試,成功地實現了對該種屏的驅動和顯示。
  
  LCD
  
  控制器
  LCD控制器的功能是顯示驅動信號,進而驅動LCD顯示器。在驅動LCD設計的過程中首要的是配置LCD控制器。在配置LCD控制器中最重要的一步則是幀緩沖區的指定。用戶所要顯示的內容皆是從緩沖區中讀出,從而顯示到屏幕上。幀緩沖區的大小由屏幕的分辨率和顯示色彩數決定。驅動幀緩沖的實現是整個驅動開發過程的重點。
  
  ASSABET開發板采用SA1110作為處理器。SA1110微處理器是Intel公司生產的一種基于StrongARM環境的微處理器。該處理器內部有一LCD驅動控制器,可支持單、雙屏顯示和最大1024×1024dpi。每個像素數據以4、8、12或16位編碼后存儲于外部存儲器內,通過LCD的專用DAM控制器,被裝入至532位的FIFO中。在雙屏顯示時,兩個DMA通道分別負責上下屏幕的顯示,但只有第一個DMA通道有調色板緩沖器。幀緩沖器中的已編碼像素數據是作為指針指向256×12位的調色板。調色板的色調數據控制著抖動邏輯,以產生各種灰度和彩色信號并從LCD數據引腳輸出。
  
  顯示屏
  LCD選擇Kyocera公司的7.7英寸STN型LCD。該LCD可在640×480分辨率的情況下提供12位彩色顯示。該屏為雙屏掃描模式,具有兩個8位的數據通道,每種基色都由4位的抖動邏輯來產生15級灰度,因此可以顯示最多153=3375種可能的顏色。
  
  驅動LCD的設計
  
  幀緩沖設備
  幀緩沖設備為圖像硬件設備提供了一種抽象化處理。它代表了一些視頻硬件設備,答應應用軟件通過定義明確的界面來訪問圖像硬件設備。這樣軟件無需了解任何涉及硬件底層驅動的東西(如硬件寄存器)。它答應上層應用程序在圖形模式下直接對顯示緩沖區進行讀寫和I/O控制等操作。通過專門的設備節點可對該設備進行訪問,如/dev/fb*。
  
  Linux下可支持多個幀緩沖設備,最多可達32個,即從/dev/fb0到/dev/fb31。通常情況下,缺省的幀緩沖設備為/dev/fb0。
  
  在SA1110處理器的LCD控制器操作中,幀緩沖器用于存放全部屏幕的所有編碼像素數據。在它的最低位地址處是32或512字節的緩沖器,用來存放調色板數據表。32位緩沖器用于4、12或16位像素編碼的16項調色板;512字節緩沖器用于裝入8位像素編碼的256項調色板。在12或16位像素編碼時,不使用調色板,此時的幀緩沖器的起始32字節必須填入全零。
  
  主要結構體
  
  strUCt fb_fix_screeninfo中記錄了幀緩沖設備和指定顯示模式的不可修改信息。它包含了屏幕緩沖區的物理地址和長度。
  
  struct fb_var_screeninfo中記錄了幀緩沖設備和指定顯示模式的可修改信息。它包括顯示屏幕的分辨率、每個像素的比特數和一些時序變量。其中變量xres定義了屏幕一行所占的像素數,yres定義了屏幕一列所占的像素數,bits_per_pixel定義了每個像素用多少個位來表示。
  
  struct fb_info是Linux為幀緩沖設備定義的驅動層接口。它不僅包含了底層函數,而且還有記錄設備狀態的數據。每個幀緩沖設備都與一fb_info結構相對應。其中成員變量modename為設備名稱,fontname為顯示字體,fbops為指向底層操作的函數的指針。
  
  Linux內核配置與編譯
  
  使用下面的命令啟動Linux內核配置工具:
  #make menuconfig
  
  啟動如下內核選項,選擇對應的選項之后,執行下面的命令:
  
  Console drivers --->
  Frame-buffer support--->
  [*] Support for frame buffer devices (EXPERIMENTAL)
  [*] SA-1100 LCD support (NEW)
  [*] Advanced low level driver options (NEW)
  [*] 16 bpp packed pixels support (NEW)
  [*] Select compiled-in fonts (NEW)
  [*] VGA 88 font
  #make dep
  #make zImage
  
  驅動幀緩沖的設計
  幀緩沖設備屬于字符設備,采用了“文件層-驅動層”的接口方式。Linux為幀緩沖設備定義的驅動層接口為struct fb_info結構。在文件層次上,Linux為其定義了下面的操作函數:
  
  static struct file_Operations fb_fops = {
  owner: THIS_MODULE,
  read: fb_read, /* 讀操作*/
  write: fb_write, /* 寫操作*/
  ioctl: fb_ioctl, /* 控制操作*/
  mmap: fb_mmap, /* 映射操作*/
  open: fb_open, /* 打開操作*/
  release: fb_release, /*關閉操作*/
  };
  
  應用程序層對幀緩沖設備的訪問同對文件的訪問操作類似。在應用程序中,對幀緩沖設備(dev/fb)的操作只需調用文件層的操作函數。首先打開/dev/fb設備文件;隨后用ioctl操作取得屏幕的分辨率和bpp值,從而計算出屏幕緩沖區的大小,并將屏幕的緩沖區映射到用戶空間;最后就可直接對屏幕緩沖區進行圖片顯示。
  
  嵌入式Linux操作系統對幀緩沖的初始化入口在fbmem.c中的如下定義:
  
  static struct {
  const char *name;
  int (*init)(void);
  int (*setup)(char*);
  } fb_drivers[ ]__initdata = {
  #ifdef CONFIG_FB_YOURCARD
  { "driver_name", xxxfb_init, xxxfb_setup },
  #endif
  
  通過該入口可進入幀緩沖的初始化函數。下面是對整個幀緩沖的實現過程。
  
  首先,根據所選擇的STN型LCD先初始化顯示屏幕的分辨率(640×480)、每個像素的比特數(實際所選的LCD為12bpp,但在設計中可作為16bpp來設計。這是因SA1110的LCD控制器對兩者處理方式相同而只有色彩深度的比例不同的緣故)和各種時序值。隨后這些值將會被寫入LCD控制器的控制寄存器LCCR0到LCCR3內,即完成對LCD控制器內一部分寄存器的配置。非凡的一點,因為所選的LCD是12bpp顯示,所以rgBT色彩的深度比值應為4:4:4:0。
  
  其次對LCD進行顯示緩沖區的分配。該過程由kmalloc函數實現動態分配一片連續的空間,需要分配的緩沖區大小為600K字節。緩沖區是在SDRAM中分配大容量的地址,存儲器映射至SA1110內,其中上半屏起始地址保存到LCD控制器的寄存器DBAR1中,下半屏起始地址保存到DBAR2中。在此完全初始化一個fb_info結構,填充其中的各成員變量。之后進行中斷處理請求和各種變量和調色板等的設置。然后注冊驅動程序,通過調用register_framebuffer(&fb_info)實現將fb_info登記入內核。最后,啟動GPIO9~2和LCD控制器。
  
  效果
  
  因為該設計將驅動作為內核的一部分,而不是模塊加載的方式,所以需重新編譯內核,并將新編譯的Linux內核下載到開發板內。重新啟動系統后,通過應用程序檢測,可以使屏幕顯示任意所需圖片,表明了驅動LCD顯示的設計已成功實現。
  
  在對嵌入式Linux系統進行驅動LCD的開發時,不僅涉及到對開發板的了解(非凡是微處理器和外圍接口),還要求熟練配置Linux內核、把握Linux的整個系統啟動過程和Linux下開發設備驅動程序過程,同時開發人員還需把握所開發的LCD技術資料。本文具體的介紹驅動LCD過程中驅動幀緩沖的設計。該設計的實現使得此LCD可應用在嵌入式開發的多種領域,因此具有實用價值。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
色综合影院在线| 国产一区二区黄| 久久久久久久久电影| 亚洲国产精彩中文乱码av| 国产亚洲精品久久久久久777| 久久精品亚洲94久久精品| 亚洲欧美视频在线| 91久久久久久久久久| 国产精品美女免费看| 国产99久久精品一区二区| 国产精品成熟老女人| 日韩电影中文字幕在线观看| 91精品国产91久久久久| 国产精品久久二区| 欧美精品做受xxx性少妇| 91人人爽人人爽人人精88v| 欧美视频裸体精品| 国产精品r级在线| 欧美肥老妇视频| 欧美精品一区二区免费| 久久久久久久久国产| 亚洲欧美在线x视频| 亚洲福利视频免费观看| 91亚洲国产成人久久精品网站| 日韩精品在线观| 国产精品视频精品视频| 国产精品日韩av| 久久精品国产久精国产思思| 亚洲成人精品视频在线观看| 久久久久久久网站| 美女视频久久黄| 国模视频一区二区三区| 亚洲三级 欧美三级| 欧美高清无遮挡| 欧美一区二区三区精品电影| 91在线视频导航| 欧美一区深夜视频| 亚洲图片欧美午夜| 最好看的2019年中文视频| 91国语精品自产拍在线观看性色| 欧美精品制服第一页| 亚洲精品在线91| 亚洲福利在线视频| 欧美色视频日本高清在线观看| 日韩在线视频国产| 亚洲精品福利免费在线观看| 国产91在线播放| 久久理论片午夜琪琪电影网| 69视频在线免费观看| 久久男人资源视频| 欧美在线xxx| 91精品国产九九九久久久亚洲| 最近2019中文字幕大全第二页| 成人激情黄色网| 亚洲第一精品自拍| 萌白酱国产一区二区| 中文字幕一区二区三区电影| 91国产美女视频| 国产精品久久综合av爱欲tv| 久久精彩免费视频| 97精品在线观看| 91免费高清视频| 欧美精品制服第一页| 美女福利精品视频| 久久人人97超碰精品888| 欧美激情二区三区| 国产精品99久久久久久久久久久久| 亚洲欧美制服中文字幕| 欧美激情精品久久久久久久变态| 中文字幕在线成人| 欧美大片网站在线观看| 91最新国产视频| 久久亚洲电影天堂| 欧美激情一级欧美精品| 国产午夜精品一区理论片飘花| 日韩欧美在线视频免费观看| 国产91成人在在线播放| 日产日韩在线亚洲欧美| 亚洲欧美日本伦理| 在线亚洲国产精品网| 成人乱人伦精品视频在线观看| 亚洲精品久久7777777| 欧美电影免费观看高清| 日韩av网站导航| 日韩在线视频线视频免费网站| 国产一区欧美二区三区| 久久成人精品一区二区三区| 欧美天天综合色影久久精品| 亚洲激情免费观看| 97免费视频在线| 精品美女永久免费视频| 欧美视频在线视频| 97视频免费在线看| 国产精品成人久久久久| 国产精品草莓在线免费观看| 欧美成人国产va精品日本一级| 亚洲日本成人网| 国产日韩欧美在线| 欧美日韩国产在线| 国产精品第一区| 欧美成人一区二区三区电影| 久久精品影视伊人网| 精品性高朝久久久久久久| 国产精品视频久久久久| 亚洲精品久久久久久久久久久| 上原亚衣av一区二区三区| 国产亚洲精品一区二555| 久久精品亚洲热| 精品欧美一区二区三区| 国产有码在线一区二区视频| 欧美巨猛xxxx猛交黑人97人| 精品色蜜蜜精品视频在线观看| 国产一区欧美二区三区| 成人信息集中地欧美| 久久天天躁夜夜躁狠狠躁2022| 精品国产依人香蕉在线精品| 久久精品久久精品亚洲人| 欧美老女人性生活| 97精品免费视频| 色老头一区二区三区在线观看| 精品一区二区三区四区| 国产欧美日韩中文字幕| 久久影院模特热| 精品无人区太爽高潮在线播放| 亚洲国产精品成人av| 高清日韩电视剧大全免费播放在线观看| 亚洲天堂网在线观看| 岛国av午夜精品| 国产噜噜噜噜久久久久久久久| 欧美一级电影久久| 欧美成年人在线观看| 91高清视频在线免费观看| 亚洲91精品在线观看| 久久99久久久久久久噜噜| 亚洲人成人99网站| 亚洲精品美女久久久久| 国产欧美一区二区| 亚洲免费一级电影| 国产精品视频自在线| 亚洲一区二区三区乱码aⅴ蜜桃女| 久久视频免费在线播放| 欧美另类在线播放| 欧美黄色免费网站| 亚洲激情在线观看视频免费| 精品无人区太爽高潮在线播放| 国产做受69高潮| 国产精品久久久久久久久久新婚| 中文字幕亚洲二区| 久久精品99久久久久久久久| 久久九九精品99国产精品| 97激碰免费视频| 欧美色视频日本版| 欧美一级片一区| 国产成人在线亚洲欧美| 久久777国产线看观看精品| 宅男66日本亚洲欧美视频| 97精品一区二区三区| 韩国日本不卡在线| 在线成人激情黄色| 伊人久久久久久久久久久久久| 久久国产色av| 久久久精品999| 国产99久久精品一区二区 夜夜躁日日躁| 欧美性理论片在线观看片免费|