• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于Win?。茫诺模牛校梗常保担撸樱校沈寗映绦蛟O計

      2009-08-13 06:18:04許弟建
      現代電子技術 2009年10期
      關鍵詞:嵌入式操作系統驅動程序

      張 東 許弟建

      摘 要:編寫聯系操作系統和相應硬件設備的驅動程序至關重要。在Platform Builder 4.2開發(fā)環(huán)境下,基于流接口驅動程序模型,詳細闡述嵌入式操作系統Win CE下EP9315芯片的SPI接口的驅動程序設計方法,就設計步驟、虛擬地址映射實現和關鍵程序代碼編寫等進行具體分析,并論述驅動程序與EVC編程環(huán)境下SPI應用程序之間的關系。驅動程序和相應應用程序能正確運行于優(yōu)龍的FS_EP9315開發(fā)平臺。實踐證明,該方法正確可行。

      關鍵詞:嵌入式操作系統;Win CE;SPI;驅動程序

      中圖分類號:TP311文獻標識碼:B

      文章編號:1004-373X(2009)10-069-04

      Design of EP9315-SPI Driver Based on Win CE

      ZHANG Dong1,XU Dijian2

      (1.Chongqing University of Arts and Sciences,Chongqing,402160,China;2.Chongqing University of Science and Technology,Chongqing,401331,China)

      Abstract: It is very important to compile driver connecting operating system with corresponded hardware device.Based on stream interface driver model,the design of SPI driver in embedded operating system Win CE in development environment of platform builder 4.2 and design method are introduced and analysed,realizing virtual address map,key code and the relationship between driver and SPI application program in EVC program environment is discussed.Driver and corresponded application program can be operated on FS_EP9315 development platform of ucdragon rightly.Experience indicates the methord is right and feasible.

      Keywords:embedded operating system;Win CE;SPI;driver program

      0 引 言

      嵌入式是“以應用為中心,以計算機技術為基礎,軟硬件可裁剪,適合應用系統對功能、可靠性、成本、體積、功耗嚴格要求的計算機系統”。Windows CE.NET是Microsoft推出的功能強大的緊湊、高效、可伸縮的32位嵌入式操作系統,主要面對各種各樣嵌入式系統的產品[1,2]。

      該系統具有多線程、多任務、完全搶占式的特點,是為各種具有嚴格資源限制的硬件系統所設計的。為了將操作系統和硬件設備連接起來,硬件和軟件的驅動聯系就顯得很重要。SPI是一種高速、全雙工、同步的通信總線,在芯片的管腳上只占用4根線,節(jié)約了芯片的管腳,同時為PCB的布局節(jié)省了空間,提供了方便,正是出于這種簡單易用的特性,現在越來越多的芯片都集成了這種通信協議。SPI的工作模式有兩種:主模式和從模式,SPI總線可以配置成單主單從、單主多從、互為主從。為了充分利用芯片的SPI接口進行相應的驅動程序設計以及應用程序設計,通用方法的研究就顯得十分重要。

      1 Win CE提供的驅動模型

      Win CE操作系統支持兩種類型的驅動程序,一種為本地驅動程序,是把設備驅動程序作為獨立的任務實現的,直接在頂層任務中實現硬件操作,因此有明確和專一的目的。本地驅動程序適合于那些集成到Win CE平臺的設備,諸如鍵盤、觸摸屏等設備。另一種是具有定制接口的流接口驅動程序,它是一般類型的設備驅動程序,為用戶一級的動態(tài)鏈接庫(DLL)文件,用來實現一組固定的函數稱為“流接口函數”,這些流接口函數使得應用程序可以通過文件系統訪問這些驅動程序。這里論述的SPI驅動就屬于流接口驅動。

      2 SPI驅動程序的設計

      2.1 EP9315芯片及SPI接口簡介

      EP9315是一款基于ARM920T,由Cirrus Logic公司生產的工業(yè)級芯片[3,4] ,內帶MMU,16 KB的指令Cache,16 KB的數據Cache和數學協處理器,主頻為200 MHz,系統總線為100 MHz。該芯片擁有一組SPI接口,利用它可方便實現與外圍SPI器件進行通信,可大大簡化工程應用的硬件設計軟件。

      SPI驅動程序采用Win CE流驅動的標準形式。下面從驅動程序具體設計步驟以及驅動代碼的編寫兩個方面做較為詳細的闡述。

      2.2 SPI驅動程序設計步驟

      在Platform Builder 4.2下設計Win CE流接口驅動程序可按照以下步驟進行[5-7]:

      (1) 在C:\Win CE420\PLATFORM\ep931x\drivers目錄下新建一個目錄SPI;

      (2) 從其他驅動目錄下復制makefile文件到SPI目錄下;

      (3) 用文本編輯器建立4個文本文件,文件名分別為SPI.c,SPI.h,SPI.def和sources;

      (4) 編輯目錄C:\Win CE420\PLATFORM\ep931x\driver下的dirs文件。用文本編輯器打開該文件,找到“DIRS=”等式,在該等式最后添加一行, 如下面所示:

      DIRS=…

      SPI

      (5) 在Platform Builder 4.2中打開Platform.bib文件,在該文件最后和FILES之前加入一行,指明在生成Windows CE內核映射時自動將SPI.dll加入到內核映像中,添加內容如下:

      SPI.dll MYM(_FLATRELEASEDIR) SPI.dll NK SH

      (6)具體的流接口驅動程序跟注冊表密不可分,在Platform Builder 4.2中打開platform.reg文件,在該文件最后加入如下所示注冊表信息,以使在生成操作系統映像時,Platform Builder將注冊表信息加入到注冊表中。在Platform.reg中添加內容如下:

      [HKEY_LOCAL_MACHINE\Drivers\BuiltIn\SPI]

      "Prefix"=" SPI "

      "Dll"=" SPI.dll"

      "FriendlyName"=" SPI Driver"

      "Index"=dword:1

      "Order"=dword:0

      (7) 為了通知Windows CE驅動的函數,需要在SPI.def文件中指出要導出的函數,編寫內容如下:

      LIBRARYSPI

      EXPORTS

      SPI_Init

      SPI _Deinit

      SPI _Open

      SPI _Close

      SPI _Read

      SPI _Write

      其中LIBRARY表示該驅動的動態(tài)庫和靜態(tài)庫名稱,EXPORTS段后面列出要從驅動的動態(tài)鏈接庫文件中導出的函數名稱。

      (8) 編輯sources文件的內容,告訴編輯器和連接器如何編譯及連接本驅動程序。

      TARGETNAME=SPI

      RELEASETYPE=PLATFORM

      TARGETTYPE=DYNLINK

      TARGETLIBS= MYM(_COMMONSDKROOT) \lib\MYM(_CPUINDPATH)\coredll.lib

      DEFFILE=MYM(TARGETNAME).def

      PREPROCESSDEFFILE=1

      DLLENTRY=DllEntry

      SOURCES=SPI.c

      FILE_VIEW_INCLUDES_FOLDER=SPI.h

      (9) 改寫并導入新的ep931x.cec文件

      在C:\Win CE420\PLATFORM\ep931x\bspfiles文件夾下,打開并改寫ep931x.cec文件。

      在Platform builder 4.2環(huán)境下,刪除原來的cec文件,并導入添加SPI部分后的ep931x.cec文件。在catalog窗口中選擇SPI驅動加入到要編譯的映像中。

      至此,SPI驅動程序的框架已經搭建完畢,剩下的工作就按照流接口驅動要求編寫驅動程序代碼。

      2.3 驅動代碼編寫

      每個流接口驅動程序必須實現1組標準函數,用來完成標準的文件I/O函數和電源管理函數,這些函數提供給Win CE操作系統的內核使用。

      SPI流接口驅動程序重點要實現的dll接口函數如下:

      SPI_Init:驅動程序加載函數;

      SPI_Deinit:驅動程序卸載函數;

      SPI_Open:驅動程序打開函數;

      SPI_Close:驅動程序關閉函數;

      SPI_Write:寫函數;

      SPI_Read:寫函數。

      下面重點對SPI _Init,SPI _Write兩個函數做闡述,其他函數代碼可參照相關資料編寫。

      (1) SPI_Init函數設計。

      在Win CE中,程序訪問的地址都是虛擬地址,因此要訪問硬件物理地址,必須將物理地址空間映射到虛擬空間。

      在SPI_Init函數中,首先通過函數VirtualAlloc()和VirtualCopy(),把EP9315芯片中針對SPI的物理地址和操作系統的虛擬空間聯系起來。在其他流接口函數中,即可對申請到的虛擬地址進行操作,按照Win CE中的流驅動模型進行驅動的編寫,對虛擬地址空間的操作就相當于對芯片的物理地址進行操作[1]。SPI_Init的函數中,有關地址映射如下實現:

      ① 在SPI.h頭文件中定義數據結構。

      EP9315芯片SPI寄存器物理地址分配如表1所示[5],包括控制寄存器、數據寄存器、狀態(tài)寄存器、頻率設置寄存器、與中斷有關的寄存器。

      因而定義的數據結構為:

      #define IOP_BASE0x808A0000

      typedef struct {

      // SPI PORT

      unsigned int rSPICR0;

      unsigned int rSPICR1;

      unsigned int rSPIDR;

      unsigned int rSPISR;

      unsigned int rSPICPSR;

      unsigned int rSPIIIR;

      unsigned int rSPIICR;

      }IOPreg;

      ② 在SPI_Init()中地址映射實現。

      地址映射通過VirtualCopy()和VirtualCopy()兩個函數實現。VirtualCopy()函數是Win CE中分配連續(xù)虛擬地址的API,利用該函數為SPI接口各個寄存器物理地址申請?zhí)摂M地址。VirtualCopy()函數負責把SPI接口各個寄存器物理地址映射到申請到的虛擬地址。

      為方便驅動程序調試,可利用ERRORMSG()函數在程序適當位置加上一些調試信息,這些調試信息在驅動程序運行時可通過超級終端口輸出,方便驅動程序調試。

      結合EP9315的SPI接口,需要設置控制寄存器和波特率寄存器。

      為實現對標準SPI接口的LED屏幕進行顯示控制,需要配置EP9315的SPII總線為單主單從模式,可通過設置SPI接口控制寄存器實現。為調整LED的刷新頻率,可通過設置SPI接口頻率設置寄存器實現。

      SPI_Init()中包含有如下重要代碼:

      // VirtualAlloc()申請?zhí)摂M地址

      v_pIOPregs = (volatile IOPreg *)VirtualAlloc(0,sizeof(IOPreg), MEM_RESERVE,PAGE_NOACCESS);

      if (v_pIOPregs == NULL)

      RetValue = FALSE;

      else

      {

      // VirtualCopy()實現虛擬地址的映射

      if (!VirtualCopy((PVOID)v_pIOPregs,

      (PVOID)(IOP_BASE >> 8),sizeof(IOPreg),PAGE_PHYSICAL | PAGE_READWRITE | PAGE_NOCACHE))

      RetValue = FALSE;

      Else

      // ERRORMSG()輸出調試信息

      ERRORMSG(1,(TEXT("For IOPregs :VirtualCopy success!\r\n")));

      //設置控制寄存器和波特率寄存器

      v_pIOPregs->rSPICPSR = 0x18;

      v_pIOPregs->rSPICR0 = 0x18;

      (2) SPI_Write寫函數設計。

      文中涉及的工程需要通過EP9315的SPI接口,實現對一個帶有標準SPI接口的LED屏進行寫入數據操作,實現對LED屏的顯示控制。

      下列寫函數程序代碼中,通過MapPtrToProcess()獲取應用程序編輯框中輸入的數據:

      v_pIOPregs->rSPIDR = *pWriteBuffer;

      向SPI接口發(fā)送一個8位數據。通過一個for循環(huán)實現一個1 024(128×8) b的數據的發(fā)送,以滿足所涉及的LED屏數據位的要求。

      具體程序代碼如下:

      DWORD SPI_Write

      (DWORD hOpenContext,LPVOID pBuffer,DWORD Count)

      {uchar i;

      uchar * pWriteBuffer;

      pWriteBuffer=MapPtrToProcess(pBuffer,GetCallerProcess());

      // Write 1024(=128x8) bits

      for(i=0;i<128;i++)

      {

      while( (v_pIOPregs->rSPISR & 0x01) != 1 );

      v_pIOPregs->rSPIDR = *pWriteBuffer;

      }

      // Wait to complete write data

      while( (v_pIOPregs->rSPISR & 0x01) != 1 );

      return 1;

      }

      上述寫函數設計實現了對SPI接口的寫操作,應用程序通過調用該函數,即可實現對帶有標準SPI接口的LED屏進行顯示控制。對寫函數進行相關改動,即可設計出SPI_Read函數,實現對SPI接口器件數據讀取操作,限于篇幅,在此不再贅述。

      3 SPI應用程序設計

      設計的SPI驅動程序是否正確,可在EVC 4.0環(huán)境下編寫相關應用程序驗證。

      編寫SPI接口的應用程序[5,8],可實現加載驅動、卸載驅動、打開驅動、關閉驅動、接口功能設置、接口讀寫等操作。在此僅編寫了一個讀寫SPI接口的應用程序,以對前面設計的SPI_Init,SPI_Deinit,SPI_Open,SPI_Close,SPI_Write等流接口函數進行驗證。EVC 4.0編程環(huán)境下設計界面如圖1所示。

      通過RegCreateKeyEx(),WRITE_REG_SZ(),WRITE_REG_DWORD()等函數創(chuàng)建注冊表,實現加載驅動;通過CreateFile()調用SPI_Open(),打開驅動程序;通過WriteFile()調用SPI_Write()實現,對SPI接口的寫入操作。通過ReadFile()調用SPI_Read(),實現對SPI接口的讀取操作。

      由于篇幅關系,現僅列 “數據寫入SPI”部分的關鍵代碼。其他代碼可參照相關資料編寫。

      void CGpioDlg::OnWrite()

      {

      DWORD actlen;

      if(hFile==INVALID_HANDLE_VALUE)

      {return; }

      UpdateData(TRUE);

      BOOL ret=WriteFile(hFile,&m;_WriteByte,1,&actlen;,NULL);

      }

      4 實驗結果

      在Platform Builder 4.2環(huán)境下編譯并下載內核到優(yōu)龍公司的FS_EP9315開發(fā)平臺,Win CE運行正常。在Win CE操作系統下運行SPI應用程序,在運行界面的“寫入SPI數據”下面的編輯窗口輸入待寫入數據0x55,按“數據寫入SPI”按鈕,能實現對SPI接口的寫入操作。通過示波器觀察EP9315的SPI接口的輸出引腳、SSPTX1引腳,波形如圖2所示。由分析圖中的波形可知,高低電平間隔出現,證明發(fā)送數據正確。

      整個實驗表明,上述設計方法正確可行,驅動程序和應用程序運行正常。

      5 結 語

      這里主要論述了在嵌入式操作系統Win CE下SPI驅動程序的開發(fā)步驟及關鍵代碼的編寫,并對SPI應用程序設計以及驅動程序和應用程序二者之間的聯系進行對比分析。文中對其他流接口驅動程序的設計和應用程序的設計具有一定的指導意義。

      參考文獻

      [1]傅曦,陳黎.Windows CE.Net嵌入式開發(fā)入門基于Xscae架構.北京:人民郵電出版社,2006.

      [2]姜波.Windows CE.Net程序設計.北京:機械工業(yè)出版社,2007.

      [3]Cirrus Logic.EP9315 User′s Guild.2004.

      [4]Cirrus Logic.EP9315 Date Sheet.2004.

      [5]周立功.ARM&Win; CE實驗與實踐.北京:北京航空航天大學出版社,2007.

      [6]王小芳,王典洪,陳飛.基于Win CE的I2C驅動程序設計.單片機與嵌入式系統應用,2006(4):28-30.

      [7]彭少武,宋娟.Windows CE的CAN總線驅動程序設計.單片機與嵌入式系統應用,2007(11):79-81.

      [8]汪兵.EVC高級編程及其應用開發(fā)[M].北京:中國水利水電出版社,2005.

      [9]孫豐軍,余春暄.SPI串行總線接口的Verilog實現.現代電子技術,2005,28(16):105-106,109.

      猜你喜歡
      嵌入式操作系統驅動程序
      基于多核環(huán)境的嵌入式操作系統內核設計與實現
      時代汽車(2025年3期)2025-03-12 00:00:00
      典型實時嵌入式操作系統應用分析
      電子測試(2018年23期)2018-12-29 11:11:30
      計算機硬件設備驅動程序分析
      電子制作(2018年17期)2018-09-28 01:56:58
      計算機嵌入式操作系統分析
      基于嵌入式操作系統的工業(yè)采集板設計
      應用服務型人才培養(yǎng)體系下的嵌入式操作系統教學改革探索
      計算機嵌入式操作系統研究
      驅動程序更新與推薦
      驅動程序更新與推薦
      如何為老顯卡安裝Windows7驅動程序? 等
      罗定市| 廊坊市| 临沂市| 乌拉特中旗| 桃江县| 五大连池市| 尤溪县| 长寿区| 开阳县| 清水县| 同心县| 新晃| 历史| 岚皋县| 竹北市| 察哈| 平顺县| 阿合奇县| 阜平县| 漾濞| 石景山区| 彰化市| 新化县| 永德县| 田林县| 贡觉县| 利川市| 惠来县| 丰宁| 南安市| 屏山县| 广饶县| 崇文区| 钟祥市| 宜黄县| 星座| 安宁市| 大庆市| 河源市| 荆门市| 那坡县|