




已閱讀5頁,還剩54頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
ABSTRACT摘 要III推出平板的目的是為了彌補(bǔ)手機(jī)和筆記本電腦之間的這塊空白區(qū)域,就是為人們提供一款和手機(jī)一樣攜帶方便、操作簡單,但比手機(jī)視覺效果更好,并能像筆記本電腦一樣可以快速流暢的上網(wǎng)、觀看視頻和玩游戲的產(chǎn)品。軟件方面,除蘋果自己有自己的IOS外,不管是國內(nèi)還是國外廠商,由于google的開源,基本都選擇了 andriod操作系統(tǒng)作為開發(fā)平臺。Android是一個基于linux內(nèi)核的操作系統(tǒng),在一款產(chǎn)品的開發(fā)過程中,硬件驅(qū)動程序的開發(fā)和調(diào)試是一項(xiàng)艱巨的任務(wù),驅(qū)動程序的質(zhì)量直接影響產(chǎn)品的性能和穩(wěn)定性,所以對平板上驅(qū)動程序的研究和設(shè)計(jì)具有實(shí)際工程意義。此次設(shè)計(jì)針對平板電腦中常用的幾個硬件驅(qū)動進(jìn)行了研究和設(shè)計(jì),如LCD驅(qū)動,PWM背光驅(qū)動,按鍵驅(qū)動等。旨在熟悉驅(qū)動設(shè)計(jì)流程,掌握驅(qū)動設(shè)計(jì)的一般方法。關(guān)鍵字:平板電腦,Android,linux,硬件驅(qū)動ABSTRACTThe purpose of the launch of the tablet is in order to make up the piece of blank area between mobile phones and laptop computers for people to offer a device as easy as mobile phone to carry, simple to operate, but better than the mobile phone visual effects, and the same as the laptop can quickly access to the Internet, watching videos and playing games. On the software side, in addition to Apples own IOS, whether domestic or foreign manufacturers, because of google opened the android source code, basically choose the andriod operating system as the development platform. Android is a Linux kernel-based operating system, in the process of a product development, developing and debugging hardware drivers is an arduous task, the quality of the driver directly impact on product performance and stability, So the research and design of the driver on the Tablet PC has a practical engineering significance. This paper will research and design a few hardware drivers that commonly used in the Tablet PC, such as LCD drivers, PWM backlight driver, key drivers and so on. The purpose of this design is to familiar to the driver design process and grasp the general approach to driver design.Keywords: tablet pc, android, linux, hardware drivers目錄目 錄第一章 引言51.1 ARM處理器介紹51.2 android 操作系統(tǒng)介紹61.3 平板電腦驅(qū)動開發(fā)概述7第二章軟硬件平臺介紹和啟動過程分析92.1 硬件平臺介紹92.2 軟件平臺介紹92.3 啟動過程分析10第三章 LCD驅(qū)動設(shè)計(jì)及實(shí)現(xiàn)133.1 顯示控制器及顯示器硬件配置133.1.1 S5PV210 顯示控制器133.1.2 三星9.7寸IPS屏LTN097XL02133.1.3 顯示模塊硬件連接方式143.2 android下的LCD驅(qū)動153.2.1 LCD 硬件時序參數(shù)設(shè)置153.2.2 LCD硬件設(shè)備注冊163.2.3 frambuffer驅(qū)動注冊18第四章 PWM背光驅(qū)動設(shè)計(jì)及實(shí)現(xiàn)194.1 PWM背光控制器硬件連接194.2 linux內(nèi)核PWM驅(qū)動194.2.1 PWM背光設(shè)備注冊194.2.2 PWM背光驅(qū)動注冊204.3 PWM 背光在android HAL 層移植224.3.1 什么是硬件抽象層224.3.2 HAL的實(shí)現(xiàn)機(jī)制234.3.3 pwm背光的HAL層實(shí)現(xiàn)24第五章 接鍵驅(qū)動設(shè)計(jì)及實(shí)現(xiàn)275.1 接鍵硬件鏈接以及功能要求275.2內(nèi)核空間按鍵驅(qū)動設(shè)計(jì)和實(shí)現(xiàn)275.2 android對按鍵的重映射32第六章 振動電機(jī)驅(qū)動設(shè)計(jì)及實(shí)現(xiàn)356.1功能要求以及硬件連接356.2內(nèi)核空間振動電機(jī)驅(qū)動設(shè)計(jì)及實(shí)現(xiàn)356.2.1 什么是timed GPIO356.2.2 振動電機(jī)的Timed GPIO驅(qū)動實(shí)現(xiàn)366.3振動電機(jī)驅(qū)動HAL層的實(shí)現(xiàn)40第七章 WM8976聲道自動切換設(shè)計(jì)及實(shí)現(xiàn)437.1功能要求以及硬件鏈接437.2內(nèi)核空間聲道自動切換設(shè)計(jì)及實(shí)現(xiàn)447.2.1什么是switch IO447.2.1 switch IO 耳機(jī)插拔檢測驅(qū)動設(shè)計(jì)及實(shí)現(xiàn)447.2.2 wm8976聲道切換控制實(shí)現(xiàn)48總結(jié)51參考文獻(xiàn)52致謝53外文資料原文54譯文5755第一章 引言第一章 引言2010年1月份蘋果公司發(fā)布了iPad平板電腦,從此為IT行業(yè)帶來了一個全新的產(chǎn)業(yè)。iPad定位是介于智能手機(jī)和筆記本電腦之間的產(chǎn)品,提供瀏覽互聯(lián)網(wǎng)、收發(fā)電子郵件、觀看電子書、播放音頻或視頻等功能。從產(chǎn)品定位我們可以看出,蘋果公司推出iPad的目的是為了彌補(bǔ)手機(jī)和筆記本電腦之間的這塊空白區(qū)域,就是為人們提供一款和手機(jī)一樣攜帶方便、操作簡單,但比手機(jī)視覺效果更好,并能像筆記本電腦一樣可以快速流暢的上網(wǎng)、觀看視頻和玩游戲的產(chǎn)品。iPad的推出,可以說開啟了后PC時代,其火爆的銷量讓以前其他眾多處于觀望的廠商也迅速殺入的這塊市場。得益于集成電路的高速發(fā)展,以前需要很多電路才可以完成的功能現(xiàn)在都被高度整合到了SOC之中(片上系統(tǒng))。所以和PC相比,平板電腦可以把體積做得更小。功耗做得更底。從硬件和軟件的角度來講,最關(guān)鍵的分別是SOC和操作系統(tǒng)。在SOC這一塊,國外主要被高通、三星、TI、NVIDIA這些廠商所占據(jù)。這些廠商做出來的SOC集成度高,功能強(qiáng)勁,CPU主頻現(xiàn)一般在1G-1.5G左右。基本已經(jīng)過渡到雙核時代。終端制造廠商做出來的平板終端主要面向高端消費(fèi)市場。在國內(nèi),幾家面向移動多媒體終端的IC設(shè)計(jì)公司也推出了性能優(yōu)異的SOC芯片。如:珠海全志,福州瑞芯微,北京君正,晶晨半導(dǎo)體等。這些廠商的推出的SOC集成度也較高。主頻從800MHZ-1.2GHZ,均為單核處理器。整體上比國外大廠要低一個檔次。但是,用這些廠商做出來的平板方案成本很低,更復(fù)合中國消費(fèi)者的消費(fèi)習(xí)慣。所以市場也非常的廣闊。在軟件方面。除蘋果自己有自己的IOS外,不管是國內(nèi)還是國外廠商,由于google的開源,基本都選擇了 andriod操作系統(tǒng)作為開發(fā)平臺。所以在這個平臺上的軟件資源非常豐富。對于方案設(shè)計(jì)商和終端制造商,只要具備一定的開發(fā)實(shí)力,都可以以這個平臺做出差異化地方案。1.1 ARM處理器介紹ARM是Advanced RISC Machines的縮寫,即可以認(rèn)為是一個公司的名字,也可以認(rèn)為是對一類微處理器的通稱,還可以認(rèn)為是種技術(shù)的名字。目前,ARM公司專門從事基于RISC技術(shù)芯片的設(shè)計(jì)開發(fā),作為知識產(chǎn)權(quán)供應(yīng)商,ARM 的商業(yè)模式主要涉及 IP 的設(shè)計(jì)和許可,而非生產(chǎn)和銷售實(shí)際的半導(dǎo)體芯片。他們向合作伙伴(包括世界領(lǐng)先的半導(dǎo)體公司和系統(tǒng)公司)授予 IP 許可證。這些合作伙伴可利用 ARM 的 IP 設(shè)計(jì)創(chuàng)造和生產(chǎn)片上系統(tǒng)設(shè)計(jì),但需要向 ARM 支付原始 IP 的許可費(fèi)用并為每塊生產(chǎn)的芯片或晶片交納版稅。除了處理器 IP 外,他們還提供了一系列工具、物理和系統(tǒng) IP 來優(yōu)化片上系統(tǒng)設(shè)計(jì).圖1-1 ARM 產(chǎn)品線:提供領(lǐng)先的設(shè)計(jì)、實(shí)現(xiàn)和應(yīng)用正因?yàn)?ARM 的 IP 多種多樣以及支持基于 ARM 的解決方案的芯片和軟件體系十分龐大,全球領(lǐng)先的原始設(shè)備制造商 (OEM) 都在廣泛使用 ARM 技術(shù),應(yīng)用領(lǐng)域涉及手機(jī)、數(shù)字機(jī)頂盒以及汽車制動系統(tǒng)和網(wǎng)絡(luò)路由器。當(dāng)今,全球 95% 以上的手機(jī)以及超過四分之一的電子設(shè)備都在使用 ARM 技術(shù)。在平板領(lǐng)域,國外廠商基本青一色的使用了ARM的內(nèi)核或者具有ARM ISA的處理器。在國內(nèi),除北京群正自主研發(fā)基于MIPS ISA的xburst架構(gòu)CPU以外。其他廠商都采用了ARM cortex A8或cortex A9內(nèi)核,在此基礎(chǔ)上再加入廠商自己的外設(shè)如USB,LCDC,HDMI,audio codec,video codec等,形成具有自主特色的SOC。1.2 android 操作系統(tǒng)介紹Android最早是由google在2007年發(fā)布的一款操作系統(tǒng),Android是一種以Linux為基礎(chǔ)的開放源代碼操作系統(tǒng),主要使用于便攜設(shè)備。Android操作系統(tǒng)最初由Andy Rubin開發(fā),最初主要支持手機(jī)。2005年由Google收購注資,并組建開放手機(jī)聯(lián)盟開發(fā)改良,逐漸擴(kuò)展到平板電腦及其他領(lǐng)域上。自2007年發(fā)布以來,Android已經(jīng)經(jīng)歷了數(shù)個版本的更新,市面上采用該系統(tǒng)的移動設(shè)備數(shù)量也在飛速增長。目前市面上實(shí)用的比較多的版本為android2.3, 代號為姜餅。Google最新的版本為4.0,代號為冰欺凌三明治。根據(jù)google的官方統(tǒng)計(jì),就目前的市場占有率來看,2.3版本為市場占有市場份額最多的anroid版本。約占了整個android 的63.9%。在該平臺上軟件資源也是最豐富的。圖1-2 Anroid設(shè)備中各版本占有率 1.3 平板電腦驅(qū)動開發(fā)概述驅(qū)動程序是一種實(shí)現(xiàn)硬件具體功能的軟件。做驅(qū)動程序開發(fā)不僅僅要明白操作系統(tǒng)為我們提供的驅(qū)動模型,常用的數(shù)據(jù)結(jié)構(gòu)。而且要理解我們所操作的硬件。明白硬件的工作原理。所以驅(qū)動程序的開發(fā)工作非常具有挑戰(zhàn)性。在現(xiàn)在市長上銷售的平板中,大多數(shù)在硬件平臺上,選用ARM處理器,軟件平臺上選用 android(蘋果有自家的IOS),所以,平板電腦上的驅(qū)動開發(fā)可以說是在ARM平臺上的android驅(qū)動開發(fā),由于android是linux內(nèi)核,所以android下有很多為標(biāo)準(zhǔn)的linux 驅(qū)動,如串口驅(qū)動, framebuffer驅(qū)動,touch panel驅(qū)動等。但android 也有自己的專有驅(qū)動。具體如下:1.Android Binder: 基于OpenBinder框架的一個驅(qū)動,用于提供Android平臺的進(jìn)程間通信功能。2.Android電源管理(PM): 一個基于標(biāo)準(zhǔn)liunx電源管理系統(tǒng)的輕量級Android電源管理驅(qū)動,針對嵌入式設(shè)備做了很多優(yōu)化。3.低內(nèi)存管理器(Low Memory Killer): 根據(jù)系統(tǒng)運(yùn)行的需要?dú)⑺肋M(jìn)程以釋放需要的內(nèi)存。4.匿名共享內(nèi)存(Asheme): 為進(jìn)程間提供大量共享內(nèi)存,同時為內(nèi)核提供回收和管理這個內(nèi)存的機(jī)制。5.Android PMEM(physical): PMEME用于向用戶空間提供連續(xù)的物理內(nèi)存區(qū)域。6.Android Logger: 一個輕量級的日志設(shè)備,用于抓取Android系統(tǒng)的各種日志。7.Android Alarm: 提供了一個定時器,用于把設(shè)備從睡眠狀態(tài)喚醒,同時它還提供了一個即使在設(shè)備睡眠時也會運(yùn)行的時鐘基準(zhǔn)。8.USB Gadget: 驅(qū)動 一個基于標(biāo)準(zhǔn)liunx usb gadget 驅(qū)動框架的設(shè)備驅(qū)動,Android的USB驅(qū)動是基于gadget框架。9.Android ram Console: 為了提供調(diào)試功能,Android允許將調(diào)試日志信息寫入一個被稱為RAM Console的設(shè)備里,它是一個基于RAM的Buffer.10.Android timed deivce: 提供了對設(shè)備進(jìn)行定時控制功能,目前支持vibrator 和LED設(shè)備.11.Yaffs2文件系統(tǒng): Android采用Yaffs2作為MTD nand flash文件系統(tǒng)。同時,同標(biāo)準(zhǔn)的linux相比,android驅(qū)動開發(fā)中,為我們提出了一個新的概念HAL(Hardware Abstract Layer硬件抽象層). 是Google因應(yīng)廠商希望不公開源碼的要求下,所推出的新觀念。HAL運(yùn)行在用戶空間,這樣,驅(qū)動程序就可以不受GPL的限制,不用公開源代碼。他們的硬件規(guī)格和驅(qū)動代碼就可以很好的保護(hù)驅(qū)動。這對很多設(shè)備制造商來說,是一種良好的自我保護(hù)。在android移植中,HAL也是需要驅(qū)動人員去開發(fā)的一部分。針對我們的自己搭建的硬件平臺,在本文中將重點(diǎn)闡述如下驅(qū)動的移植和開發(fā):1.三星9.7英寸IPS顯示面板顯示驅(qū)動設(shè)計(jì)。2.顯示面板PWM背光驅(qū)動程序設(shè)計(jì)。3.平板電腦上按鍵驅(qū)動設(shè)計(jì)。4.振動電機(jī)驅(qū)動設(shè)計(jì)。5.WM8976 codec研究,配合硬件實(shí)現(xiàn)耳機(jī)插入檢測,著重解決外放喇叭和耳機(jī)聲道自動切換問題。第二章 軟硬件平臺介紹和啟動過程分析第二章軟硬件平臺介紹和啟動過程分析2.1 硬件平臺介紹在硬件平臺上選用三星蜂鳥ARM處理器s5pv210.其具有如下特性:l CortexTM-A8架構(gòu) l 32KB I/D緩存,512KB二級緩存 l 64位多總線架構(gòu) l 支持MPEG4,H.263,H.264 1080P30fps編解碼以及MPEG4 l 1080P30fps解碼 l JPEG解碼高達(dá)80Mpixels/s l 2D,3D高性能加速 l HDMI,TV OUT 根據(jù)應(yīng)用需求,我們板載如下硬件:1. 三星K4T1G084QE 512MB DDR2.2. 9.7寸IPS顯示屏,分辨率為1024*768.3. 9.7寸10點(diǎn)電容觸摸屏。采用深圳goodix GT8105芯片組.4. HDMI高清輸出接口.5. OV2655 200W像素前置攝像頭.6. WM8976 audio codec,自帶AB類功放.7. Kionix KXTF9-2050 加速度傳感器.8. Atheros AR6102 WIFI.9. 7400MA 鋰電池,并設(shè)計(jì)了充電電路.10. 振動電機(jī).2.2 軟件平臺介紹在軟件開發(fā)上選用 xboot作為啟動引導(dǎo)bootloader。xboot是由深圳九鼎展創(chuàng)科技有限公司自主開發(fā)的開源bootloader。具有如下特性: 支持多操作系統(tǒng)選擇啟動,默認(rèn)系統(tǒng)可自定義; 支持開機(jī)LOGO; 支持shell命令行腳本解析; 源碼架構(gòu)清晰易懂,無需繁瑣的宏定義; 添加程序簡單,類似linux驅(qū)動加載; 完全免費(fèi)開源工程,無須license; 支持打包內(nèi)核,調(diào)試更加出色; 支持打包文件系統(tǒng),boot,kernel,ramdisk只需一個文件; Android采用目前兼容性最好的android2.3。 內(nèi)核采用linux2.6.37.整個開發(fā)過程在ubuntu10.10下完成.2.3 啟動過程分析系統(tǒng)啟動過程是一個代碼從閃存到內(nèi)存,初始化必須的硬件并為操作系統(tǒng)的運(yùn)行做好前期準(zhǔn)備的過程。本系統(tǒng)中啟動代碼由三部分組成:IROM,一級bootloader,二級bootloader。其中IROM由CPU自身硬件實(shí)現(xiàn),一級和二級bootloader由xboot實(shí)現(xiàn).每一個階段的特點(diǎn)為:l iROM代碼:包含小而簡單的代碼,是獨(dú)立于平臺和存儲在內(nèi)部存儲器l 一級引導(dǎo)裝載程序:包含小而簡單的代碼,這是獨(dú)立于平臺和存儲在外部存儲設(shè)備。l 二級引導(dǎo)裝載程序:包含復(fù)雜的代碼,這是特定于平臺和存儲在外部存儲設(shè)備。S5PV210內(nèi)帶64K ROM 和96K SRAM。內(nèi)部的64KB ROM和內(nèi)部96KB SRAM的地區(qū)都可以用于引導(dǎo)??赏ㄟ^外部引腳設(shè)置選擇從不同的設(shè)備啟動. 圖2-1 啟動引導(dǎo)過程具體啟動過程如下:IROM代碼被放置在內(nèi)部的64KB ROM。它初始化基本系統(tǒng)功能,如時鐘,堆棧和堆。該IROM從一個特定的外部引導(dǎo)設(shè)備復(fù)制一級bootloader到內(nèi)部96KB的SRAM。引導(dǎo)設(shè)備的選擇由工作模式(OM)引腳確定。在一級bootloader中主要完成如下功能:1. 關(guān)閉看門狗2. 設(shè)置CPU到管理模式3. 關(guān)MMU4. 初始化系統(tǒng)時鐘5. 初始化DRAM控制器6. 鎖定系統(tǒng)電源狀態(tài)7. 跳轉(zhuǎn)到二級bootloader其中在鎖定系統(tǒng)電源這個步驟是為了用戶開機(jī)的實(shí)現(xiàn)。在硬件上系統(tǒng)有如下開機(jī)電路:圖2-2 硬件開機(jī)電路整個供電電路中,首先按住SW12,即POWER鍵,MOS管Q5的柵級由高電平變?yōu)榈碗娖剑琈OS管導(dǎo)通,DCDC芯片MP1482的使能腳被拉高,5V電壓產(chǎn)生。隨后,3.3V的DC-DC電源芯片由于5V電源已近輸入也會開始工作,產(chǎn)生3.3V電壓,給整個板卡供電,程序開始運(yùn)行。在bootloader中將網(wǎng)絡(luò)標(biāo)號為PWR_LOCK的GPIO口拉高,注意這時5V供電部分的三極管Q6導(dǎo)通,MOS管Q5維持導(dǎo)通,至此,可以松開POWER按鍵整個電源已經(jīng)置鎖。在二級bootloader中主要完成如下功能:1.初始化本階段用到的外設(shè)2.拷貝內(nèi)核鏡像和根文件系統(tǒng)到DRAM中3.設(shè)置啟動參數(shù)4.調(diào)用內(nèi)核.第三章 LCD驅(qū)動設(shè)計(jì)及實(shí)現(xiàn)第三章 LCD驅(qū)動設(shè)計(jì)及實(shí)現(xiàn)3.1 顯示控制器及顯示器硬件配置3.1.1 S5PV210 顯示控制器S5PV210自帶顯示控制器,它可以將總線上圖像數(shù)據(jù)和系統(tǒng)內(nèi)存中的視屏緩沖區(qū)里的數(shù)據(jù)傳輸?shù)酵獠縇CD接口上。外部的LCD接口支持三種類型:RGB接口,間接I80接口,和YUV接口。顯示控制器具有五個疊加圖形窗口,支持多種顏色模式,256級alpha混合,色鍵,XY位置控制,軟滾動,可變窗口大小. 同時支持各種顏色格式,如RGB(1 BPP24 BPP)和YCbCr4:4:4.可通過軟件配置以支持在屏幕上的水平和垂直像素,數(shù)據(jù)接口數(shù)據(jù)線的寬度,接口時序,和刷新率的不同要求.顯示控制器傳輸視頻數(shù)據(jù),并產(chǎn)生必要的控制信號,如,RGB_VSYNC,RGB_HSYNC,RGB_VCLK,RGB_VDEN和SYS_CS0,SYS_CS1,SYS_WE。除了產(chǎn)生控制信號,顯示控制器包含視頻數(shù)據(jù)的數(shù)據(jù)端口。其結(jié)構(gòu)框圖如下:3-1 S5PV210顯示控制器結(jié)構(gòu)框圖3.1.2 三星9.7寸IPS屏LTN097XL02LTN097X02是一個完整的具有LED背光系統(tǒng)的彩色有源矩陣液晶顯示器。 矩陣采用的a-Si薄膜晶體管作為有源元件。它是一種透射型顯示操作系統(tǒng)。這塊TFT-LCD具有9.7英寸XGA主動顯示區(qū)域分辨率(1024768像素)。每個像素被分為紅,綠,藍(lán)子像素。每個子像素具有6級灰度信號,一共呈現(xiàn)出262,144種顏色。LTN097XL02采用了LVDS接口,以使整個模塊達(dá)到低功耗,高速,低EMI要求。基于這些特點(diǎn)他非常適合作為平板電腦顯示器。其整個模塊框圖如下:圖3-2 LTN097XL02內(nèi)部結(jié)構(gòu)框圖3.1.3 顯示模塊硬件連接方式由于S5PV210的顯示控制器不支持LVDS接口,所以外接電路需要實(shí)現(xiàn)RGB到LVDS的轉(zhuǎn)換電路。選用DOESTEK DTC34LM85A作為LVDS發(fā)送器,完成RGB接口到LVDS接口的時序轉(zhuǎn)換其硬件電路如下:圖3-3 RGB接口轉(zhuǎn)LVDS接口電路特別值得注意的是,芯片具有一個PDN引腳,該引腳為低電平時,整個芯片進(jìn)入低功耗模式,芯片停止工作,整個IC的從3.3V吸收的電流從大約35mA降到10uA,可大大降低功耗。因此把此引腳連入到CPU上的GPIO,通過驅(qū)動控制以達(dá)到控制顯示模塊掛起時的低功耗的目的。3.2 android下的LCD驅(qū)動三星公司把LCD的驅(qū)動程序在內(nèi)核中以platform driver的形式注冊。針對不同的LCD dvice,需要補(bǔ)充實(shí)現(xiàn)不同的platform dvice。注冊后,驅(qū)動程序根據(jù)注冊的硬件信息來配置和初始化顯示控制器。以達(dá)到硬件上的時序要求,同時伴隨注冊的為LCD的操作方法,如LCD gpio配置,打開背光,關(guān)閉背光,LCD復(fù)位等操作。3.2.1 LCD 硬件時序參數(shù)設(shè)置圖3-4 RGB接口驅(qū)動時序上圖給出了LCD屏的典型時序,時序圖中的VCLK,HSYNC和VYSNC分別為像素時種信號,行同步信號,幀同步信號,VDEN為數(shù)據(jù)有效標(biāo)志,VD為圖像的數(shù)據(jù)信號。作為幀同步信號的VSYNC,每發(fā)出一個脈沖,都意味著新的一屏數(shù)據(jù)開始發(fā)送,上一屏數(shù)據(jù)結(jié)束和下一屏數(shù)據(jù)開始中間的時間為場消隱(field blanking)。而作為行同步信號的HSYNC,每發(fā)出一個脈沖都表明新的一行圖像數(shù)據(jù)開始發(fā)送。在一行數(shù)據(jù)結(jié)束和下一行數(shù)據(jù)開始之間的時間為行消隱(line blanking)。在幀同步和行同步之前和之后都必須留下消隱時間。場消隱時間=VFPD+1+VSPW+1+VBPD+1;其中VFPD為場消隱前沿,VSPW為場消隱脈沖寬度,VBPD為場消隱后沿。行消隱時間= HFPD+1+HSPW+1+HBPD+1;其中HFPD為行消隱前沿,HSPW為行消隱脈沖寬度,HBPD為行消隱后沿。圖3-5 LTN097XL02硬件時序參數(shù)其參數(shù)可通過LTN097XL02硬件手冊得到。如上圖所示。3.2.2 LCD硬件設(shè)備注冊在系統(tǒng)初始化過程中,調(diào)用static void _init smdkv210_machine_init(void)函數(shù),在其中注冊frambuffer的 platform device:platform_device_register(&s3c_device_fb);然后為frambuffer設(shè)置平臺數(shù)據(jù):s3cfb_set_platdata(<N097xl02_data);其中LTN097xl02定義為:static struct s3c_platform_fb LTN097xl02_fb_data _initdata = .hw_ver= 0x62,.nr_wins = 5,.default_win = CONFIG_FB_S3C_DEFAULT_WINDOW,.swap = FB_SWAP_WORD | FB_SWAP_HWORD,.lcd = & LTN097lx02,.cfg_gpio= LTN097lx02_cfg_gpio,.backlight_on= LTN097lx02_backlight_on,.backlight_onoff = LTN097lx02_backlight_off,.reset_lcd= LTN097lx02_reset_lcd,;其中ek070tn93定義為:static struct s3cfb_lcd LTN097lx02 = .width = 1024,.height = 768,.bpp = 32,.freq = 60,.timing = .h_fp= 260,.h_bp= 480,.h_sw= 10,.v_fp= 22,.v_fpe= 1,.v_bp= 18,.v_bpe= 1,.v_sw= 7,.polarity = .rise_vclk = 0,.inv_hsync = 1,.inv_vsync = 1,.inv_vden = 0,;這個結(jié)構(gòu)體中決定了lcd顯示分辨率,顯示幀率,以及色深。.timing域就決定了LCD的硬件時序參數(shù)。.polarity域決定了LCD控制性號的有效電平為高有效還是低有效。3.2.3 frambuffer驅(qū)動注冊由于顯示控制器已經(jīng)集成在三星的SOC中作為一個獨(dú)立的硬件模塊布存在,因此LCD驅(qū)動包含了平臺驅(qū)動。這樣在frambuffer設(shè)備注冊的過程中只需要注冊平臺驅(qū)動。當(dāng)找到匹配的平臺設(shè)備時,在探測函數(shù)中完成了如下4個工作:(1) 申請fb_info結(jié)構(gòu)體內(nèi)存空間,初始化FBI結(jié)構(gòu)體中固定和可變的屏幕參數(shù)。(2) 根據(jù)注冊的LCD dvice傳遞的硬件信息,完成顯示控制器的初始化。(3) 申請frambuffer設(shè)備顯示緩沖空間。(4) 注冊frambuffer設(shè)備。注冊的frambuffer設(shè)備將在用戶空間生成相應(yīng)的節(jié)點(diǎn),操作系統(tǒng)調(diào)用相應(yīng)的操作節(jié)點(diǎn),以達(dá)到操作LCD硬件的目的。第四章 PWM背光驅(qū)動設(shè)計(jì)及實(shí)現(xiàn)第四章 PWM背光驅(qū)動設(shè)計(jì)及實(shí)現(xiàn)4.1 PWM背光控制器硬件連接圖4-1 PWM背光驅(qū)動電路在硬件上采用MPS MP3202升壓恒流IC,CPU 發(fā)出受軟件控制的PWM信號。經(jīng)過R64,C34濾波后改變參考直流DC電勢,以達(dá)到調(diào)節(jié)背光的目的。CPU通過一個GPIO控制MP3202 EN端,從而控制背光的打開和關(guān)閉。4.2 linux內(nèi)核PWM驅(qū)動4.2.1 PWM背光設(shè)備注冊由于S5PV210自帶PWM控制器,所以PWM設(shè)備在內(nèi)核被抽象為一個平臺設(shè)備。我們使用PWM_TOUT0作為背光驅(qū)動設(shè)備。在mach-smdkv210.c中定義PWM背光設(shè)備為:static struct platform_device smdk_backlight_device = .name = pwm-backlight,.id = -1,.dev = .parent = &s3c_device_timer0.dev,.platform_data = &smdk_backlight_data,;其中.name定義了背光設(shè)備的名字 .platform_data成員指向了此背光設(shè)備的平臺數(shù)據(jù),其定義為:static struct platform_pwm_backlight_data smdk_backlight_data = .pwm_id = 0,.max_brightness = 255,.dft_brightness = 255,.pwm_period_ns = 78770*4,;此結(jié)構(gòu)體中比較重要的兩個成員為 max_brightness:最大亮度值。由于android 平臺上規(guī)定PWM背光亮度范圍為0255.所以設(shè)置最大亮度值為255。pwm_period_ns決定了pwm的周期:Tpwm=78770*4=315080 (ns)。故PWM的輸出頻率為:Fpwm=1/Tpwm=3.17(KHz)。定義的PWM設(shè)備通過platform_device_register(&smdk_backlight_device)函數(shù)調(diào)用注冊為一個平臺設(shè)備。4.2.2 PWM背光驅(qū)動注冊由于PWM背光設(shè)備被實(shí)現(xiàn)為一個平臺設(shè)備,則需要與之對應(yīng)的平臺驅(qū)動來驅(qū)動該設(shè)備。此驅(qū)動在內(nèi)核代碼/driver/video/backlight/Pwm_bl.c中實(shí)現(xiàn)。在模塊加載過程中先執(zhí)行模塊初始化函數(shù):static int _init pwm_backlight_init(void)return platform_driver_register(&pwm_backlight_driver);在初始化中完成對PWM背光平臺驅(qū)動的注冊。其中pwm_back_light_driver定義為:static struct platform_driver pwm_backlight_driver = .driver= .name= pwm-backlight,.owner= THIS_MODULE,.probe= pwm_backlight_probe,.remove= pwm_backlight_remove,.suspend= pwm_backlight_suspend,.resume= pwm_backlight_resume,;在此結(jié)構(gòu)體中實(shí)現(xiàn)了平臺驅(qū)動的幾個方法:探測硬件是否存在的probe方法,移除驅(qū)動的remove方法, 睡眠掛起的suspend方法和恢復(fù)的resume方法。當(dāng)此驅(qū)動加載時,通過匹配驅(qū)動名和設(shè)備名來遍歷系統(tǒng)中是否存在相應(yīng)的設(shè)備,如匹配成功,則調(diào)用pwm_backlight_probe函數(shù),在此函數(shù)中完成的操作為:圖4-2 pwm_backlight_probe函數(shù)執(zhí)行流程其中注冊背光設(shè)備到backlight類的實(shí)現(xiàn)為:backlight_device_register(dev_name(&pdev-dev), &pdev-dev, pb, &pwm_backlight_ops, &props);其中dev_name(&pdev-dev)為注冊設(shè)備的名字。最終被解析為“pwm-backlight”, pwm_backlight_ops參數(shù)的定義為:static const struct backlight_ops pwm_backlight_ops = .update_status= pwm_backlight_update_status,.get_brightness= pwm_backlight_get_brightness,;pwm_backlight_update_status為用戶空間對相應(yīng)節(jié)點(diǎn)的寫操作實(shí)現(xiàn)的內(nèi)核空間的回調(diào)函數(shù),pwm_backlight_get_brightness向用戶空間反回當(dāng)前的PWM背光亮度.整個探測過程結(jié)束后,在sys文件系統(tǒng)下,生成/sys/class/backlight/pwm-backlight/brightness節(jié)點(diǎn),用戶空間通過寫這個節(jié)點(diǎn)來實(shí)現(xiàn)背光亮度的調(diào)節(jié)。4.3 PWM 背光在android HAL 層移植4.3.1 什么是硬件抽象層Android HAL是google應(yīng)廠商希望不公開源代碼的要求所推出的一個概念。它能以封閉源碼的形式提供硬件驅(qū)動模塊。其目的是把Android Framwork與 Linux Kernel隔開,讓Android不至于過度依賴Linux Kernel,以達(dá)成Kernel Independent的概念,也讓Android Framwork的開發(fā)能在不考慮驅(qū)動程序的前提下進(jìn)行。HAL提供了簡單的設(shè)備驅(qū)動程序接口,應(yīng)用程序使用設(shè)備驅(qū)動程序與底層硬件進(jìn)行通信。另外,HAL應(yīng)用程序接口和ANSIC標(biāo)準(zhǔn)庫結(jié)合在一起,用戶可以使用C語言庫函數(shù)來訪問Android文件系統(tǒng)。其在android中的位置如下圖所示:圖4-3 android軟件框架圖從上圖可以看到,HAL位于Linux Kernel與Libraries和Android Runtime之間,也就是說,HAL是底層硬件設(shè)備驅(qū)動程序提供給Application Framwork的一個接口,它將直接和底層的設(shè)備驅(qū)動程序掛接。因此當(dāng)我們需要將Android移植到具體硬件時,或者給Android添加硬件支持時,都需要對Android的HAL層進(jìn)行移植或?qū)崿F(xiàn)。4.3.2 HAL的實(shí)現(xiàn)機(jī)制 通過鏈接庫模塊實(shí)現(xiàn)早期的 Android HAL通過鏈接庫模塊實(shí)現(xiàn),在“hardware/libhardware_ legacy”目錄中實(shí)現(xiàn),它需要將HAL實(shí)現(xiàn)為一個*.so的共享庫,然后在Runtime中通過函數(shù)直接調(diào)用HAL Module來操作驅(qū)動程序。其調(diào)用流程如下圖所示:圖4-4 Android HAL通過鏈接庫實(shí)現(xiàn)的調(diào)用流程由于采用了直接調(diào)用方式,可被多個進(jìn)程使用,但會被映射到多個進(jìn)程空間,從而造成資源浪費(fèi),同時需要考慮代碼能否安全重入的問題。 通過HAL stub方式實(shí)現(xiàn)HAL stub方式是Android改進(jìn)后的方式,引入了樁(stub)的概念,stub 雖然仍是以 *.so庫的形式存在,但 HAL 已經(jīng)將 *.so 庫隱藏起來了。Stub 向 HAL提供操作函數(shù)(operations),而 runtime 則是向 HAL 取得特定模塊(stub)的 操作函數(shù),再 回調(diào) 這些操作函數(shù)。和以鏈接庫模塊方式實(shí)現(xiàn)的不同就在于:HAL stub是通過回調(diào)函數(shù)間接的調(diào)用操作。這就說明HAL中包含了各種各樣的stub,Runtime只需要通過不同的類型(moduleID)就可以取得不同設(shè)備驅(qū)動的操作。其調(diào)用流程如下圖所示:圖4-5 Android HAL通過stub方式實(shí)現(xiàn)的調(diào)用流程實(shí)際上,這種方式也將Android在不同的硬件中的移植工作進(jìn)行了簡化,統(tǒng)一了訪問硬 件的接口,不同的硬件只需要按照規(guī)則實(shí)踐這些接口即可。4.3.3 pwm背光的HAL層實(shí)現(xiàn)由于HAL層是以模塊的方式被加載,所以HAL 層的實(shí)現(xiàn)也可以看成是一個硬塊的實(shí)現(xiàn)。在devicesamsungproprietaryliblight下建立lights.c和Android.mk文件.其中Android.mk文件內(nèi)容如下:LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)LOCAL_SRC_FILES := lights.cLOCAL_PRELINK_MODULE := falseLOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/hwLOCAL_SHARED_LIBRARIES := liblogLOCAL_MODULE := lights.$(TARGET_BOARD_PLATFORM)LOCAL_MODULE_TAGS := optionalinclude $(BUILD_SHARED_LIBRARY)通過這個makefile,在整個android編譯時就會生成相應(yīng)的共享庫,由于我們的目標(biāo)平臺為smdkv210。所以最后生成lights.smdkv210.so,并放到目標(biāo)平臺上lib/hw/目錄下。在lights.c中實(shí)現(xiàn)如下模塊結(jié)構(gòu):const struct hw_module_t HAL_MODULE_INFO_SYM = .tag = HARDWARE_MODULE_TAG,.version_major = 1,.version_minor = 0,.id = LIGHTS_HARDWARE_MODULE_ID,.name = lights Module,.author = Google, Inc.,.methods = &lights_module_methods,;hw_module_t結(jié)構(gòu)體的methods成員是一個指向hw_module_methods_t結(jié)構(gòu)體的一個指針,hw_module_methods_t結(jié)構(gòu)體定義如下:typedef struct hw_module_methods_t int (*open)(const struct hw_module_t* module, const char* id,struct hw_device_t* device); hw_module_methods_t;據(jù)此我們定義一個hw_module_methods_t類型的參數(shù)lights_module_methods如下:static struct hw_module_methods_t lights_module_methods = .open = open_lights,;其中open_lights實(shí)現(xiàn)流程如下:圖4-6 open_light函數(shù)實(shí)現(xiàn)流程首先設(shè)置了背光回調(diào)函數(shù),以在需要對背光操作的時候回調(diào)這個函數(shù)。初始化一個線程互斥鎖用于保護(hù)在回調(diào)調(diào)光函數(shù)內(nèi)對節(jié)點(diǎn)的寫操作。然后分配light_device_t結(jié)構(gòu)體??煽闯鲈趏pen_light函數(shù)中主要完成用light_device_t這個結(jié)構(gòu)體去初始化device 這個二重指針。并向其中傳入了對背光操作的回調(diào)函數(shù),其原型為:static int set_light_backlight(struct light_device_t *dev,struct light_state_t const *state)int err = 0;int brightness = rgb_to_brightness(state);/rgb到亮度轉(zhuǎn)換pthread_mutex_lock(&g_lock);/寫線程加鎖err = write_int(LCD_FILE, brightness);/寫亮度值到驅(qū)動節(jié)點(diǎn)pthread_mutex_unlock(&g_lock);/寫線程解鎖return err;其中LCD_FILE定義:char const *const LCD_FILE = /sys/class/backlight/pwm-backlight/brightness;可以看出,LCD_FILE為linux內(nèi)核空間向用戶空間提供的驅(qū)動節(jié)點(diǎn)。調(diào)用write_int(LCD_FILE, brightness)函數(shù)完成對這個驅(qū)動節(jié)點(diǎn)的寫操作,以達(dá)到調(diào)節(jié)背光的目的.第五章 按鍵驅(qū)動設(shè)計(jì)及實(shí)現(xiàn)第五章 接鍵驅(qū)動設(shè)計(jì)及實(shí)現(xiàn)5.1 接鍵硬件鏈接以及功能要求在本設(shè)計(jì)中,根據(jù)一般用戶需求,在硬件板卡做了如下6個按鍵:1.Power 鍵,實(shí)現(xiàn)長按開機(jī),長按關(guān)機(jī),短按睡眠;2.volume up鍵, 實(shí)現(xiàn)音頻聲音的增大;3.volume down鍵,實(shí)現(xiàn)音頻聲音的減少;4.Home鍵,實(shí)現(xiàn)android下主界面的返回;5.菜單鍵,實(shí)現(xiàn)短按彈出選擇菜單;6.返回鍵,實(shí)現(xiàn)返回到上一個界面;其中每個按鍵鏈接到s5pv210的一個IO上,其對應(yīng)關(guān)系如下:Power 鍵S5PV210_GPH0(1)volume up鍵S5PV210_GPH0(7)volume down鍵S5PV210_GPH3(4)Home鍵S5PV210_GPH3(5)菜單鍵S5PV210_GPH2(0)返回鍵S5PV210_GPH1(1)圖5-1功能按鍵和硬件IO的對應(yīng)關(guān)系5.2內(nèi)核空間按鍵驅(qū)動設(shè)計(jì)和實(shí)現(xiàn)在按鍵驅(qū)動設(shè)計(jì)中,我們把按鍵設(shè)備抽象為一個平臺設(shè)備,相應(yīng)的驅(qū)動程序也作為一個平臺設(shè)備驅(qū)動給出。其模塊初始化代碼如下:static int _init s3c_button_init(void) /注冊按鍵平臺設(shè)備platform_device_register(&s3c_device_button); /注冊按鍵平臺驅(qū)動return platform_driver_register(&s3c_button_device_driver);其中s3c_button_device_driver的定義為:static struct platform_driver s3c_button_device_driver = .probe= s3c_button_probe,.remove= s3c_button_remove,.suspend= s3c_button_suspend,.resume= s3c_button_resume,.driver= .name= s3c-button,.owner= THIS_MODULE,;可以看出,在此結(jié)構(gòu)體中,也給出了這個按鍵平臺驅(qū)動的幾個方法,包括:探測硬件的probe方法,移除驅(qū)動的remove方法, 睡眠掛起的suspend方法和恢復(fù)的resume方法。由于在s3c_button_init函數(shù)中已經(jīng)注冊了相應(yīng)的設(shè)備和設(shè)備驅(qū)動。一旦設(shè)備和驅(qū)動相匹配,就會調(diào)用驅(qū)動程序的probe方法。在probe過程中完成以下步驟:圖5-2 s3c_button_probe實(shí)現(xiàn)流程至此,整個初始化過程完成。由于此驅(qū)動采用了用定時器輪尋按鍵的方式來實(shí)現(xiàn)按鍵的狀態(tài)掃描,所以在掃描定時器超時之后,會回調(diào)我們預(yù)先設(shè)置的回調(diào)函數(shù),其回調(diào)函數(shù)如下:static void s3cbutton_timer_handler(unsigned long data)int flag;/* power */flag = gpio
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 村保潔器具管理制度
- 村基層黨校管理制度
- 村幸福食堂管理制度
- 村級ab角管理制度
- 果園全方位管理制度
- 校園消殺滅管理制度
- 株洲麥當(dāng)勞管理制度
- 橋頭保安亭管理制度
- 水-電計(jì)量管理制度
- 水泥中控室管理制度
- 委托加工稻米協(xié)議書
- 國際壓力性損傷潰瘍預(yù)防和治療臨床指南(2025年版)解讀
- (高清版)DG∕TJ 08-67-2015 園林綠化草坪建植和養(yǎng)護(hù)技術(shù)規(guī)程
- 《足外傷的護(hù)理》課件
- 動物學(xué)海濱實(shí)習(xí)知到智慧樹期末考試答案題庫2025年魯東大學(xué)
- 泵站沉井施工方案
- 職業(yè)技術(shù)學(xué)院2024級藥膳與食療專業(yè)人才培養(yǎng)方案
- 2025-2030中國微球行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 2025至2030年中國礦山設(shè)備配件行業(yè)發(fā)展研究報告
- 2025年湖南省中考數(shù)學(xué)模擬試卷(一)(原卷版+解析版)
- 浙江省寧波市鄞州區(qū)2024年數(shù)學(xué)小升初試卷(含答案)
評論
0/150
提交評論