基于Windows CE的SPI接口驅動(dòng)程序設計



需要說(shuō)明的是,在本程序中使用了CEDDK中MmMapIoSpace庫函數,故另需在頭文件中添加#include和#pragma comment(lib,ceddk.lib)。至此,g_SPIReg在其他的驅動(dòng)實(shí)現函數中就可以調用,直接讀寫(xiě)其指向的寄存器的代碼即可完成相關(guān)的操作。還需要實(shí)現的函數有:SPI_Deinit、SPI_Read、SPI_write、SPI_Seek、SPI_Open、SPI_Close、SPI_IOCntrol。限于篇幅,本文僅給出驅動(dòng)初始化的代碼。
3.3 驅動(dòng)與應用程序的通信設計
在Windows CE中,用戶(hù)模式下每個(gè)進(jìn)程與其他進(jìn)程所占有的內存空間被虛擬內存機制隔離,進(jìn)程間無(wú)法實(shí)現直接互訪(fǎng)。在驅動(dòng)程序和應用程序通信過(guò)程中,驅動(dòng)程序位于device.exe的進(jìn)程空間中,由于上述原因,驅動(dòng)程序向應用程序發(fā)起的單向通信存在困難。通常的解決方法是在內核空間中共享同步對象,建立消息隊列或者通過(guò)指針映射來(lái)完成。上述方法都無(wú)法回避進(jìn)程間的數據復制過(guò)程,因而只適用于少量的數據傳輸。對于大量的數據或者實(shí)時(shí)性要求較高的情況,可以在虛擬地址為Ox4200 0000~0x7fff ffff的空間中建立命名的內存映射來(lái)實(shí)現內存共享,從而能夠避免數據在進(jìn)程空間中的復制。相關(guān)的API為CreateFileMapping和MapView()fFile。
3.4 驅動(dòng)程序的封裝和安裝
驅動(dòng)接口函數編寫(xiě)完后將其接口以dll的形式導出,再編寫(xiě)一個(gè)簡(jiǎn)單的注冊表文件,指明驅動(dòng)安裝的路徑、前綴以及索引。至此驅動(dòng)程序設計工作就完成了,將驅動(dòng)及注冊表添加到當前的平臺中即可。
結 語(yǔ)
本文詳細介紹了Platform Builder下SPI接口驅動(dòng)程序設計以及驅動(dòng)程序同應用程序交互的實(shí)現。驅動(dòng)例程已經(jīng)成功地應用于基于nRF2401的嵌入式系統無(wú)線(xiàn)通信當中,具有很高的參考價(jià)值。
評論