1.引言
在嵌入式系統(tǒng)特別是數據采集系統(tǒng)中,實時性至關重要,它不僅要求嵌入式微處理器能快速作出響應,還要求嵌入式系統(tǒng)能及時處理數據[1]。在本文設計的數據采集系統(tǒng)中,如采用常規(guī)方法傳輸數據,當采集數據的速度較高時,由于Windows CE系統(tǒng)和采集系統(tǒng)不能同步,可能會造成數據的丟失,使得系統(tǒng)不能及時準確的傳輸數據。為解決這一問題,可以使用采集板上內置的先入先出(FIFO)緩沖器。目前國內關于在Windows CE系統(tǒng)中實現FIFO的文獻還未見報道。對此,本文討論了如何在Windows CE.net平臺上開發(fā)基于FIFO的數據采集板的驅動程序,以保證數據采集數據的準確性。通過試驗將常規(guī)方法與FIFO進行比較,得到較好的結果
2.系統(tǒng)的軟件及硬件平臺
嵌入式系統(tǒng)以其體積小、針對性強、實時性好等特點,在通訊、控制和消費電子等諸多領域得到了廣泛的應用。本設計中的操作系統(tǒng)就是微軟公司推出的專門用于嵌入式系統(tǒng)的實時操作系統(tǒng)Windows CE.net,它是一個32位、多線程、多任務的嵌入式操作系統(tǒng),以其模塊化的結構,良好實時性能力,強大的通信能力和對多種CPU的支持,在各種工業(yè)控制、消費電子等領域擁有較好的應用前景[2]。
數據采集系統(tǒng)的硬件平臺是研華公司的MIC-2000工業(yè)控制計算機,MIC-2000具有良好的機械可靠性和總線擴展能力[3],可用于環(huán)境惡劣的工業(yè)現場。數據采集板是模擬量輸入板MIC-2718,它是一個高增益、高性能的多功能數據采集板,它提供的程序可控增益放大器使用戶可以不用外加電源就可以采集很小的輸入信號,內置的1K字FIFO緩沖區(qū)保證了采集數據的快速性和準確性。MIC-2718為12位100KHz的A/D模塊,支持16路單端或8路差分輸入最大轉換時間為8usec,有軟件觸發(fā)、定時器觸發(fā)和外部觸發(fā)三種方式,MIC-2718的功能框圖如圖1所示。
MIC-2718支持跳線選擇16路單端輸入或8路差動輸入,當選擇單端輸入時每個通道只需要接一根信號線,信號的參考地為板上的公共地[4]。標準連線圖如圖2所示。當選擇雙端輸入時每個通道有2根信號線,MIC-2718測量2個模擬信號的電壓差,如果信號源沒有接地,則稱為“浮”信號源,測量“浮”信號源用圖3所示的接線方法。
3.Windows CE驅動程序
與其他操作系統(tǒng)一樣,Windows CE.net也提供了很多外設的驅動程序,驅動程序將操作系統(tǒng)和設備連接起來,使操作系統(tǒng)能夠識別設備并為應用程序提供設備服務[5]。 但是,對于非常規(guī)硬件設備(或者說對現有的Windows CE應用系統(tǒng)是非常規(guī)的),微軟并沒有提供驅動程序,因此需要設備的硬件廠商提供WndowsCE的驅動,或是使用者自行開發(fā)[6]。目前,還沒有MIC-2718的基于Windows CE.net 4.2版本的驅動程序,因此需要自行開發(fā)。
Windows CE.net驅動程序的2種模式是本機驅動和流接口驅動模式[7]。本機設備驅動適于集成到基于Windows CE.net平臺的設備,如通用LED驅動和電源驅動。流接口驅動模型適用于任何在邏輯上被認為是一個數據源或數據存儲的設備的I/O設備(任何以產生或消耗數據流作為主要功能的外圍設備)[8],因此在采集系統(tǒng)中,WinCE的外圍設備驅動程序一般以流接口驅動程序較多。另外,絕大部分外圍設備驅動程序都可映射為流接口驅動程序。無論驅動程序控制的設備是什么類型,流接口驅動都使用相同的接口并導出一組相同的函數(流接口函數)。
針對本文中數據采集系統(tǒng)和Windows CE中驅動程序模型的特點,本設計采用流接口驅動程序模型。
4. FIFO傳輸方式與常規(guī)方式的實現與比較
FIFO存儲器有兩個端口(輸入口和輸出口),并按先入先出的順序來暫時存放數據。當采用常規(guī)方式進行數據傳輸時,如采集板采樣速度很快,而系統(tǒng)不能及時讀出數據時,新采集的數據會把原來的數據覆蓋,這時系統(tǒng)只能傳遞新的數據,從而造成數據丟失。MIC-2718的FIFO緩沖器可以解決這個問題,FIFO在數據采集卡中作用是緩存數據,解決采集系統(tǒng)中數據丟失的問題,它使采集板在高觸發(fā)率或多任務操作系統(tǒng)(如Windows操作系統(tǒng))中實現可靠穩(wěn)定的高速實時數據采集和傳輸。
MIC-2718在完成第一次A/D轉換后將數據存入MIC-2718的A/D數據寄存器(地址為BASE+0和BASE+1(BASE為MIC- 2718的基地址))和FIFO緩沖區(qū)的第一個存儲單元,下一次A/D轉換時,新的數據會覆蓋A/D數據寄存器中的數據,但是如果緩沖區(qū)的第一個存儲單元中的元素沒有被系統(tǒng)讀取,FIFO會自動將此次轉換的數據存入緩沖區(qū)的下一個存儲單元,上一次的數據仍然保留。每一次轉換的數據都被依次存入FIFO的緩沖區(qū)中,最多可以存儲1024次A/D轉換的數據。轉移數據時,只需讀取FIFO數據寄存器(地址為BASE+23和BASE+24)中的數據,它也是 FIFO緩沖區(qū)中的第一個存儲單元的數據,此時緩沖區(qū)中第一個數據被讀出,下一個存儲單元的數據自動代替它的位置。通過采集板中FIFO的狀態(tài)寄存器(地址為BASE+25)可以判斷FIFO緩沖器當前的狀態(tài)。狀態(tài)寄存器的D0位EF是FIFO為空的標志,D1位HF是FIFO半滿的標志,D2位FF是 FIFO為滿的標志。另外,對BASE+25寄存器的任何寫操作都將清空FIFO緩沖器,EF被置1,HF、FF置0。
Windows CE系統(tǒng)提供的驅動程序開發(fā)包(Windows CE Driver Development Kit,Ceddk)中提供了豐富的驅動程序函數(地址映射、總線訪問、建立DMA緩沖和I/O操作等),可以滿足硬件平臺上任何總線的需要[8],它通常被實現為動態(tài)庫Ceddk.lib文件。由于MIC-2718是基于ISA總線的,可以直接對采集板的地址進行讀寫操作,同時,由于FIFO讀寫操作是相互獨立的,可以同時進行,所以不必考慮采集板與Windows CE系統(tǒng)數據傳輸時的時序配合問題,但是在對FIFO進行讀寫操作時,要判斷FIFO的狀態(tài),只有在緩沖區(qū)中數據未滿時才能寫入,未空時才能讀出[9],以避免一些錯誤的操作。
當數據采集板通過程序控制方式、定時器觸發(fā)方式或外部觸發(fā)方式采集到模擬信號后自動進行A/D轉換后將數據放入A/D數據寄存器并依次寫入FIFO 緩沖區(qū)中,Windows CE.net中的用戶應用程序通過檢測FIFO標志寄存器和MIC-2718狀態(tài)寄存器(地址為BASE+8)的狀態(tài)來確定是否進行了有效的A/D轉換。下面給出在Windows CE開發(fā)平臺上對FIFO進行讀操作的部分代碼,設MIC-2718的基地址為300H:
PUCHAR ioPortBase=MapIoSpace(300H);//將物理地址影射為虛擬地址
BYTE aistatus=READ_PORT_UCHAR(ioPortBase+8);//讀MIC-2718的狀態(tài)寄存器
BYTE status=READ_PORT_UCHAR(ioPortBase+25);//讀FIFO的狀態(tài)寄存器
BYTE ad0,ad1;
if(aistatus&0x10)//若MIC-2718狀態(tài)寄存器的A/D轉換位有效
{
if(status&1!=0)//若FIFO不為空,則讀FIFO
{
ad0=READ_PORT_UCHAR(ioPortBase+23);
ad1=READ_PORT_UCHAR(ioPortBase+24);
}
}
表1 A/D數據寄存器與FIFO數據寄存器的比較
在使用MIC-2718的某一通道分別用常規(guī)方式和FIFO方式對一個持續(xù)變化的電壓源做連續(xù)的信號采集和傳輸時,兩種方式傳輸的數據如表1所示。可以看出,第2和第8組中A/D數據寄存器中的數值是錯誤的,可見使用普通A/D傳輸方式存在數據丟失問題,因此并不能準確傳輸數據,而使用FIFO方式可以保證數據傳輸的完整性。
5.結束語
通過實際測試,在Windows CE的高速數據采集系統(tǒng)中,采用FIFO可以保證數據采集的可靠性,并且編程簡單,程序調試方便,可以極大地提高數據采集板的采樣效率。本文作者的創(chuàng)新點在于在Windows CE.net系統(tǒng)下實現FIFO數據數據傳輸,從而保證了數據傳輸的可靠性。
參考文獻
1. 劉大鵬,馬孝江,基于Windows CE的嵌入式操作系統(tǒng)實時性分析[J],自動化技術與應用,2002(1): 41
2. Microsoft Corporation. About Windows Embedded[EB/OL]. http://www.microsoft.com/windows/embedded/about.mspx,2005
3. Advantech Co,Ltd. PC-Based Modular Industral Computer Designed for Industrial Automation MIC-2000 Modular Industuial Computer Series[Z].1996-5
4. Advantech Co,Ltd. PC-Based Modular Industral Computer Designed for Industrial Automation MIC-2718 High-Performance DAS Module[Z].1998-4
5. 周毓林,寧楊,盧貴強,付林林,Windows CE.net內核定制及應用開發(fā)[M],(北京)電子工業(yè)出版社,2005.2
6. 王少紅,徐小力,李海燕,Windows CE平臺上開發(fā)采集板驅動程序[J],北京機械工業(yè)學院學報,2004,19(3):23
7. 楊軍波,須文波,基于WinCE環(huán)境的CAN適配卡驅動程序的設計與實現[J],微計算機信息,2005,21(12):26
8. 張冬泉,譚南林,王雪梅,焦風川,Windows CE實用開發(fā)技術[M],(北京)電子工業(yè)出版社,2006.4
9. 曾照福,成繼勛,采用FIFO的CAN總線接口卡的設計[J],工礦自動化,2002(9): 33