基于S3C2440A終端LCD驅動(dòng)電路的設計與實(shí)現

發(fā)布時(shí)間:2009-12-24 11:42    發(fā)布者:bakedham
關(guān)鍵詞: LCD , S3C2440A
引言

現在大部分的便攜式手持終端產(chǎn)品,如移動(dòng)電話(huà)、導航系統等,都擁有一個(gè)小型LCD顯示屏,這使LCD驅動(dòng)電路的設計成為手持終端設計的重要組成部分。
本文以應用于特殊行業(yè)的手持終端為例,敘述LCD驅動(dòng)電路的設計實(shí)現方法。

硬件電路設計

硬件電路結構

本設計中手持終端CPU采用三星公司ARM920T內核處理器S3C2440A,其LCD控制器支持STN LCD和TFT LCD,實(shí)際使用的LCD為L(cháng)TS350Q1-PE1_PI,屬于TFT LCD。

電路框圖如圖1所示。



驅動(dòng)電路主要包括三部分:第一部分是LCD驅動(dòng),采用MAX1779芯片;第二部分是LED背光驅動(dòng),采用MP1521芯片;第三部分是VCOM信號驅動(dòng),采用LM8261芯片。這里主要敘述LCD驅動(dòng)和背光電路的實(shí)現。

LCD驅動(dòng)電路

由于LCD內集成有數字電路和模擬電路,需要外部提供數字電壓DVDD和模擬電壓AVDD。另外,為了完成數據掃描,需要TFT輪流開(kāi)啟/關(guān)閉。當TFT 開(kāi)啟時(shí),數據通過(guò)源極驅動(dòng)器加載到顯示電極,顯示電極和公共電極間的電壓差再作用于液晶實(shí)現顯示,因此需要控制TFT的開(kāi)啟電壓VGH、關(guān)閉電壓VGL,以及加到公共電極上的電壓VCOM。

MAX1779芯片能產(chǎn)生LCD需要的模擬電壓AVDD、柵極開(kāi)啟電壓VGH及柵極關(guān)斷電壓VGL。芯片內部集成有3個(gè)DC-DC轉換器,其中包括兩個(gè)充電泵和一個(gè)升壓轉換器,可以為小型TFT液晶屏提供高效的調節電壓。LCD驅動(dòng)電路如圖2所示。



這里,一個(gè)充電泵產(chǎn)生正電壓,作為T(mén)FT的開(kāi)啟電壓VGH;另外一個(gè)充電泵產(chǎn)生負電壓,作為T(mén)FT的關(guān)閉電壓VGL。此外,芯片還可以產(chǎn)生-5V電壓輸出,設計時(shí)利用-5V輸出電壓協(xié)助LM8261產(chǎn)生VCOM信號。

LED背光驅動(dòng)電路

LCD作為一種被動(dòng)顯示器件本身并不能發(fā)光,必須要有背光模塊提供光源。白光LED由于復雜程度較低、成本低且尺寸較小,被普遍用做嵌入式手持設備的LCD背光源。本文中背光驅動(dòng)電路如圖3所示。



驅動(dòng)芯片采用MP1521,該芯片有3組獨立的電流反饋回路,可同時(shí)驅動(dòng)3組并聯(lián)的LED,F將3組反饋回路FB1、FB2、FB3短接,可以提供更大的驅動(dòng)電流,用于驅動(dòng)6個(gè)白色串聯(lián)LED背光燈。

MP1521支持兩種方式控制LED亮度,一是將BRT連接在范圍為0.26V~1.2V的電壓上,另外一種是通過(guò)PWM信號控制LED亮度。設計時(shí),將其連接在PWM端口,使用PWM控制LCD背光亮度。

S3C2440A有5個(gè)16bit定時(shí)器,其中定時(shí)器0、1、2、3有PWM功能。將BRT連接到能夠輸出PWM信號的CPU的TOUT0/GPB0引腳,利用定時(shí)器0產(chǎn)生的PWM信號控制LCD亮度。通過(guò)改變PWM信號的占空比調整LED亮度,而通過(guò)設置CPU內部寄存器的值可以改變PWM的占空比。

為了節省功耗,電路的使能(EN)端接CPU的LCD_PWREN管腳,高電平時(shí)背光電路工作;低電平時(shí)背光電路不工作。同時(shí),可將EN端通過(guò)電阻直接連接到3.3V電源上以便調試時(shí)使用。

LCD_BCK+和LCD_BCK-分別連接到串聯(lián)LED的正負兩端。

軟件設計

手持終端的嵌入式Linux所采用的內核版本是kernel-2.4.18。 為了使LCD能正常顯示,還需要在Linux系統下開(kāi)發(fā)LCD的驅動(dòng)程序。

字符設備的驅動(dòng)程序

字符設備是Linux系統中最簡(jiǎn)單的設備,可以像文件一樣訪(fǎng)問(wèn)。當字符設備初始化的時(shí)候,其驅動(dòng)程序向Linux內核登記,在chrdevs向量表中增加一個(gè)device_struct數據結構條目。這個(gè)設備的主設備標識符用作這個(gè)向量表的索引。一個(gè)設備的主設備標識符是固定的。chrdevs向量表中的 device_struct數據結構包括一個(gè)登記設備驅動(dòng)程序名稱(chēng)的指針和一個(gè)指向一組文件操作的指針。這組文件操作本身位于這個(gè)設備的字符設備驅動(dòng)程序中,并處理一些特定任務(wù)。

Linux下的幀緩沖設備

Linux操作系統為L(cháng)CD等顯示設備提供了幀緩沖區。幀緩沖區(Framebuffer)是Linux為顯示設備提供的一個(gè)接口,是把顯存抽象化后的一種設備。為L(cháng)CD編寫(xiě)驅動(dòng)程序的實(shí)質(zhì)就是為幀緩沖區編寫(xiě)驅動(dòng)程序。

由于幀緩沖驅動(dòng)程序的實(shí)現在許多論文中有詳細敘述,這里不再贅述,本文重點(diǎn)討論背光設備驅動(dòng)程序的實(shí)現。

LCD背光設備的驅動(dòng)程序

LCD背光設備可看作字符設備,可以按照字符設備驅動(dòng)程序的編寫(xiě)方法進(jìn)行實(shí)現。在驅動(dòng)程序里實(shí)現了LCD各種控制功能。驅動(dòng)程序主要包括 lcdctrl.c和lcdctrl_smdk2440.c。其中lcdctrl.c屏蔽了具體的硬件,它通過(guò)鉤子函數調用 lcdctrl_smdk2440.c相關(guān)函數完成各種具體操作。為了形象地說(shuō)明兩個(gè)文件之間的關(guān)系,這里以L(fǎng)CD亮度調節過(guò)程為例,說(shuō)明函數的調用過(guò)程,如圖4所示。



lcdctrl.c中的lcdctrl_ioctl函數需根據上層應用程序的不同參數實(shí)現不同的功能,這些控制LCD的功能包括亮度調整、對比度調整、關(guān)閉LCD、開(kāi)啟LCD等。

下面分別敘述兩個(gè)文件的實(shí)現。

lcdctrl.c文件

1、定義file_operation結構體

static struct file_operations lcdctrl_fops = {
ioctl: lcdctrl_ioctl,
open: lcdctrl_open,
release: lcdctrl_close  };
LCD的各種控制功能在lcdctrl_ioctl函數中實(shí)現,lcdctrl_open和lcdctrl_close不實(shí)現具體功能,直接返回0值。

2、lcdctrl_ioctl函數

lcdctrl_ioctl函數需根據上層應用程序的不同參數實(shí)現不同的功能,這里主要說(shuō)明亮度調節功能的實(shí)現。部分代碼如下:
static int lcdctrl_ioctl(struct inode * inode, struct file *filp,  unsigned int cmd , unsigned long arg)
{……
switch(cmd)
{ ……
  case
_LCDCTRL_IOCTL_BRIGHTNESS:
if ((arg >=0) && (arg <= 100))
ret = lcdctrl_set_brightness(arg);
break; //調節LCD背光亮度
  ……
     break;}
return ret;}

當應用程序傳遞的命令參數為L(cháng)CDCTRL_IOCTL_BRIGHTNESS時(shí),lcdctrl_ioctl調用lcdctrl_set_ brightness具體實(shí)現亮度調節功能。

3、lcdctrl_set_brightness函數

lcdctrl_set_brightness具體實(shí)現亮度調節功能。主要代碼如下:

int lcdctrl_set_brightness(int b)
{
brightness = b;
return lcd_device->set_brightness(b);
}

可以看出,此函數調用lcd_ device->set_brightness函數,而lcd_device在初始化時(shí)已被指向與具體的硬件相關(guān)的函數。

4、初始化函數

初始化函數主要完成初始信息的設置和設備的注冊。

lcdctrl.c_smdk2440文件

1、lcdctrl_device結構體

lcdctrl_device結構體定義了具體操作LCD的各函數指針,包括LCD初始化函數,LCD開(kāi)啟和關(guān)閉函數,亮度、對比度等設置函數。其中LCD關(guān)閉函數的本質(zhì)就是將LCD背光亮度設置為0。

static struct lcdctrl_device smdk2440_dev = {
init:      smdk2440_lcdctrl_init,
enable:     smdk2440_lcdctrl_enable,
disable:    smdk2440_lcdctrl_disable,
set_intensity:  smdk2440_lcdctrl_set_intensity,
set_brightness: smdk2440_lcdctrl_set_brightness,
set_contrast: smdk2440_lcdctrl_set_contrast};

2、smdk2440_lcdctrl_set_brightnes函數

這里只敘述亮度設置函數的實(shí)現。

static int smdk2440_lcdctrl_set_brightness( int b)
{ ……
  TCNTB0 = 100;
  TCMPB0 = b*100/100;
//設置TCMPB0寄存器的值
  TCON =  (TCON & ~(0xf)) | ( TCON_0_AUTO | TCON_0_MAN | COUNT_0_OFF);
TCON =  (TCON & ~(0xf)) | 0;
TCON=(TCON & ~(0xf)) | (TCON_0_AUTO | COUNT_0_ON);}

函數中的語(yǔ)句大部分是給與定時(shí)器相關(guān)的寄存器寫(xiě)值。其中b就是上層函數傳遞下來(lái)的bright值,從程序中可以看到,調節亮度本質(zhì)上是通過(guò)TCMPB0寄存器寫(xiě)入與bright相關(guān)的值,控制PWM占空比實(shí)現亮度調節功能。

3、lcdctrl_device_get_ops函數

用于上層獲取具體設備的鉤子函數。代碼如下:

struct lcdctrl_device *lcdctrl_device_get_ops(void)
{return &smdk2440_dev;}

此函數被lcdctrl.c初始化時(shí)調用,將設備指向smdk2440_dev。
至此,驅動(dòng)程序設計完成,為了更好地實(shí)現LCD的管理,需要在上層的Qtopia應用程序中提供人機操作的界面。

Qtopia應用程序

Qtopia應用程序提供人機操作界面并調用底層驅動(dòng)程序完成LCD控制功能,這里,仍然以亮度調節為例敘述應用程序工作過(guò)程。

主要完成功能:

1、應用程序完成人機操作的界面,為使用人員提供友好界面;

2、讀取亮度值,并將其存入變量bright中;

3、打開(kāi)設備文件:fd=open("/dev/devname",O_RDONLY);

4、調用底層的驅動(dòng)程序,通過(guò)底層的驅動(dòng)程序將LCD背光亮度調整為指定值。

ioctl(fd, _BACKLIGHT_ IOCTL_BRIGHT, bright)。

ioctl函數調用驅動(dòng)程序完成亮度的調節。

結語(yǔ)

經(jīng)測試,設計完成的LCD能很好地完成圖形的顯示,終端電源管理界面中包含了LCD亮度調節功能。

LCD驅動(dòng)電路的設計是手持終端產(chǎn)品的重要組成部分。本文設計并實(shí)現了基于S3C2440A的手持終端LCD驅動(dòng)電路。通過(guò)圖形管理界面能夠方便地管理LCD,達到節約能量、延長(cháng)手持終端工作時(shí)間的目的。

參考文獻

1. 楊水清, 張劍, 施云飛. ARM嵌入式Linux系統開(kāi)發(fā)技術(shù)詳解,電子工業(yè)出版社,2008/11
2. 常贊杰, 張位勇. 基于Framebuffer的LCD驅動(dòng)程序設計. 辦公自動(dòng)化,2008/12

作者:通信指揮學(xué)院 蔡理金 王逢?yáng)| 王會(huì )濤    來(lái)源:電子設計應用2009年第12期
本文地址:http://selenalain.com/thread-6925-1-1.html     【打印本頁(yè)】

本站部分文章為轉載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀(guān)點(diǎn)和對其真實(shí)性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問(wèn)題,我們將根據著(zhù)作權人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页