音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

一種基于ARM的LPC3250串口驅(qū)動程序開發(fā)

出處:互聯(lián)網(wǎng) 發(fā)布于:2011-09-05 11:06:31

  Windows CE是一個開放的、可升級、可裁減的32位實時嵌入式操作系統(tǒng),具有可靠性好、實時性高、內(nèi)核體積小的特點,廣泛應(yīng)用于工業(yè)控制、信息家電、移動通信、汽車電子、個人電子消費品等領(lǐng)域。版本W(wǎng)indows Em-bedded CE 6.0于2006年11月發(fā)布,其特點有:進(jìn)程數(shù)量到32K,且每個進(jìn)程有2 GB的虛擬內(nèi)存空間;將關(guān)鍵的驅(qū)動程序、文件系統(tǒng)和圖形界面管理器移到了內(nèi)核中,大大減少了CPU在內(nèi)核態(tài)和用戶態(tài)間切換造成的性能損失等。在同時要求高性能和低功耗的嵌入式應(yīng)用中,運行Win-dows CE的LPC3250平臺將會有很好的市場前景,對于常用到的串口的驅(qū)動開發(fā)顯得尤為重要。

  1 WindOWS CE的串口驅(qū)動模

  WindowsCE設(shè)備驅(qū)動程序概述WindowsCE支持廣泛的基于各種CE平臺的設(shè)備驅(qū)動程序。目前,它提供了四種設(shè)備模型,其中兩種是專用于WindowsCE的模型,另外兩種外部模型來自其它操作系統(tǒng)。基于WindowsCE的兩種模型是本機的設(shè)備驅(qū)動程序和流接口驅(qū)動程序。兩種外部模型用于通用串行總線(USB)和網(wǎng)絡(luò)驅(qū)動器接口標(biāo)準(zhǔn)(NDIS)的驅(qū)動程序。而流接口驅(qū)動程序通過一組流接口函數(shù)使得應(yīng)用程序可以通過文件系統(tǒng)中的特殊文件而與設(shè)備接口,因此藍(lán)牙仿真串口的功能性更適合流接口驅(qū)動程序的結(jié)構(gòu)。

  WindowsCE操作系統(tǒng)中集成的。設(shè)備驅(qū)動程序接口(DDI)是在MDD中實現(xiàn)的函數(shù)集,GWES模塊通過這個接口調(diào)用設(shè)備驅(qū)動程序;設(shè)備驅(qū)動程序服務(wù)器提供接口(DDSI)是在PDD中實現(xiàn)的函數(shù)集并由MDD調(diào)用。由于微軟提供了所有與MDD模塊相關(guān)的源代碼,所以對這部分不用做任何改動,只需將自己的PDD模塊與MDD模塊鏈結(jié)成一個公用庫。

  基于Windows CE有兩種驅(qū)動程序模型:本機設(shè)備驅(qū)動程序和流接口驅(qū)動程序。串口驅(qū)動就屬于分層的流接口驅(qū)動程序。分層驅(qū)動程序?qū)⒃O(shè)備的驅(qū)動程序分為兩層:平臺相關(guān)驅(qū)動 PDD(Platform Dependence Driver)層。操作系統(tǒng)與MDD層之間通過DDI(設(shè)備驅(qū)動接口)進(jìn)行交互。MDD層也實現(xiàn)了中斷處理線程IST,并定義一些與PDD層的接口函數(shù),這些接口函數(shù)稱為DDSI(設(shè)備驅(qū)動服務(wù)接口)。

  用%_WinCEROOT%來表示W(wǎng)indows CE的安裝根目錄,符合‘550工業(yè)規(guī)范的串口驅(qū)動源碼主要位于\%_WINCEROOT%\PUBLIC\COMMON\OAK\DRIVERS\SERIAL下,主要看表1所列的一些重要文件。

部分串口源代碼文件

  如圖1所示,串口應(yīng)用程序通過設(shè)備管理器調(diào)用mdd.c中MDD層的標(biāo)準(zhǔn)流設(shè)備驅(qū)動接口COM_XXX,在COM_XXX中通過結(jié)構(gòu)體 HW_INDEP_INFO中HWOBJ結(jié)構(gòu)體調(diào)用串口硬件操作函數(shù)HWxxx;然后在cserpdd.cpp中GetSeri-alObject函數(shù)通過HW_VTBL類型數(shù)組IoVTb1將HWxxx映射為Serxxx系列函數(shù),Serxxx系列函數(shù)則調(diào)用CSerialPDD類中的成員函數(shù)(其中的純虛函數(shù)由CserialP-DD的繼承類CP-dd16550實現(xiàn),真正與物理底層操作的是CPdd16550的數(shù)據(jù)成員CReg16550中的 Write_XXX、Read_XXX函數(shù))。

串口驅(qū)動原理

  驅(qū)動程序英文名為“Device Driver”,全稱為“設(shè)備驅(qū)動程序”是一種可以使計算機和設(shè)備通信的特殊程序,可以 說相當(dāng)于硬件的接口,操作系統(tǒng)只有通過這個接口,才能控制硬件設(shè)備的工作,假如某設(shè)備的驅(qū)動程序未能正確安裝,便不能正常工作。 因此,驅(qū)動程序被譽為“ 硬件的靈魂”、“硬件的主宰”、和“硬件和系統(tǒng)之間的橋梁”等。隨著電子技術(shù)的飛速發(fā)展,電腦硬件的性能越來越強大。這時候,電腦就正如古人所說的“萬事俱備,只欠東風(fēng)”,這“東風(fēng)”的角色就落在了驅(qū)動程序身上。如此看來,驅(qū)動程序在電腦使用上還真起著舉足輕重的 作用。

  2 WinCE6.0下的LPC3250串口驅(qū)動程序開發(fā)

  LPC3250串口與‘550工業(yè)規(guī)范的串口有差異,為了保證程序的通用性和盡量減少代碼量,在實現(xiàn)LPC3250串口驅(qū)動程序時,需要繼承 CPdd16550和CReg16550類,根據(jù)實際的硬件特性實現(xiàn)它們的純虛函數(shù)并擴展其虛函數(shù)的功能,配置硬件相關(guān)的寄存器和修改相關(guān)代碼。這里要注意的是LPC3250串口寄存器地址間隔是32位,而不是標(biāo)準(zhǔn)的8位;CPdd16550的繼承類Clpc32xxPdd16550UART本質(zhì)還是個抽象類,同時為標(biāo)準(zhǔn)串口和高速串口服務(wù),要重新實現(xiàn)Init、GetDivisorO-{Rate、GetWaterMark、 MapHardware、CreateHardwareAc-cess、CreateSerialObject、DeleteSerialObject等函數(shù),其他的函數(shù)可以直接調(diào)用CPdd16550的成員函數(shù),只需要修改相關(guān)串口寄存器的宏定義。

  在Clpc32xxPdd16550UART的Init函數(shù)中,GetIsrInfo以串口的Active注冊表鍵為依據(jù)查出物理中斷號,并保存在 DDKISRINFO結(jié)構(gòu)體的dwlrq成員中。KernelloCon-trol函數(shù)將物理中斷號轉(zhuǎn)換為邏輯中斷號,符合條件就將邏輯中斷號回寫到注冊表中。相關(guān)代碼如下:

程序

  接著調(diào)用父類CPdd16550的Init函數(shù),創(chuàng)建中斷服務(wù)線程(IST)事件,并通過InterruptInitialize函數(shù)將事件與邏輯中斷號關(guān)聯(lián)起來,調(diào)用CreateHardwareAccess和MapHardware函數(shù)將串口基地址及相關(guān)寄存器片內(nèi)地址映射到內(nèi)核進(jìn)程的虛擬地址。

  在MapHardware中,用GetWindowInfo根據(jù)串口的Active注冊表鍵獲得串口的全部I/O端口和內(nèi)存地址信息,然后用 MmMapIoSpace函數(shù)將串口物理地址和相關(guān)控制寄存器地址轉(zhuǎn)換成內(nèi)核進(jìn)程的虛擬地址,以便后面對寄存器進(jìn)行操作,部分代碼如下:

程序

  根據(jù)LPC3250的數(shù)據(jù)手冊,設(shè)置標(biāo)準(zhǔn)UART的波特率需要設(shè)置小數(shù)波特率預(yù)分頻器和UART波特率發(fā)生器。當(dāng)不用小數(shù)波特率預(yù)分頻器(即X=Y=1) 時,將標(biāo)準(zhǔn)UART的{Baudrate,DLM:DLL}的值定義一個數(shù)組BaudPairs[]。GetDivisorOfRate根據(jù)這個數(shù)組得到分頻系數(shù),然后調(diào)用父類的成員函數(shù)SetBaudRate便可設(shè)置波特率。高速UART的波特率類似,只是波特率計算公式和分頻系數(shù)與標(biāo)準(zhǔn)UART不同。

  Clpc32xxPdd16550UART是個抽象類,實現(xiàn)通用功能,具體的要分別由繼承的標(biāo)準(zhǔn)串口Clpc32xxPdd16550Stan- dardUART類和高速串口Clpc32xxPdd16550HighUART類實現(xiàn)。在各自初始化時,主要是配置各種寄存器,實現(xiàn)具體硬件差異化,包括:配置UART時鐘控制寄存器、時鐘模式寄存器和時鐘選擇寄存器,分別使能UART時鐘、設(shè)置自動時鐘模式、選擇相應(yīng)的時鐘源作為分頻器的輸入時鐘;禁止UART的回送功能。

  特別要強調(diào)的是關(guān)于中斷的處理,串口驅(qū)動中斷可以用動態(tài)映射,也可以用靜態(tài)映射。在OEMInter-ruptHandler、 Clpc32xxPdd16550UART::Init、CPdd16550::Init、CPdd16550::ThreadRun等處加入調(diào)試打印信息,可以較快地找到問題所在,確定硬件中斷是否映射為系統(tǒng)中斷、中斷產(chǎn)生時是否進(jìn)入相應(yīng)的處理程序。中斷處理好了,串口驅(qū)動就基本完成了。

  上述工作結(jié)束后,就要添加串口的注冊表。以串口3為例,主要是設(shè)置動態(tài)鏈接庫DLL、設(shè)備基地址、中斷號、前綴名、被加載的順序等。根據(jù)注冊表的 DeviceArrayIn-dex、CreateSerialObject就可以構(gòu)造標(biāo)準(zhǔn)串口或高速串口類實例了, DeleteSerialObject在退出驅(qū)動時刪除實例。具體代碼如下:

程序

程序

程序

  在廣州致遠(yuǎn)電子有限公司的SmartARM3250開發(fā)板上,通過WinCE的串口應(yīng)用程序與上位PC機進(jìn)行發(fā)送接收實驗,本驅(qū)動已經(jīng)實現(xiàn)標(biāo)準(zhǔn)串口460 800 b/s、高速串口921 600 b/s的穩(wěn)定傳輸。

  本文介紹了WinCE6.0下的串口驅(qū)動模型,結(jié)合LPC3250的硬件情況,詳細(xì)說明了串口驅(qū)動開發(fā)過程,包括配置串口相關(guān)的寄存器和處理中斷中重要函數(shù)的實現(xiàn),以及注冊表和Source文件編寫等。本驅(qū)動程序在廣州致遠(yuǎn)電子有限公司的SmartARM3250開發(fā)板上實驗成功。


  
關(guān)鍵詞:ARM串口驅(qū)動

版權(quán)與免責(zé)聲明

凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場網(wǎng),轉(zhuǎn)載請必須注明維庫電子市場網(wǎng),http://m.58mhw.cn,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點或證實其內(nèi)容的真實性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個人從本網(wǎng)轉(zhuǎn)載時,必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。

如涉及作品內(nèi)容、版權(quán)等問題,請在作品發(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。

廣告
OEM清單文件: OEM清單文件
*公司名:
*聯(lián)系人:
*手機號碼:
QQ:
有效期:

掃碼下載APP,
一鍵連接廣大的電子世界。

在線人工客服

買家服務(wù):
賣家服務(wù):
技術(shù)客服:

0571-85317607

網(wǎng)站技術(shù)支持

13606545031

客服在線時間周一至周五
9:00-17:30

關(guān)注官方微信號,
第一時間獲取資訊。

建議反饋

聯(lián)系人:

聯(lián)系方式:

按住滑塊,拖拽到最右邊
>>
感謝您向阿庫提出的寶貴意見,您的參與是維庫提升服務(wù)的動力!意見一經(jīng)采納,將有感恩紅包奉上哦!