[導讀]伴隨著高性能嵌入式處理器的飛速發(fā)展與普及,特別是ARM處理器系列的出現(xiàn),嵌入式系統(tǒng)的功能也變得越來越強大
伴隨著高性能嵌入式處理器的飛速發(fā)展與普及,特別是ARM處理器系列的出現(xiàn),嵌入式系統(tǒng)的功能也變得越來越強大。以前的單色LCD已不能滿足現(xiàn)今的各種多媒體應(yīng)用,彩色LCD被越來越多地應(yīng)用到嵌入式系統(tǒng)中。同時,在應(yīng)用需求的促使下,許多工作在Linux下的圖形界面軟件包的開發(fā)和移植工作中都涉及到底層LCD驅(qū)動的開發(fā)問題。
在硬件采用Intel ASSABET開發(fā)板,軟件采用Linux 2.4.19平臺,編譯器為arm-linux-gcc的交叉編譯器作為開發(fā)的前提下,因為ASSABET開發(fā)板上使用的是Sharp 3.9英寸320×240 TFT彩色LCD,現(xiàn)改用Kyocera 7.7英寸640×480 STN型彩色LCD,所以通過對其Linux驅(qū)動程序進行改寫和調(diào)試,成功地實現(xiàn)了對該種屏的驅(qū)動和顯示。
LCD
控制器 LCD控制器的功能是顯示驅(qū)動信號,進而驅(qū)動LCD顯示器。在驅(qū)動LCD設(shè)計的過程中首要的是配置LCD控制器。在配置LCD控制器中最重要的一步則是幀緩沖區(qū)的指定。用戶所要顯示的內(nèi)容皆是從緩沖區(qū)中讀出,從而顯示到屏幕上。幀緩沖區(qū)的大小由屏幕的分辨率和顯示色彩數(shù)決定。驅(qū)動幀緩沖的實現(xiàn)是整個驅(qū)動開發(fā)過程的重點。
ASSABET開發(fā)板采用SA1110作為處理器。SA1110微處理器是Intel公司生產(chǎn)的一種基于StrongARM環(huán)境的微處理器。該處理器內(nèi)部有一LCD驅(qū)動控制器,可支持單、雙屏顯示和最大1024×1024dpi。每個像素數(shù)據(jù)以4、8、12或16位編碼后存儲于外部存儲器內(nèi),通過LCD的專用DAM控制器,被裝入至532位的FIFO中。在雙屏顯示時,兩個DMA通道分別負責上下屏幕的顯示,但只有第一個DMA通道有調(diào)色板緩沖器。幀緩沖器中的已編碼像素數(shù)據(jù)是作為指針指向256×12位的調(diào)色板。調(diào)色板的色調(diào)數(shù)據(jù)控制著抖動邏輯,以產(chǎn)生各種灰度和彩色信號并從LCD數(shù)據(jù)引腳輸出。
顯示屏 LCD選擇Kyocera公司的7.7英寸STN型LCD。該LCD可在640×480分辨率的情況下提供12位彩色顯示。該屏為雙屏掃描模式,具有兩個8位的數(shù)據(jù)通道,每種基色都由4位的抖動邏輯來產(chǎn)生15級灰度,因此可以顯示最多153=3375種可能的顏色。
驅(qū)動LCD的設(shè)計
幀緩沖設(shè)備 幀緩沖設(shè)備為圖像硬件設(shè)備提供了一種抽象化處理。它代表了一些視頻硬件設(shè)備,允許應(yīng)用軟件通過定義明確的界面來訪問圖像硬件設(shè)備。這樣軟件無需了解任何涉及硬件底層驅(qū)動的東西(如硬件寄存器)。它允許上層應(yīng)用程序在圖形模式下直接對顯示緩沖區(qū)進行讀寫和I/O控制等操作。通過專門的設(shè)備節(jié)點可對該設(shè)備進行訪問,如/dev/fb*。
Linux下可支持多個幀緩沖設(shè)備,最多可達32個,即從/dev/fb0到/dev/fb31。通常情況下,缺省的幀緩沖設(shè)備為/dev/fb0。
在SA1110處理器的LCD控制器操作中,幀緩沖器用于存放全部屏幕的所有編碼像素數(shù)據(jù)。在它的最低位地址處是32或512字節(jié)的緩沖器,用來存放調(diào)色板數(shù)據(jù)表。32位緩沖器用于4、12或16位像素編碼的16項調(diào)色板;512字節(jié)緩沖器用于裝入8位像素編碼的256項調(diào)色板。在12或16位像素編碼時,不使用調(diào)色板,此時的幀緩沖器的起始32字節(jié)必須填入全零。
主要結(jié)構(gòu)體
struct fb_fix_screeninfo中記錄了幀緩沖設(shè)備和指定顯示模式的不可修改信息。它包含了屏幕緩沖區(qū)的物理地址和長度。
struct fb_var_screeninfo中記錄了幀緩沖設(shè)備和指定顯示模式的可修改信息。它包括顯示屏幕的分辨率、每個像素的比特數(shù)和一些時序變量。其中變量xres定義了屏幕一行所占的像素數(shù),yres定義了屏幕一列所占的像素數(shù),bits_per_pixel定義了每個像素用多少個位來表示。
struct fb_info是Linux為幀緩沖設(shè)備定義的驅(qū)動層接口。它不僅包含了底層函數(shù),而且還有記錄設(shè)備狀態(tài)的數(shù)據(jù)。每個幀緩沖設(shè)備都與一fb_info結(jié)構(gòu)相對應(yīng)。其中成員變量modename為設(shè)備名稱,fontname為顯示字體,fbops為指向底層操作的函數(shù)的指針。
Linux內(nèi)核配置與編譯
使用下面的命令啟動Linux內(nèi)核配置工具: #make menuconfig
啟動如下內(nèi)核選項,選擇對應(yīng)的選項之后,執(zhí)行下面的命令:
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 |
驅(qū)動幀緩沖的設(shè)計 幀緩沖設(shè)備屬于字符設(shè)備,采用了“文件層-驅(qū)動層”的接口方式。Linux為幀緩沖設(shè)備定義的驅(qū)動層接口為struct fb_info結(jié)構(gòu)。在文件層次上,Linux為其定義了下面的操作函數(shù):
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, /*關(guān)閉操作*/
}; |
應(yīng)用程序?qū)訉彌_設(shè)備的訪問同對文件的訪問操作類似。在應(yīng)用程序中,對幀緩沖設(shè)備(dev/fb)的操作只需調(diào)用文件層的操作函數(shù)。首先打開/dev/fb設(shè)備文件;隨后用ioctl操作取得屏幕的分辨率和bpp值,從而計算出屏幕緩沖區(qū)的大小,并將屏幕的緩沖區(qū)映射到用戶空間;最后就可直接對屏幕緩沖區(qū)進行圖片顯示。
嵌入式Linux操作系統(tǒng)對幀緩沖的初始化入口在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 |
通過該入口可進入幀緩沖的初始化函數(shù)。下面是對整個幀緩沖的實現(xiàn)過程。
首先,根據(jù)所選擇的STN型LCD先初始化顯示屏幕的分辨率(640×480)、每個像素的比特數(shù)(實際所選的LCD為12bpp,但在設(shè)計中可作為16bpp來設(shè)計。這是因SA1110的LCD控制器對兩者處理方式相同而只有色彩深度的比例不同的緣故)和各種時序值。隨后這些值將會被寫入LCD控制器的控制寄存器LCCR0到LCCR3內(nèi),即完成對LCD控制器內(nèi)一部分寄存器的配置。特殊的一點,因為所選的LCD是12bpp顯示,所以rgbt色彩的深度比值應(yīng)為4:4:4:0。
其次對LCD進行顯示緩沖區(qū)的分配。該過程由kmalloc函數(shù)實現(xiàn)動態(tài)分配一片連續(xù)的空間,需要分配的緩沖區(qū)大小為600K字節(jié)。緩沖區(qū)是在SDRAM中分配大容量的地址,存儲器映射至SA1110內(nèi),其中上半屏起始地址保存到LCD控制器的寄存器DBAR1中,下半屏起始地址保存到DBAR2中。在此完全初始化一個fb_info結(jié)構(gòu),填充其中的各成員變量。之后進行中斷處理請求和各種變量和調(diào)色板等的設(shè)置。然后注冊驅(qū)動程序,通過調(diào)用register_framebuffer(&fb_info)實現(xiàn)將fb_info登記入內(nèi)核。最后,啟動GPIO9~2和LCD控制器。
效果
因為該設(shè)計將驅(qū)動作為內(nèi)核的一部分,而不是模塊加載的方式,所以需重新編譯內(nèi)核,并將新編譯的Linux內(nèi)核下載到開發(fā)板內(nèi)。重新啟動系統(tǒng)后,通過應(yīng)用程序檢測,可以使屏幕顯示任意所需圖片,表明了驅(qū)動LCD顯示的設(shè)計已成功實現(xiàn)。
在對嵌入式Linux系統(tǒng)進行驅(qū)動LCD的開發(fā)時,不僅涉及到對開發(fā)板的了解(特別是微處理器和外圍接口),還要求熟練配置Linux內(nèi)核、掌握Linux的整個系統(tǒng)啟動過程和Linux下開發(fā)設(shè)備驅(qū)動程序過程,同時開發(fā)人員還需掌握所開發(fā)的LCD技術(shù)資料。本文具體的介紹驅(qū)動LCD過程中驅(qū)動幀緩沖的設(shè)計。該設(shè)計的實現(xiàn)使得此LCD可應(yīng)用在嵌入式開發(fā)的多種領(lǐng)域,因此具有實用價值 |
本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。
關(guān)鍵字:
驅(qū)動電源
在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設(shè)備,其驅(qū)動電源的性能直接關(guān)系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅(qū)動電源設(shè)計中至關(guān)重要的兩個環(huán)節(jié),集成化方案的設(shè)計成為提升電機驅(qū)動性能的關(guān)鍵。
關(guān)鍵字:
工業(yè)電機
驅(qū)動電源
LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設(shè)備的使用壽命。然而,在實際應(yīng)用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設(shè)計、生...
關(guān)鍵字:
驅(qū)動電源
照明系統(tǒng)
散熱
根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。
關(guān)鍵字:
LED
設(shè)計
驅(qū)動電源
電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅(qū)動系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動汽車的動力性能和...
關(guān)鍵字:
電動汽車
新能源
驅(qū)動電源
在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...
關(guān)鍵字:
發(fā)光二極管
驅(qū)動電源
LED
在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...
關(guān)鍵字:
LED照明技術(shù)
電磁干擾
驅(qū)動電源
開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源
關(guān)鍵字:
LED
驅(qū)動電源
開關(guān)電源
LED驅(qū)動電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。
關(guān)鍵字:
LED
隧道燈
驅(qū)動電源
LED驅(qū)動電源在LED照明系統(tǒng)中扮演著至關(guān)重要的角色。由于LED具有節(jié)能、環(huán)保、長壽命等優(yōu)點,使得LED照明在各個領(lǐng)域得到廣泛應(yīng)用。然而,LED的電流、電壓特性需要特定的驅(qū)動電源才能正常工作。本文將介紹常用的LED驅(qū)動電...
關(guān)鍵字:
LED驅(qū)動電源
led照明
LED驅(qū)動電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電源轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。
關(guān)鍵字:
LED
驅(qū)動電源
高壓工頻交流
種種跡象都在表明,半導體行業(yè)或已提前進入寒冬時期,越來越多的廠商開始扛不住了……
關(guān)鍵字:
LED
半導體
驅(qū)動電源
崧盛股份9日發(fā)布投資者關(guān)系活動記錄表,就植物照明發(fā)展趨勢、行業(yè)壁壘等問題進行分享。植物照明未來市場需求廣闊崧盛股份指出,植物照明將會走向長期產(chǎn)業(yè)領(lǐng)域。主要原因有三:第一,LED植物照明賦能終端種植更具有經(jīng)濟價值。由于LE...
關(guān)鍵字:
崧盛股份
驅(qū)動電源
在當今高度發(fā)展的技術(shù)中,電子產(chǎn)品的升級越來越快,LED燈技術(shù)也在不斷發(fā)展,這使我們的城市變得豐富多彩。 LED驅(qū)動電源將電源轉(zhuǎn)換為特定的電壓和電流,以驅(qū)動LED發(fā)光。通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流電(即...
關(guān)鍵字:
LED
驅(qū)動電源
高壓直流
人類社會的進步離不開社會上各行各業(yè)的努力,各種各樣的電子產(chǎn)品的更新?lián)Q代離不開我們的設(shè)計者的努力,其實很多人并不會去了解電子產(chǎn)品的組成,比如LED電源。
關(guān)鍵字:
LED
驅(qū)動電源
低壓直流
隨著科學技術(shù)的發(fā)展,LED技術(shù)也在不斷發(fā)展,為我們的生活帶來各種便利,為我們提供各種各樣生活信息,造福著我們?nèi)祟?。LED驅(qū)動電源實際上是一種電源,但是它是一種特定的電源,用于驅(qū)動LED發(fā)射帶有電壓或電流的光。 因此,LE...
關(guān)鍵字:
LED
驅(qū)動電源
電流
LED燈作為一種新型節(jié)能和無污染光源,由于其特有的發(fā)光照明特性,在現(xiàn)代照明應(yīng)用中發(fā)揮著革命性的作用。作為 LED 照明產(chǎn)業(yè)鏈中最為核心的部件之一,LED 驅(qū)動電源的驅(qū)動控制技術(shù)所存在的可靠性低、成本高等典型問題一直制約著...
關(guān)鍵字:
多路
LED
驅(qū)動電源
隨著社會的快速發(fā)展,LED技術(shù)也在飛速發(fā)展,為我們的城市的燈光煥發(fā)光彩,讓我們的生活越來越有趣,那么你知道LED需要LED驅(qū)動電源嗎?那么你知道什么是LED驅(qū)動電源嗎?
關(guān)鍵字:
LED
開關(guān)電源
驅(qū)動電源
早前有新聞稱,Cree在2018年開始宣布轉(zhuǎn)型高科技半導體領(lǐng)域,并一邊逐漸脫離照明與LED相關(guān)業(yè)務(wù),一邊持續(xù)投資半導體。在今日,Cree宣布與SMART Global Holdings, Inc.達成最終協(xié)議,擬將LED...
關(guān)鍵字:
cree
led照明