畢業(yè)設(shè)計(jì)基于μCOSII的鍵盤(pán)驅(qū)動(dòng)的實(shí)現(xiàn)_第1頁(yè)
畢業(yè)設(shè)計(jì)基于μCOSII的鍵盤(pán)驅(qū)動(dòng)的實(shí)現(xiàn)_第2頁(yè)
畢業(yè)設(shè)計(jì)基于μCOSII的鍵盤(pán)驅(qū)動(dòng)的實(shí)現(xiàn)_第3頁(yè)
畢業(yè)設(shè)計(jì)基于μCOSII的鍵盤(pán)驅(qū)動(dòng)的實(shí)現(xiàn)_第4頁(yè)
畢業(yè)設(shè)計(jì)基于μCOSII的鍵盤(pán)驅(qū)動(dòng)的實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩28頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、基于c/os- ii的鍵盤(pán)驅(qū)動(dòng)的實(shí)現(xiàn)第一章 緒論一嵌入式系統(tǒng)簡(jiǎn)介 嵌入式系統(tǒng)著眼于應(yīng)用,己被人們定義為“以應(yīng)用為中心、以計(jì)算機(jī)技術(shù)為基礎(chǔ)、軟件硬件可裁減、適應(yīng)于應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本、體積、功耗嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)”。 嵌入式系統(tǒng)是將先進(jìn)的計(jì)算機(jī)技術(shù)、半導(dǎo)體技術(shù)、電子技術(shù)和各個(gè)行業(yè)的具體應(yīng)用相結(jié)合后的產(chǎn)物,這一點(diǎn)就決定了它必然是一個(gè)技術(shù)密集、資金密集、高度分散、不斷創(chuàng)新的知識(shí)集成系統(tǒng)。嵌入式系統(tǒng)具有一般計(jì)算機(jī)組成的共性,都是由硬件和軟件組成的。嵌入式系統(tǒng)的硬件部分,是以嵌入式處理器為中心,配合存儲(chǔ)器、i/o設(shè)備、通信模塊、擴(kuò)展設(shè)備接口以及電源等必要的輔助接口組成。嵌入式系統(tǒng)軟件部分,

2、一般是按3層劃分的:設(shè)備驅(qū)動(dòng)層、實(shí)時(shí)操作系統(tǒng)層、 應(yīng)用程序?qū)印G度胧较到y(tǒng)的硬件是嵌入式系統(tǒng)的基礎(chǔ),決定了嵌入式系統(tǒng)的運(yùn)算速度和擴(kuò)展功能等,提供了嵌入式軟件運(yùn)行的物理平臺(tái)和通信接口;嵌入式系統(tǒng)的軟件是嵌入式系統(tǒng)的靈魂,包括嵌入式操作系統(tǒng)和嵌入式應(yīng)用軟件,決定了硬件的操作模式,通過(guò)操作系統(tǒng)和應(yīng)用程序發(fā)揮硬件裝置的功能。嵌入式系統(tǒng)是應(yīng)用于特定環(huán)境下,面對(duì)專業(yè)領(lǐng)域、針對(duì)特定用途的系統(tǒng),所以與通用計(jì)算機(jī)系統(tǒng)的多樣化和適用性不同。與通用計(jì)算機(jī)系統(tǒng)相比,它具有以下顯著的特點(diǎn):1) 嵌入式系統(tǒng)通常是面向特定應(yīng)用的,是“專用”的計(jì)算機(jī)系統(tǒng);2) 嵌入式系統(tǒng)一般使用實(shí)時(shí)操作系統(tǒng);3) 嵌入式系統(tǒng)是技術(shù)密集、資金密

3、集、高度分散、不斷創(chuàng)新的知識(shí)集成系統(tǒng);4) 嵌入式系統(tǒng)具有功耗低、體積小、集成度高、成本低的特點(diǎn);5) 嵌入式系統(tǒng)的硬件和軟件通過(guò)量體裁衣、去除冗余,可以用較少的軟硬件資源實(shí)現(xiàn)較高的性能;6) 嵌入式系統(tǒng)與具體的行業(yè)應(yīng)用相結(jié)合;7) 嵌入式系統(tǒng)的軟件一般都固化在非易失性存儲(chǔ)器中,提高了執(zhí)行速度和系統(tǒng)可靠性。二本課題的主要研究工作本課題采用高性能嵌入式處理器s3c2410x和c/os-ii 操作系統(tǒng),開(kāi)發(fā)了一個(gè)輕型嵌入式串行通信系統(tǒng)。具體的工作主要有: 1. 鍵盤(pán)的驅(qū)動(dòng)編程。2. c/os-ii的移植,這是本課題的重點(diǎn)所在。操作系統(tǒng)內(nèi)核移植是在arm公司的ads1.2集成開(kāi)發(fā)環(huán)境下完成的。3.

4、在應(yīng)用層裁剪移植一個(gè)用于監(jiān)視的圖形用戶界面(gui)。 4. 在操作系統(tǒng)的上層編寫(xiě)一個(gè)用于人機(jī)交互的鍵盤(pán)驅(qū)動(dòng)程序、lcd液晶顯示驅(qū)動(dòng)程序和相關(guān)的功能運(yùn)用程序等。 第二章 基于c/os-ii的鍵盤(pán)驅(qū)動(dòng)的總體規(guī)劃與設(shè)計(jì)嵌入式系統(tǒng)設(shè)計(jì)的基本原則是“物盡其用”,與通用計(jì)算機(jī)相比,嵌入式系統(tǒng)的硬件和軟件都必須高效率地設(shè)計(jì),量體裁衣,去除冗余,力爭(zhēng)在同樣的硅片面積上實(shí)現(xiàn)更高的性能,以滿足應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本、體積和功耗的要求。2.1 系統(tǒng)的設(shè)計(jì)要求本設(shè)計(jì)將一個(gè)實(shí)時(shí)操作系統(tǒng)移植到 arm 嵌入式微處理器后,利用操作系統(tǒng)中提供的系統(tǒng)資源調(diào)用把串口及其他外設(shè)當(dāng)成普通文件進(jìn)行操作,讀寫(xiě)方便,從而在進(jìn)行相應(yīng)

5、軟件開(kāi)發(fā)的過(guò)程中,提高系統(tǒng)編程效率,簡(jiǎn)化調(diào)試的復(fù)雜程度,實(shí)現(xiàn)基于arm嵌入式微處理器為核芯的串口通信,除此之外,按照嵌入式系統(tǒng)的軟、硬件結(jié)構(gòu)組成, 將圖形用戶界面gui和實(shí)時(shí)操作系統(tǒng)整合后移植到arm微控制器上。系統(tǒng)實(shí)現(xiàn)的功能如下:(1)激活超級(jí)終端0,敲擊pc機(jī)的鍵盤(pán),將字符通過(guò)pc機(jī)的串口發(fā)送給arm開(kāi)發(fā)板的串口0;通過(guò)arm芯片處理后,在開(kāi)發(fā)板上的lcd上同步顯示。(2)利用開(kāi)發(fā)板上的鍵盤(pán)輸入字符,同樣可在lcd上顯示,并發(fā)送給pc機(jī)。(3)系統(tǒng)還應(yīng)考慮日后的升級(jí)和功能擴(kuò)展,留下可開(kāi)發(fā)的硬件空間。2.2 系統(tǒng)的硬件和軟件選型2.2.1 系統(tǒng)硬件平臺(tái)的選擇嵌入式開(kāi)發(fā)的硬件平臺(tái)的選擇主要是嵌

6、入式處理器的選擇。在一個(gè)系統(tǒng)中使用什么樣的嵌入式處理器內(nèi)核主要取決于應(yīng)用的領(lǐng)域、用戶的需求、成本問(wèn)題、開(kāi)發(fā)的難易程度等因素。目前非常流行的arm核有arm7tdmi,strongarm,arm720t,arm9tdmi,arm922t,arm940t,arm946t,arm966t,arm10tdmi等。自v5版本以后,arm公司提供piccolo dsp的核心給芯片設(shè)計(jì)者,用于設(shè)計(jì)arm dsp的soc(system on chip)結(jié)構(gòu)芯片。此外,arm核還獲得了許多實(shí)時(shí)操作系統(tǒng)(real time operating system)供應(yīng)商的支持,比較知名的實(shí)時(shí)操作系統(tǒng)有:windows

7、ce、linux、psos、vxworks、nucleus、epoc、c/os-ii、beos等。s3c2410a微處理器是一款由韓國(guó)samsung電子公司為手持設(shè)備設(shè)計(jì)的低功耗、高集成度的基于arm920t核的16/32位risc處理器。為了降低整個(gè)系統(tǒng)的成本,s3c2410a還集成了以下部件:16kb指令cache、16kb數(shù)據(jù)cache、具有虛擬存儲(chǔ)器管理單元mmu、外部存儲(chǔ)器控制器、lcd控制器(支持stn和tft)、8通道10位adc、觸摸屏接口、nand flash控制器、3個(gè)uart通道、4個(gè)dma通道、4個(gè)pwm定時(shí)器、1個(gè)內(nèi)部定時(shí)器、i/o端口、rtc、iic-bus控制器、

8、iis-bus控制器、usb主、usb從、sd主卡/mmc卡接口、2通道的spi以及內(nèi)部pll時(shí)鐘倍頻器等。s3c2410a采用0.18um工藝生產(chǎn)制造,核心頻率最高可以達(dá)到203mhz,功能強(qiáng)大而且體積小、功耗低。s3c2410a片上資源豐富,可以簡(jiǎn)化外圍電路設(shè)計(jì),減少了整個(gè)系統(tǒng)的成本,為嵌入式系統(tǒng)提供了一個(gè)高效的硬件平臺(tái)。s3c2410a處理器不僅在手機(jī)、pda等手持設(shè)備方面廣泛應(yīng)用,在通信系統(tǒng)、數(shù)據(jù)終端等方面也得到廣泛應(yīng)用??紤]到本項(xiàng)目的開(kāi)發(fā)要帶操作系統(tǒng)并運(yùn)行cgui,本文選定samsung(三星)公司生產(chǎn)的一款基于arm920t核的高性能低功耗soc芯片s3c2410a作為硬件開(kāi)發(fā)平臺(tái)

9、的主控制器。2.2.2 嵌入式操作系統(tǒng)的選擇嵌入式操作系統(tǒng)eos(embedded operating system)是一種支持嵌入式系統(tǒng)應(yīng)用的操作系統(tǒng)軟件,是嵌入式系統(tǒng)的重要組成部分。嵌入式操作系統(tǒng)負(fù)責(zé)完成嵌入式系統(tǒng)的全部軟、硬件資源的分配、調(diào)度、控制、協(xié)調(diào);它必須體現(xiàn)其所在系統(tǒng)的特征,能夠通過(guò)加載/卸載某些模塊來(lái)達(dá)到系統(tǒng)所要求的功能。嵌入式操作系統(tǒng)具有小巧、可定制性、強(qiáng)穩(wěn)定性、弱交互性、較強(qiáng)的實(shí)時(shí)性、外設(shè)接口統(tǒng)一性等特點(diǎn)。隨著嵌入式系統(tǒng)的快速發(fā)展,嵌入式操作系統(tǒng)已經(jīng)從簡(jiǎn)單走向成熟,比較著名的有windows ce、clinux、c/os-ii、vxworks、palm os和linux等。

10、基于實(shí)時(shí)性、成本以及開(kāi)發(fā)難度方面的考慮 ,系統(tǒng)設(shè)計(jì)時(shí)選擇了c/os-ii開(kāi)放源代碼的嵌入式實(shí)時(shí)操作系統(tǒng)。實(shí)時(shí)操作系統(tǒng)c/os- ii是一個(gè)源碼公開(kāi)、可移植、可固化、可裁剪及占先式的實(shí)時(shí)多任務(wù)操作系統(tǒng) ,它運(yùn)行優(yōu)先級(jí)最高的就緒任務(wù),其絕大部分源碼是用 c 語(yǔ)言編寫(xiě)。c/os - 的正常運(yùn)行需要處理器平臺(tái)滿足以下要求: 處理器的 c編譯器能產(chǎn)生可重入代碼。 用 c語(yǔ)言就可以打開(kāi)和關(guān)閉中斷。 處理器支持中斷,并且能產(chǎn)生定時(shí)中斷 (通常在 10至 100hz之間 )。 處理器支持能夠容納一定量數(shù)據(jù) (可能是幾千字節(jié) )的硬件堆棧。 處理器有將堆棧指針和其它 cpu寄存器讀出和存儲(chǔ)到堆?;騼?nèi)存中的指令。

11、s3c2410處理器采用 arm920t內(nèi)核 ,內(nèi)部共有 37個(gè)寄存器 ,其中 r13通常用作堆棧指針 ,只要系統(tǒng) ram空間允許 ,堆??臻g理論上沒(méi)有限制。arm處理器提供 arm指令和 thumb指令兩種指令集 ,每種指令集都包含有豐富的指令對(duì)堆棧進(jìn)行操作 ,可以隨意的對(duì)處理器中的寄存器進(jìn)行堆棧操作。根據(jù)堆棧生長(zhǎng)方向的不同 ,可以生成 4種不同的堆棧,分別是滿遞增、空遞增、滿遞減 (此移植中使用的是滿遞減方式 )、空遞減。芯片內(nèi)集成 5個(gè)定時(shí)時(shí)鐘 ,任何一個(gè)都可以產(chǎn)生定時(shí)中斷 ,滿足第三條要求。ads集成開(kāi)發(fā)環(huán)境的內(nèi)置編譯器可以產(chǎn)生可重入代碼 ,并且支持內(nèi)嵌匯編 , c環(huán)境中可任意的進(jìn)行開(kāi)

12、關(guān)中斷操作。綜上所述,從理論上講c/os - 完全可以移植到 s3c2410a上運(yùn)行。2.2.3 嵌入式gui的選擇圖形用戶界面gui(graphic user interface)是系統(tǒng)與用戶交流溝通的一個(gè)平臺(tái),為用戶提供了友好的人機(jī)界面和簡(jiǎn)單的圖形化操作,是嵌入式軟件平臺(tái)的重要組成部分。嵌入式gui要求簡(jiǎn)單、直觀、可靠、占用資源少并且反應(yīng)快速,以滿足嵌入式系統(tǒng)中硬件資源有限的要求。獨(dú)立開(kāi)發(fā)嵌入式gui需要大量的人力物力,所以對(duì)于大多數(shù)用戶來(lái)說(shuō)一般采用目前比較成熟的gui系統(tǒng),從而將更多的精力用來(lái)開(kāi)發(fā)自己的應(yīng)用程序。面向比較流行的嵌入式gui系統(tǒng)有:microwindows、minigui、

13、opengui、qt/embedded和cgui等。基于c/os-ii的圖形用戶界面支持系統(tǒng)的選型,我們有多種選擇,對(duì)上述5種嵌入式圖形用戶界面進(jìn)行了綜合比較,cgui在api完整性、函數(shù)庫(kù)大小、可移植性、多進(jìn)程執(zhí)行性、健壯性、執(zhí)行效率等各方面都具有優(yōu)勢(shì),符合本系統(tǒng)對(duì)嵌入式gui的要求,因此選擇cgui作為本系統(tǒng)的嵌入式gui。c/ os- i ic/gui32位微處理器s3c2410aarm920tusb接口電源電路復(fù)位電路時(shí)鐘電路flashsdramjtag接口鍵盤(pán)接口液晶顯示屏圖2-1 系統(tǒng)平臺(tái)設(shè)計(jì)框圖2.3 4x4鍵盤(pán)的簡(jiǎn)介2.5 本章總結(jié)本章給出了嵌入式鍵盤(pán)系統(tǒng)的平臺(tái)選配,包括系統(tǒng)的

14、mcu內(nèi)核、操作系統(tǒng)、gui選擇等,并給出了相關(guān)功能模塊如s3c2410a、c/os-ii實(shí)時(shí)操作系統(tǒng)、cgui等的工作原理及相關(guān)介紹,最后給出了鍵盤(pán)驅(qū)動(dòng)的總體設(shè)計(jì)方案。第三章 基于s3c2410a的嵌入式鍵盤(pán)驅(qū)動(dòng)系統(tǒng)實(shí)現(xiàn)arm嵌入式系統(tǒng)在基于arm cpu為核心的硬件平臺(tái)和以ads或相關(guān)軟件集成開(kāi)發(fā)環(huán)境為軟件平臺(tái),在其基礎(chǔ)上,搭建中間件、驅(qū)動(dòng)程序及嵌入式操作系統(tǒng)平臺(tái),最終在此基礎(chǔ)上完成arm嵌入式系統(tǒng)應(yīng)用的開(kāi)發(fā)。嵌入式系統(tǒng)硬件平臺(tái)結(jié)構(gòu)主要分為2大部分:一部分為系統(tǒng)主板,為基于arm的最小系統(tǒng),包括arm cpu、flash、sdram、鍵盤(pán)等最基本部分;另一部分為系統(tǒng)擴(kuò)展板,提供了用于完成各

15、個(gè)不同硬件的功能模塊。3.1 硬件總體結(jié)構(gòu)設(shè)計(jì)max3232arm9s3c2410a電源部分14針jtag調(diào)試接口32.768khz有源晶振鍵盤(pán)接口hd7279alcd液晶顯示屏5.7寸256色真彩sdramhy57v641620b8mflash romk9f5608u0a32m復(fù)位模塊imp811s文章選擇基于arm920t精簡(jiǎn)指令集的s3c2410a微處理器作為硬件的控制核心,附加外圍的電源、晶振、調(diào)試接口、sdram,flash ,人機(jī)接口等功能模塊構(gòu)成嵌入式鍵盤(pán)驅(qū)動(dòng)的硬件平臺(tái)。硬件的整體結(jié)構(gòu)設(shè)計(jì)如圖3-1所示。圖3-1 基于s3c2410a的硬件整體設(shè)計(jì)各部分功能表述如下:電源電路:電

16、源電路為5v到3.3v和5v到1.8v的dc-dc轉(zhuǎn)換器,給mcu的i/o和arm內(nèi)核供電,向系統(tǒng)提供+5v、+3.3v、+1.8v電壓;時(shí)鐘電路:32.768k有源晶振為系統(tǒng)提供工作時(shí)針,通過(guò)片內(nèi)pll電路倍頻為50mhz作為微處理器的工作時(shí)鐘;復(fù)位電路:復(fù)位電路主要完成上電、掉電復(fù)位和系統(tǒng)在運(yùn)行時(shí)用戶的按鍵復(fù)位功能。本系統(tǒng)所采用專門(mén)的系統(tǒng)監(jiān)視復(fù)位芯片imp811s,可以手動(dòng)控制系統(tǒng)的復(fù)位,還可以實(shí)時(shí)監(jiān)控系統(tǒng)的電源;flash存儲(chǔ)器:是一種可在線擦寫(xiě),掉電后數(shù)據(jù)不丟失的存儲(chǔ)器,具有功耗低、容量大、擦寫(xiě)速度快等優(yōu)點(diǎn)。本系統(tǒng)包含2mb nor flash和32mb nand flash存儲(chǔ)器,內(nèi)

17、部存放系統(tǒng)引導(dǎo)代碼、c/os-ii內(nèi)核、用戶程序等。sdram:sdram(synchronous dynamic random access memory)是同步動(dòng)態(tài)ram,具有容量大、成本低、存儲(chǔ)快等優(yōu)點(diǎn),廣泛應(yīng)用在嵌入式系統(tǒng)中。s3c2410a處理器內(nèi)部沒(méi)有集成的sram,無(wú)法滿足本系統(tǒng)的需要,因此我們擴(kuò)展了兩片sdram芯片hy57v561620,主要用作程序運(yùn)行空間、數(shù)據(jù)和堆棧區(qū)。jtag接口電路:jtag是一種國(guó)際標(biāo)準(zhǔn)測(cè)試協(xié)議,主要用于芯片內(nèi)部測(cè)試以及對(duì)系統(tǒng)仿真和調(diào)試。本系統(tǒng)采用14腳jtag仿真調(diào)試接口電路,芯片內(nèi)部有jtag核,可以通過(guò)外部仿真器與開(kāi)發(fā)系統(tǒng)連接調(diào)試;鍵盤(pán):本系統(tǒng)

18、采用hd7279芯片,該芯片支持iic總線協(xié)議,可以擴(kuò)展64位鍵盤(pán),驅(qū)動(dòng)8個(gè)led數(shù)碼管;lcd接口:支持多種尺寸的stn、tft lcd。3.2 電源電路設(shè)計(jì)由于s3c2410a的內(nèi)核電壓為1.8v/2.0v,i/o模塊和存儲(chǔ)器供電為3.3v,而電路板、lcd屏及usb接口等提供供電電壓外部設(shè)備通常為5v,因此系統(tǒng)需要1.8/2.0v ,3.3v及5v共三種電壓。圖32 系統(tǒng)的5v電源圖3-3 s3c2410a 的電源電路本課題設(shè)計(jì)中的電源系統(tǒng)包括交流電源和直流電源。首先選用或自制由交流到直流(ac-dc)的直流穩(wěn)壓電源輸出5v電壓,電流大小根據(jù)外部設(shè)備及接口情況,選擇1a、1.5a或更大的

19、電流輸出。目前在s3c2410a中使用廣泛的dc-dc模塊是alpha公司的as1117au系列,尾標(biāo)1.8、3.3分別代表輸出電壓值為1.8v和3.3v。本課題的電源電路設(shè)計(jì)如下圖3-2與圖3-3所示。3.3 時(shí)鐘電路設(shè)計(jì)s3c2410a的主時(shí)鐘源來(lái)自外部晶振或外部時(shí)鐘。時(shí)鐘發(fā)生器有一個(gè)振蕩放大器,其外部需要接一個(gè)石英振蕩器。同時(shí)它還有一個(gè)鎖相環(huán)(pll),其輸入信號(hào)是低頻振蕩器的輸出,輸出信號(hào)是s3c2410a的需的高頻時(shí)鐘(倍頻作用)。s3c2410a的時(shí)鐘電路的設(shè)計(jì)見(jiàn)圖3-4。圖3-4 s3c2410a 時(shí)鐘電路 3.4 復(fù)位電路設(shè)計(jì)微控制器在上電時(shí)狀態(tài)并不確定,將造成微控制器不能正常

20、工作。為解決這個(gè)問(wèn)題,所有微控制器均有一個(gè)復(fù)位邏輯,它負(fù)責(zé)將微控制器初始化為某個(gè)確定的狀態(tài)。多數(shù)嵌入式系統(tǒng)一般采用專用復(fù)位電路ic芯片,如imp811等。s3c2410a的復(fù)位電路設(shè)計(jì)見(jiàn)下圖3-5。圖3-5 s3c2410a 復(fù)位電路3.5 存儲(chǔ)器接口電路設(shè)計(jì)s3c2410a內(nèi)部沒(méi)有存儲(chǔ)器,因此必須采用總線方式擴(kuò)展外部存儲(chǔ)器,包程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器。3.5.1 數(shù)據(jù)存儲(chǔ)器sdram的接口設(shè)計(jì)在本設(shè)計(jì)中數(shù)據(jù)存儲(chǔ)器選用了典型的sdram(synchronous dram)存儲(chǔ)器芯片hy57v641620b 兩片,如下圖3-6所示,它是1m4 banks 16 bit 的sdram芯片,帶自刷新電

21、路、16條數(shù)據(jù)線,11條地址線,由于是 sdram,因此容量為8m。通過(guò)s3c2410a的nsclk0 和nsclk1對(duì)兩片hy57v641620b進(jìn)行選擇存儲(chǔ),可實(shí)現(xiàn)32位的數(shù)據(jù)存儲(chǔ)功能。圖3-6 sdram存儲(chǔ)器電路3.5.2 程序存儲(chǔ)器nand flash的接口設(shè)計(jì)通常使用的flash有nor flash和nand flash兩種,由于nor flash讀取速度快,多用于存儲(chǔ)操作系統(tǒng)等重要信息;大容量的信息通常存儲(chǔ)在nand flash中,可在線擦除。本設(shè)計(jì)中選用的程序存儲(chǔ)器是samsung公司的32m x 8 bit nand flash memory k9f5608u0a。電路設(shè)計(jì)見(jiàn)

22、下圖3-7。圖3-7 nand flash存儲(chǔ)器電路3.6 鍵盤(pán)及l(fā)ed顯示器接口設(shè)計(jì)設(shè)計(jì)過(guò)程中,鍵盤(pán)采用的控制芯片是hd7279a。hd7279是一片具有串行接口的可同時(shí)驅(qū)動(dòng)8位共陰式數(shù)碼管或獨(dú)立的led的智能顯示驅(qū)動(dòng)芯片。該芯片同時(shí)還可連接多達(dá)64鍵的鍵盤(pán)矩陣,單片即可完成顯示鍵盤(pán)接口的全部功能。內(nèi)部含有譯碼器可直接接受bcd碼或16進(jìn)制碼并同時(shí)具有兩種譯碼方式。電路設(shè)計(jì)如圖3-8所示。圖3-8 鍵盤(pán)及l(fā)ed顯示器接口3.7 lcd控制器接口設(shè)計(jì)s3c2410a 與lcd液晶顯示屏的連接很簡(jiǎn)單,直接將相關(guān)引腳相連即可,無(wú)需其他硬件。本系統(tǒng)中選用的lcd為5.7寸,256色,640480像素

23、的tft(thin film transistor, 薄膜場(chǎng)效應(yīng)晶體管)彩色顯示屏。電路設(shè)計(jì)如圖3-9。圖3-9 s3c2410a 與lcd控制器接口tft液晶顯示屏的連接3.8.3 jtag接口電路設(shè)計(jì)為便于系統(tǒng)設(shè)計(jì)開(kāi)發(fā)與系統(tǒng)擴(kuò)展,設(shè)計(jì)了一個(gè)jtag接口電路,方便程序的下載與聯(lián)機(jī)在線調(diào)試。其設(shè)計(jì)電路如圖3-12所示。s3c2410a采用arm公司提供的標(biāo)準(zhǔn)20腳jtag仿真調(diào)試接口電路,芯片內(nèi)部有jtag core,因此,可通過(guò)外部的jtag調(diào)試電纜或仿真器和開(kāi)發(fā)系統(tǒng)連接調(diào)試。圖3-12 jtag接口電路第四章 系統(tǒng)軟件設(shè)計(jì)嵌入式系統(tǒng)軟件部分,一般是按3層劃分的:設(shè)備驅(qū)動(dòng)層、實(shí)時(shí)操作系統(tǒng)層、

24、 應(yīng)用程序?qū)印G度胧较到y(tǒng)的硬件是嵌入式系統(tǒng)的基礎(chǔ),決定了嵌入式系統(tǒng)的運(yùn)算速度和擴(kuò)展功能等,提供了嵌入式軟件運(yùn)行的物理平臺(tái)和通信接口;嵌入式系統(tǒng)的軟件是嵌入式系統(tǒng)的靈魂,包括嵌入式操作系統(tǒng)和嵌入式應(yīng)用軟件,決定了硬件的操作模式,通過(guò)操作系統(tǒng)和應(yīng)用程序發(fā)揮硬件裝置的功能。其中,嵌入式操作系統(tǒng)是用來(lái)支持嵌入式應(yīng)用的系統(tǒng)軟件,通常包括與硬件相關(guān)的底層軟件、系統(tǒng)內(nèi)核、圖形用戶界面(gui)、設(shè)備驅(qū)動(dòng)接口等。4.1 實(shí)時(shí)操作系統(tǒng)c/os-ii在s3c2410a 上的移植c/os-ii在s3c2410a上的移植主要包括兩個(gè)部分的代碼配置或者編寫(xiě): 第一部分與應(yīng)用相關(guān)的配置, 體現(xiàn)在對(duì)os_ cfg.h 和

25、includes.h 配置上;第二部分與特定處理器(這里指s3c2410a)相關(guān)的代碼編寫(xiě), 體現(xiàn)在os_ cpu.h,oscu p_ a.asm ,os_cpu _ c.c 編寫(xiě)上。這兩部分代碼的正確的配置與編寫(xiě), 只能確保基于s3c2410a 的c/os-ii微內(nèi)核代碼形成, 并不能立即燒入目標(biāo)板運(yùn)行, 要在目標(biāo)板上運(yùn)行, 必須還要編寫(xiě)目標(biāo)板初始化引導(dǎo)程序, 初始化引導(dǎo)程序主要實(shí)現(xiàn)硬件初始化、內(nèi)存映射(s3c2410a 不支持二次映射)、中斷向量初始化、系統(tǒng)堆??臻g的分配、等功能, 以引導(dǎo)c/os- ii的正確運(yùn)行。移植過(guò)程中選用的開(kāi)發(fā)工具為 arm 公司提供的 ads1.2 集成開(kāi)發(fā)環(huán)境

26、。移植工作主要集中在與處理器相關(guān)的3個(gè)文件 :os_ cpu.h,os_cpu_c.c,os_cpu_a.s。其中os_ cpu. h文件主要包含與編譯器相關(guān)的數(shù)據(jù)類型定義、堆棧類型定義、兩個(gè)宏定義和幾個(gè)函數(shù)說(shuō)明os_ cpu_ c.c 包含與移植有關(guān) 6 個(gè) c 函數(shù),為 os2taskstkinit(),ostaskcreatehook(),ostaskdelhook(),ostaskswhook(),ostaskstathook(),ostimetickhook()。除第一個(gè)任務(wù)堆棧初始化函數(shù)外的5個(gè)函數(shù)為鉤子函數(shù),需要聲明,沒(méi)有實(shí)際內(nèi)容,由系統(tǒng)函數(shù)調(diào)用,以便用戶能在操作系統(tǒng)中加入自己需

27、要的功能。os_ cpu_ a.s中包含與移植有關(guān)的4個(gè)匯編語(yǔ)言函數(shù),為 osstarthighrdy(),osctxsw(),osintc2txsw(),ostickisr()。c/os-ii在s3c2410a上的移植流程圖如圖4-1所示。建立c/ os- i i交叉編譯環(huán)境裁剪、配置和編譯c/ os- i i內(nèi)核內(nèi)核映像燒寫(xiě)到flash中執(zhí)行內(nèi)核解壓、啟動(dòng)內(nèi)核armc/ os- i i被引導(dǎo),進(jìn)入正常狀態(tài)圖4-1 c/os-ii移植流程4. 1. 1 os_cpu.h文件移植c/ os- ii不使用c語(yǔ)言中short ,int和long等數(shù)據(jù)類型定義,因?yàn)樗鼈兣c處理器類型相關(guān),隱含不可移植

28、性,因此必須對(duì)其進(jìn)行移植。h 文件中主要包含與編譯器相關(guān)數(shù)據(jù)類型定義、堆棧類型定義、兩個(gè)宏定義和幾個(gè)函數(shù)說(shuō)明。數(shù)據(jù)類型定義部分代碼如下:typedef unsigned char boolean; / *布爾變量 */typedef unsigned char int8u; / * 無(wú)符號(hào)8 位整型變量 */typedef signed char int8s; / * 有符號(hào)8 位整型變量 */typedef unsigned short int16u; /* 無(wú)符號(hào)16 位整型變量 */typedef signed short int16s; / * 有符號(hào)16 位整型變量 */typede

29、f unsigned int int32u; / * 無(wú)符號(hào) 32 位整型變量 */typedef signed int int32s; / * 有符號(hào)32 位整型變量 */typedef float fp32; / * 單精度浮點(diǎn)數(shù)(32 位長(zhǎng)度) */typedef double fp64; / * 雙精度浮點(diǎn)數(shù)(64 位長(zhǎng)度 */typedef int32u os stk; / * 堆棧是32 位寬度 */另外,帶t 變量的arm7 處理器內(nèi)核有兩個(gè)指令集,用戶任務(wù)可使用兩種處理器模式即用戶模式和系統(tǒng)模式,本移植使用軟中斷指令swi 作為底層接口,使用不同功能號(hào)區(qū)分不同函數(shù)。在 ads

30、中,用關(guān)鍵字_ _swi聲明一個(gè)不存在的函數(shù),則調(diào)用該函數(shù)就在調(diào)用的地方插入一條 swi 指令并可指定功能號(hào)。swi函數(shù)部分代碼如下:_ _ swi 0x00 void os- task- sw void ; / *任務(wù)級(jí)任務(wù)切換函數(shù) */_ _swi(0x01) void- osstarthighrdy(void) ; / *運(yùn)行優(yōu)先級(jí)最高的任務(wù) */_ _swi(0x02) void os- enter- critical(void) ; /* 關(guān)中斷 */ _ _swi(0x03) void os- exit- critical(void) ; /* 開(kāi)中斷 */_ _swi(0x42)

31、 void osisrbegin(void) ; /* 中斷開(kāi)始處理 */_ _swi 0x43 int osisrneedswap void ; / * 判斷中斷是否需要切換 */_ _swi(0x80) void changetosysmode(void) ; / *任務(wù)切換到系統(tǒng)模式 */_ _swi(0x81) void changetousrmode(void) ; /* 任務(wù)切換到用戶模式 */由于 adsv1.2 的 c語(yǔ)言編譯器只支持滿遞減堆棧,所以只能定義堆棧增長(zhǎng)方向從上向下,即 #define os_stk_ growth 1;4. 1. 2 os_cpu_ c.c文件移植

32、每個(gè)任務(wù)要有自己的堆??臻g,以便進(jìn)行任務(wù)切換時(shí)能將當(dāng)時(shí)處理器現(xiàn)場(chǎng)保存到任務(wù)堆??臻g中,在下次執(zhí)行時(shí)再恢復(fù)出來(lái)。因此必先確定任務(wù)堆棧結(jié)構(gòu),而任務(wù)堆棧結(jié)構(gòu)與 cpu 體系結(jié)構(gòu)、編譯器密切關(guān)聯(lián)。在arm體系下,處理器現(xiàn)場(chǎng)通常指pc,lr,r0- r12 ,cpsr,spsr。本移植堆棧結(jié)構(gòu)如圖4-2 所示。任務(wù)堆棧由高到低依次將保存 pc,lr,r12 ,r11 ,r10r1 ,r0 ,cpsr等。每個(gè)任務(wù)有獨(dú)立的osentersum,在任務(wù)切換時(shí)保存和恢復(fù)各自osentersum 值。各個(gè)任務(wù)開(kāi)關(guān)中斷的狀態(tài)可不同,這樣實(shí)現(xiàn)了開(kāi)關(guān)中斷的嵌套。圖4-2 任務(wù)堆棧結(jié)構(gòu)圖堆棧任務(wù)初始化代碼即函數(shù)ostas

33、kstkinit() ,該函數(shù)用于系統(tǒng)創(chuàng)建用戶任務(wù)時(shí),建立并初始化任務(wù)堆棧,其跟處理器硬件體系密切相關(guān),它將所有的寄存器壓棧,返回新的堆棧棧頂,并將它們保存在該任務(wù)的任務(wù)控制塊os_tcb 中,最終使初始化后的堆棧跟剛發(fā)生過(guò)一次中斷一樣。這樣,系統(tǒng)無(wú)需對(duì)調(diào)度程序作特殊處理即可直接對(duì)新任務(wù)進(jìn)行調(diào)度。由于在s3c2410a中堆棧是按32 位數(shù)據(jù)類型來(lái)進(jìn)行操作,所以堆棧數(shù)據(jù)類型 os_stk 聲明為 32 位無(wú)符號(hào)整 數(shù)。os2taskstkinit()函數(shù)關(guān)鍵代碼如下:* stk = (os- stk) task; /* pc */* _ _ stk = (os- stk) task; /* lr

34、 */*_ _ stk = 0; /* r12. . .r1 同理 */*_ _ stk = (unsigned int) pdata; /* r0 ,第一個(gè)參數(shù)使用r0 傳遞 */*_ _ stk = (user- using- mode| 0x00) ; /* spsr ,允許 irq,fiq 中斷 */另外還 有 幾 個(gè) 系 統(tǒng) 規(guī) 定 的 hook 函 數(shù): os2taskgreatehook(),ostaskdelhook(),ostaskswhook(),ostaskstathook(),ostimetickhook()。本移植將它們都設(shè)置為空函數(shù)。413 os_cpu_ a.s

35、文件移植此文件包括四個(gè)函數(shù)都涉及對(duì)寄存器的處理,跟處理器有關(guān),由于不同處理器有不同寄存器,所以操作系統(tǒng)在這個(gè)文件里給用戶留下四個(gè)函數(shù)接口,以便用戶根據(jù)所選處理器編寫(xiě)相應(yīng)的匯編程序以完成固定功能。分別為:多任務(wù)啟動(dòng)函數(shù)中調(diào)用的 osstarthightrdy(),任務(wù)切換函數(shù)osctxsw(),中斷任務(wù)切換函數(shù)osintctxsw()和時(shí)鐘節(jié)拍服務(wù)函數(shù)ostickisr()。多任務(wù)啟動(dòng)函數(shù)中調(diào)用 osstarthightrdy() 函數(shù),c/os- ii 啟動(dòng)多任務(wù)環(huán)境的函數(shù)是 osstart(),用戶在調(diào)用該函數(shù)之前,必須建立一個(gè)或更多任務(wù)osstart() 最終調(diào)用函數(shù) osstarthig

36、hrdy() 運(yùn)行優(yōu)先級(jí)最高的任務(wù)。osctxsw() 函數(shù)是由任務(wù)級(jí)任務(wù)切換函數(shù) os_task_sw()調(diào)用,實(shí)現(xiàn)從低優(yōu)先級(jí)向高優(yōu)先級(jí)切換。文中任務(wù)級(jí)切換是通過(guò) swi 軟中斷來(lái)實(shí)現(xiàn)。該中斷完成:(1)保存任務(wù)的環(huán)境變量;(2)將當(dāng)前任務(wù)的堆棧指針sp存入任務(wù)控制塊os_tcb 中;(3)載入就緒最高優(yōu)先級(jí)任務(wù)的堆棧指針sp;(4)恢復(fù)就緒最高優(yōu)先級(jí)任務(wù)的環(huán)境變量;(5)中斷返回。軟中斷的異常處理程序掛接到cpu內(nèi)核,通過(guò)修改啟動(dòng)代碼里的異常向量表實(shí)現(xiàn)。中斷服務(wù)程序與cpu 芯片相關(guān),中斷源的掛接通過(guò)增加匯編接口的支持來(lái)實(shí)現(xiàn),即在文件 irq.s的適當(dāng)位置添加如下的程序代碼:z_handl

37、er handler z_exception ;其中 z替換為所需要的字符串,舉例代碼如下: irq_handler handler irq _ exception ;irq中斷sdosintctxsw()是中斷級(jí)任務(wù)切換函數(shù),在中斷退出時(shí)由函數(shù)osintexit()調(diào)用。在中斷服務(wù)程序中,當(dāng)發(fā)現(xiàn)有高優(yōu)先級(jí)任務(wù)等待時(shí)鐘信號(hào)到來(lái)時(shí),在中斷退出后并不返回被中斷任務(wù), 而是直接調(diào)度就緒的最高優(yōu)先級(jí)任務(wù)執(zhí)行,從而盡快響應(yīng)高優(yōu)先級(jí)任務(wù),保證系統(tǒng)實(shí)時(shí)性。osintctxsw()函數(shù)基本原理與任務(wù)級(jí)切換相同,只是由于進(jìn)入中斷時(shí)已保存了被中斷任務(wù)的環(huán)境變量,就不進(jìn)行類似操作,只需要對(duì)堆棧指針進(jìn)行調(diào)整。中斷任務(wù)

38、切換函數(shù) osintctxsw() 部分代碼如下:ldr r1 , =ostcbcur ;保存當(dāng)前任務(wù)堆棧指針到當(dāng)前任務(wù)的tcbldrr1 , r1 strsp, r1mov sp, r4 ;設(shè)置堆棧指針ldrr3 , =osentersum ;恢復(fù)新任務(wù)的osentersummsrsps- cxsf , r5 ;恢復(fù)cpsrldmfd sp!, r0 - r12 , lr, pc ;運(yùn)行新任務(wù)系統(tǒng)時(shí)鐘節(jié)拍中斷函數(shù)ostickisr()是一個(gè)周期性中斷,為內(nèi)核提供時(shí)鐘節(jié)拍。其周期決定了內(nèi)核所能給應(yīng)用系統(tǒng)提供的最小時(shí)間間隔服務(wù)。本移植中,irq 是受c/ os- ii管理的中斷,對(duì) fiq 不處

39、理。時(shí)鐘節(jié)拍的移植可通過(guò)匯編宏完成。以上完成了c/ os - ii 在 s3c2410a 上的移植工作。為了測(cè)試移植代碼的運(yùn)行情況,建立兩個(gè)c/ os- ii的任務(wù),一個(gè)任務(wù)用于檢測(cè)按鍵輸入(本測(cè)試中為p0.14 口輸入) ,稱之為按鍵檢測(cè)任務(wù);另一個(gè)任務(wù)用于控制蜂鳴器,稱之為蜂鳴器控制任務(wù)。蜂鳴器控制任務(wù)平時(shí)處于等待狀態(tài),當(dāng)按鍵檢測(cè)任務(wù)檢測(cè)到有效按鍵輸入時(shí),立即喚醒蜂鳴器控制任務(wù)。s3c2410a 利用外擴(kuò)的 16mb 的 flash 存儲(chǔ)數(shù)據(jù)及程序,利用adsv1.2 及 axd 進(jìn)行jtag仿真調(diào)試,測(cè)試結(jié)果正確,脫機(jī)運(yùn)行穩(wěn)定,因此本移植成功。用戶程序有鍵按下時(shí)請(qǐng)求中斷軟件延時(shí)去抖有鍵按

40、下確定按鍵位置獲得鍵值鍵釋放了中斷返回圖4-3 鍵盤(pán)中斷處理yesno4.2 鍵盤(pán)模塊鍵盤(pán)的掃描方式有編程掃描方式、定時(shí)掃描方式和中斷掃描方式三種。無(wú)論是編程掃描還是定時(shí)掃描,cpu 經(jīng)常處于空掃描狀態(tài),為了提高cpu 利用效率,本設(shè)計(jì)中采用了中斷掃描工作方式。設(shè)計(jì)過(guò)程中,鍵盤(pán)采用的控制芯片是hd7279a。hd7279是一片具有串行接口的可同時(shí)驅(qū)動(dòng)8位共陰式數(shù)碼管或獨(dú)立的led的智能顯示驅(qū)動(dòng)芯片。該芯片同時(shí)還可連接多達(dá)64鍵的鍵盤(pán)矩陣,單片即可完成顯示鍵盤(pán)接口的全部功能。內(nèi)部含有譯碼器可直接接受bcd碼或16進(jìn)制碼并同時(shí)具有兩種譯碼方式。在行列式鍵盤(pán)方式中,arm對(duì)鍵盤(pán)的掃描采取程序控制方式

41、,一旦進(jìn)入鍵掃描狀態(tài),則反復(fù)地掃描鍵盤(pán),等待用戶從按鍵上輸入命令或數(shù)據(jù)。而在執(zhí)行鍵入命令或處理鍵入數(shù)據(jù)過(guò)程中,arm將不再響應(yīng)鍵入要求,直到arm返回重新掃描鍵盤(pán)為止。編程掃描程序流程圖如圖4-3所示。鍵盤(pán)驅(qū)動(dòng)文件key_driver主要包括arm7279.c和keydriver.h兩個(gè)文件,其中在keydriver.h中定義送給hd7279指令參量,主要有: #define cmd_reset 0xa4#define cmd_test 0xbf#define cmd_read 0x15#define decode1 0xc8在arm7279.c中主要實(shí)現(xiàn)了:(1)寫(xiě)鍵盤(pán)指令程序 write7

42、279(unsigned char,unsigned char);(2)讀鍵盤(pán)指令程序unsigned char read7279 (unsigned char);(3)向7279發(fā)送一個(gè)字節(jié)的程序 send_byte (unsigned char);(4)向7279接收一個(gè)字節(jié)的程序 unsigned char receive_byte (void);(5)鍵盤(pán)中斷的初始化 keyint_init (void); (6)鍵盤(pán)中斷的服務(wù)子程序 key_isr(void);等一系列鍵盤(pán)處理程序。在arm7279.c中,主要實(shí)現(xiàn)鍵盤(pán)的錄入功能。當(dāng)程序運(yùn)行時(shí),按下鍵盤(pán),平時(shí)為高電平的hd7279a的

43、#key就會(huì)產(chǎn)生一個(gè)低電平,送給s3c2410a的外部中斷5請(qǐng)求腳,在cpu中斷請(qǐng)求位打開(kāi)的狀態(tài)下,cpu會(huì)立即響應(yīng)外部中斷5的請(qǐng)求,pc指針就跳入中斷異常向量地址處,進(jìn)而跳入中斷服務(wù)子程序。當(dāng)判斷是外部中斷5的中斷請(qǐng)求時(shí),則程序繼續(xù)執(zhí)行,cpu這時(shí),通過(guò)發(fā)送#cs片選信號(hào)選中hd7279a,再發(fā)送時(shí)鐘clk信號(hào)和通過(guò)data線發(fā)送控制指令信號(hào)給hd7279a,hd7279a得到cpu發(fā)送的命令后,識(shí)別出該命令,然后掃描鍵盤(pán),把得到的鍵值回送給cpu。鍵盤(pán)中斷處理程序的主要代碼如下:void key_isr( void ) int j;rintmsk |= bit_eint4_7; /* 關(guān)中

44、斷 */reintmask |= 0x20;if (reintpend & 0x20) for(j=0;j20;j+); /* 延時(shí) */ key_number = read7279(cmd_read); rintmsk &= (bit_eint4_7); reintmask &= 0xffffdf; /* 外部中斷5使能 */ write7279(decode1+5,key_number/16*8); write7279(decode1+4,key_number & 0x0f); osmboxpost(key_mbox,&key_number);rsrcpnd |= bit_eint4_7;

45、 rintpnd |= bit_eint4_7; reintpend |= 0x20; 鍵盤(pán)的驅(qū)動(dòng)程序編寫(xiě)好后,測(cè)試無(wú)誤后加載到c/ osii內(nèi)核中。首先把編寫(xiě)好的key_driver文件夾內(nèi)的驅(qū)動(dòng)程序加入已經(jīng)移植好c/ os-ii操作系統(tǒng)的項(xiàng)目中,并且在hd7279.c 中加入:#include .ucosiiincincludes.h;它的目的是可以在該文件中使用c/ osii源程序中的一些函數(shù)。并添加:extern os_event *key_mbox;這是聲明一個(gè)已經(jīng)定義的郵箱,將來(lái)得到的鍵值就放在這個(gè)郵箱里。在鍵盤(pán)中斷服務(wù)子程序key_isr()中添加:osmboxpost(key_

46、mbox,&key_number); 這是把得到的鍵值放到郵箱里,這是c/ osii提供的函數(shù);其次,在gui_init()函數(shù)中,添加: key_init(); /*信號(hào)量的初始化函數(shù) */信號(hào)量的初始化函數(shù),進(jìn)行鍵盤(pán)初始化。最后,在glib.h 中添加鍵值的宏定義,以及一些應(yīng)用任務(wù)調(diào)用的鍵盤(pán)函數(shù)的聲明。這樣,鍵盤(pán)驅(qū)動(dòng)就加載到了c/ osii操作系統(tǒng)上了。4.3 tft lcd 驅(qū)動(dòng)模塊s3c2410a 中具有內(nèi)置的lcd 控制器,它能將顯示緩存(在sdram存儲(chǔ)器中)中的lcd圖像數(shù)據(jù)傳輸?shù)酵獠康膌cd驅(qū)動(dòng)電路上的邏輯功能。它支持單色、4級(jí)、16級(jí)灰度lcd顯示,以及256彩色lcd顯示。

47、在顯示灰度時(shí),它采用時(shí)間抖動(dòng)算法(time-based dithering algorithm)和幀率控制 (frame rate control)方法,在顯示彩色時(shí),它采用rgb的格式,即red、green、blue,三色混合調(diào)色。通過(guò)軟件編程,可以實(shí)現(xiàn)233或332的rgb調(diào)色的格式。對(duì)于不同尺寸的lcd顯示器,它們會(huì)有不同的垂直和水平象素點(diǎn)、不同的數(shù)據(jù)寬度、不同的接口時(shí)間及刷新率,通過(guò)對(duì)lcd 控制器中的相應(yīng)寄存器寫(xiě)入不同的值,來(lái)配置不同的lcd 顯示板。設(shè)計(jì)開(kāi)發(fā)中,選用了5.7寸256色640480像素真彩屏。lcd驅(qū)動(dòng)文件lcddrv主要包括src和inc兩個(gè)文件,其中在src中包括

48、lcd端口初始化函數(shù)lcd.c 和lcd底層驅(qū)動(dòng)函數(shù)lcdlib.c;為編譯不出誤inc中包括lcd.h 和lcdlib.h兩個(gè)頭文件。lcd底層驅(qū)動(dòng)文件lcd.c中的lcd_port_init( )函數(shù)負(fù)責(zé)對(duì)s3c2410a的功能復(fù)用端口進(jìn)行配制實(shí)現(xiàn)lcd的端口初始化工作,主要源碼如下: rgpcup=0xffffffff; /* 不使用內(nèi)部上拉電阻 */ rgpccon=0xaaaaaaaa;/* 初始化rc口,實(shí)現(xiàn)lcd功能 */ rgpdup=0xffffffff; /* 不使用內(nèi)部上拉電阻 */ rgpdcon=0xaaaaaaaa; /* 初始化引腳 vd23:8,實(shí)現(xiàn)lcd功能*

49、/lcd底層驅(qū)動(dòng)文件lcdlib.c中的long lcd_init(int type)程序負(fù)責(zé)對(duì)s3c2410a進(jìn)行l(wèi)cd初始化工作,主要源碼如下: rlcdcon1=(clkval_tft_6404808)|(mval_used7)|(35)|(121)|0;rlcdcon2=(vbpd_64048024)|(lineval_tft_64048014)|(vfpd_6404806)|(vspw_640480);rlcdcon3=(hbpd_64048019)|(hozval_tft_6404808)|(hfpd_640480);rlcdcon4=(mval8)|(hspw_640480);r

50、lcdcon5=(111)|(19)|(122)1);rlcdsaddr2=m5d( (u8)lcdframebuffer+(640*480*2)1 );rlcdsaddr3= 0x0;rlcdintmsk|=(3); /* 屏蔽lcd中斷 */rlpcsel&=(7); /* 不用lpc3600 */rtpal=0; /* 不使用tft臨時(shí)調(diào)色盤(pán) */運(yùn)用lcdlib.c中的lcd_cstnonoff(int onoff)函數(shù)和lcd_envidonoff(int onoff)函數(shù)完成lcd的開(kāi)關(guān)狀態(tài)檢測(cè);函數(shù)lcd_powerenable(int invpwren,int pwren)實(shí)現(xiàn)

51、工作態(tài)與低功耗態(tài)的切換。把lcd 驅(qū)動(dòng)程序加載的過(guò)程中,首先在applicationinc 目錄下的config.h 文件中加入:#include .lcddrvinclcd.h;#include .lcddrvinclcdlib.h;這樣,編譯就能通過(guò),就把lcd 的驅(qū)動(dòng)程序加載到系統(tǒng)上了。4.4 cgui模塊設(shè)計(jì)c/ osii和cgui在s3c2410a上的整合移植主體上遵循以下流程, 首先是針對(duì)使用的液晶屏的s3c2410a內(nèi)部的液晶屏控制器的初始化, 構(gòu)造cgui的運(yùn)行環(huán)境, 在此基礎(chǔ)上修改和配置cgui的一些文件和函數(shù)使得cgui在目標(biāo)板上能正確運(yùn)行。cgui文件gui主要包括ini

52、t、glib、和font等三個(gè)文件,font中存放的是字體文件,glib 中存放繪圖的中層和上層的函數(shù),上層函數(shù)是直接供用戶調(diào)用的api,init 中存放gui 初始化的函數(shù)。 圖4-4 gui程序結(jié)構(gòu)圖4-4 為打開(kāi)該文件夾后,項(xiàng)目在ads1.2 環(huán)境下呈現(xiàn)出的目錄及源文件結(jié)構(gòu)組成框架。 4.4.1 s3c2410 內(nèi)部液晶屏控制器初始化移植gui 的前提條件是液晶屏能夠被正常驅(qū)動(dòng),為此需要實(shí)現(xiàn)液晶屏控制器的初始化, 設(shè)計(jì)中采用的是液晶屏為分辨率 640480 的真彩 tft 屏,s3c2410 內(nèi)部有專門(mén)針對(duì)tft 類型液晶屏的控制器,該控制器支持1、4、8 調(diào)色板顯示模式和16、24 真

53、彩顯示模式的驅(qū)動(dòng), 考慮后面的移植過(guò)程, 這里采用16 位真彩模式驅(qū)動(dòng)。開(kāi)發(fā)采用的目標(biāo)板是采用完全總線結(jié)構(gòu)與液晶屏互聯(lián)的, 在完全地址總線配置中,cpu 可以直接像訪問(wèn)外部?jī)?nèi)存一樣訪問(wèn)圖像存儲(chǔ)區(qū)域,符合具有高分辨率的顯示屏的大量數(shù)據(jù)的頻繁的讀寫(xiě)要求。這里的圖像存儲(chǔ)區(qū)域是內(nèi)存當(dāng)中指定的,該存儲(chǔ)區(qū)域的大小與圖像分辨率,與每個(gè)圖像占用的字節(jié)空間相關(guān)??烧{(diào)用cgui中的glib.c中的設(shè)定顏色的上層函數(shù)set_color(u32 color),填充矩形函數(shù)fill_rect(0,0,639,479)、畫(huà)水平線函數(shù)draw_hline(u16 y0, u16 x0, u16 x1) 和畫(huà)豎直線函數(shù) draw_vline(u16 x0, u16 y0, u16 y1)等函數(shù)在正確的位置顯示出正確的結(jié)果, 說(shuō)明液晶屏初始化工作完成。這4個(gè)函數(shù)本質(zhì)上就是往已經(jīng)在內(nèi)存開(kāi)辟的圖像存儲(chǔ)區(qū)里寫(xiě)圖像中每個(gè)象素點(diǎn)rgb 值。如圖4-5 是在液晶屏控制器初始化后使用draw_vline(u16 x0, u16 y0, u16 y1)函數(shù)在液晶屏上用繪制的四條直線,屏幕顯示尺寸為640480p, 顯示結(jié)果表明初始化工作已經(jīng)完成。4.4.2 cgui與c/os- ii 整合把gui程序加入的過(guò)程,也就是把整個(gè)cgui加入該

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論