Windows CE .NET的AD7854驅動程式開發

來源:互聯網
上載者:User
Windows CE.net的AD7854驅動程式開發
[日期:2008-11-21] 來源:單片機與嵌入式系統應用  作者:東南大學 周怡君 金振興 [字型: ]

 

引 言
   
AD7854是一款高速、低功耗的12位並行介面模數轉換晶片,其工作電壓範圍是3~5 V,採樣頻率最高為200 kHz。由於AD7854在正常的工作模式下功耗為5.4mW,在省電模式下功耗為3.6μW,因此在攜帶型裝置中得到廣泛的應用。AD7854具有自校準和系統校準功能,可確保其精確地工作。AD7854含有片上採樣保持電路和片上參考電壓(2.5 V),從而使外圍電路設計得以簡化。當前,在先進的可攜式裝置中,大量引進嵌入式作業系統對系統資源進行管理,因此開發硬體裝置的驅動成為構建攜帶型系統的一個重要工作。本文以S3C2410為處理器,開發了基於Windows CE.net的AD7854驅動程式,詳細闡述Windows CE.net下A137854流介面驅動程式的實現過程及相關內容。

1 AD7854與S3C2410的擴充設計
    為確保AD7854在S3C2410的控制下完成採樣和模數轉換,必須合理地設計介面電路。AD7854為12位並行模數轉換晶片,S3C2410是32位微處理器,因此,一次讀操作即可完成AD7854轉換結果的讀取。但是,對於AD7854校準寄存器的讀操作以及對各寄存器的寫操作都需要2個讀或寫操作,因此,統一使用2個讀/寫操作完成對AD7854的操作,即僅選用AD7854的低8位元據線作為資料傳送通道。
    為了提高S3C2410的驅動能力,在S3C2410與外設之間加入了一個雙向資料緩衝器74LVCl6245。設計的A/D轉換介面電路原理1所示。

2 WindOWS CE.Ret裝置驅動簡介
    Windows CE.net裝置驅動模型主要有兩種:本機裝置驅動與流介面裝置驅動。不同的驅動模型只能通過它們的軟體介面來區別,而不是它們適用的裝置。驅動程式模型決定其輸出的軟體介面。
    本機裝置驅動程式適於整合到基於Windows CE.net平台的裝置,如通用LED驅動和電源驅動等。每種本機裝置驅動程式都有精確的要求和特殊的目的,微軟提供了定製介面的方式來支援內部裝置驅動程式。一般來說,只有OEM開發商對本機裝置驅動程式感興趣,而獨立硬體銷售商只開發附加的硬體驅動程式。Windows CE.net平台產生器(platform builder)提供本機裝置驅動程式的樣本,可考慮把本機裝置驅動程式樣本應用到自己的平台上,而無需再從頭開發自己的本機驅動程式。
    流介面裝置驅動程式是一般類型的裝置驅動程式。它表現為使用者一級的動態DLL,用來匯出一組固定的函數,稱為“流介面函數”。應用程式可以通過檔案系統介面函數(API)訪問這些介面函數,從而調用驅動程式,驅動硬體裝置進行工作。在流介面驅動程式中,驅動程式負責把外設抽象成一個檔案,而應用程式則使用作業系統提供的API對外設進行訪問。流介面驅動程式幾乎支援任何類型的、可以串連到基於Windows CE.net平台的外部裝置,例如印表機、數據機等。本文介紹的AD7854驅動也是採用流介面驅動模型,屬於流介面驅動的範疇。流介面裝置驅動的體繫結構2所示。

3 AD7854驅動設計與實現
    由圖l所示的硬體電路可知,AD7854被直接映射到系統的記憶體,它的物理地址是Oxl0000000,因此,該裝置的驅動程式可以選用單片式流介面裝置驅動模型。同時S3C24lO採用中斷的方式對AD7854的轉換結果進行讀取並啟動下一次的轉換。因此,開發A/D驅動主要由兩個部分組成:核心部分和流介面函數部分。核心部分主要完成中斷的處理,包括物理中斷到邏輯中斷的轉換,中斷的使能、禁止,喚醒中斷服務線程等工作;流介面函數部分主要通過實現Windows CE.net提供的介面函數完成對A137854的讀、寫操作。
3.1 AD7854中斷在WindOWS CE中的處理
   
核心部分主要是修改Windows CE.net中與中斷相關的核心檔案,完成物理中斷到邏輯中斷的映射。由圖1可知,AD7854佔用外部中斷0(EINTO)。為了讓作業系統能夠處理外部中斷O,必須對其關於中斷處理的核心代碼進行修改。主要修改的核心檔案如下:
    ①修改%WIN(2ER()0T%\PLATFORM\SMDK2410\INC\oalintr.h檔案;
    ②修改%WINCEROOT%\PLATFORM\smdk2410\kernel\hal\arm\armint.c檔案中的OEMInterrupt Han—dler()函數;
    ③在中斷服務線程(IST)中調用InterruptEnable()、InterruptDisable()、InterruptDone()等函數對中斷進行操作時,系統核心調用OEMInterTuptEnable()、()EMInter—ruptDisable()、()EMInterruptDone(),對中斷寄存器進行設定,完成中斷允許、中斷禁止和中斷完成操作。對這3個OEM函數的修改,是通過修改%WINCERO0T%\PLATFORM\smdk2410\kernel\hal\cfw.c檔案完成的。
    核心檔案的修改可以參照核心檔案函數的具體實現來完成。經過對Windows CE.net核心檔案的修改,完成了物理中斷EINTO到邏輯中斷號SYSINTR_ADC的映射。至此,就可以利用Windows CE.net提供的API函數,通過對邏輯中斷SYSINTR_ADC的處理來完成物理中斷零的操作。
3.2 AD7854流介面函數的實現
   
流介面驅動程式實質上就是一個動態連結程式庫,在Windows CE.net中,流介面函數一共有10個。這些流介面函數並不需要每個都要有具體的實現代碼,關鍵是要根據裝置的具體工作流程來完成相應的介面函數。本設計中開發的AD7854的驅動程式主要實現的介面函數為:XXX_Deinit、XXX_Init、XXX_Open、XXX_Close、XXX_Read、XXX_Write。XXX為裝置檔案名稱的首碼,由於開
發的是模數轉換晶片的驅動,故在此將該首碼命名為“ADC”。以下具體介紹在Platform Builder開發環境下AD7854驅動的開發過程。
    首先,在。Platform Builder4.2開發環境下為AD7854的驅動建立一個WCE Dynamic—Link Library工程,隨後就可以在該工程下完成各流介面函數。流介面函數的實現需要完成兩個主要方面的工作:AD7854資料結構的建立和各介面函數代碼的實現。
    (1)AD7854的資料結構
   
在編寫流介面函數之前,應該定義裝置的資料結構,這是對現實裝置的抽象。根據AD7854在操作中所涉及的CPU相關儲存空間以及AD7854內部操作的需要,現將AD7854抽象成以下結構類型:


    AD7854的資料結構可以看作是與AD7854相關的邏輯體。通過WindowsCE.net提供的記憶體映射函數VirtualAl—loe()和VirtualCopy(),可以將邏輯體與具體的物理地址關聯起來,完成對實體儲存體器的設定。
    (2)流介面函數的開發
    流介面函數為應用程式操作硬體提供統一的介面,完成對硬體的抽象工作。一個流介面函數實質上就是提供某一特定功能的模組,根據硬體的不同,各介面函數實現的內容千差萬別。有的介面函數需要很多的代碼,有的就是一個空的函數體。在AD7854驅動的介面函數中,初始化函數以及讀寫函數是主要的介面函數,本文結合硬體具體介紹其實現過程:
    ①PADC_CONTEXT ADC_Init(LPCTSTR pCon—text,LPCVOID lpvBusContext)。該介面函數在驅動程式載入時,由裝置管理員調用。在該函數中主要完成硬體初始化工作,如映射裝置的實體記憶體、配置相關寄存器、建立中斷事件、中斷服務線程等。
    ADC_Init函數需按照一定的順序完成驅動的初始化工作,其內建函式的調用順序3所示。ADC_Init調用成功以後,將返回AD7854結構體的首地址——pADC,同時表明該驅動載入成功。
    ②DWORD ADC_Read(PADC_CONTEXT pADC,PUCHAR pBuffer,DWORD Count)。該介面函數主要完成對AD7854.的讀操作,代碼是對操作的抽象。為了更好地體現開發過程,首先介紹一下AD7854的讀操作過程。AD7854一次輸出16位元據,分成2次輸出(高8位、低8位)。在讀寫時序中,除了通過對CPU的儲存寄存器的相關配置以滿足時間上的要求外,另一個重要的地方就是注意滿足高位元組使能輸出引腳(HBEN)的需要。具體是在輸出高位元組時,該引腳應輸入高電平。AD7854輸出一次16位元據時有兩種輸出方式:其一就是高8位先輸出,然後是低8位輸出(與此相對應,HBEN引腳在AD7854讀時序中第1個位元組為高電平,第2個位元組為低電平);其二剛好相反。
    由圖3可知,HBEN的電平由S3C2410的地址線O確定,因此在一個AD7854的讀時序中地址線O應改變一次自己的狀態。同時AD7854的片選與LnGCS2相連,這也就構成了AD7854的兩個讀物理地址:0x1000 0000和0x1000 0001。在本設計中,規定先讀低8位元據然後為高8位,因此地址線應先送出Oxl000 0000然後送出0x1000 0001。AD7854的讀周期時序4所示。

    由此可開發AD7854讀介面函數,具體代碼如下:

 

   寫介面函數DWORD ADC_Write(PADC_CON—TEXT pADC,PUCHAR pBuffer,DWORD Count),主要完成對.AD7854的寫操作。AD7854的寫操作過程和讀操作很相似,代碼的實現過程也基本相同,在此就不再贅述。
    其餘的介面函數主要完成返回AD7854的結構控制代碼,釋放記憶體空間等工作。雖然必不可少,但是對AD7854的操作不是主要的,在此不再詳細介紹。
    編寫匯出函數和註冊表檔案,編譯產生d11檔案,通過PB將其製作成CEC檔案,在定製作業系統時可以將驅動程式加入作業系統中。這樣就完成了驅動程式的編寫,實現了作業系統與硬體之間的串連。

4 結 論
    Windows CE.net是多任務即時嵌入式作業系統,具有良好的圖形介面,即時性良好、功能強大,適用於工業控制領域。本文以AD7854的驅動開發為例,闡述了Windows CE.net對外部中斷的處理過程和流介面驅動的開發方法。該驅動程式已成功應用在所開發的作業環境監測與評價系統中,在微氣候各指標的監測方面應用效果良好。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.