歷時一周,終于完成對外設寄存器的讀寫試驗,對硬件的了解太少所致。
所用操作系統Windows CE5.0,硬件平臺x86架構的CPU板卡和掛載在PC/104總線的多功能數據采集卡,軟件開發工具EVC4,采用MFC測試。
具體對外設寄存器地址363H進行讀寫。(363H是數據采集卡的DIO控制寄存器的0通道,8位。)
read按鈕為讀取DI寄存器值,表示該數字輸入位電平的高低,測試中,接1.2V電壓/100歐姆電阻時對應位為1。比如接DIO2輸入時,顯示值為4。
write按鈕為寫入DO寄存器數值,范圍是0-255,用來控制DO通道0的八個位輸出,用LED加電阻來點亮顯示輸出。
試驗心得:
(一)如果使用wince自帶的端口操作宏:READ_PORT_UCHAR,WRITE_PORT_UCHAR
1.要拷貝在PB中定制的平臺對應的ceddk.h,pkfuncs.h,toolhelp.h以及ceddk.dll,鏈接ceddk.lib.
2.對應的物理端口和值定義最好采用
#define port 0x363
#define value 1
這樣便于修改并且能避免在類型轉換時丟失數據。由于宏 READ_PORT_UCHAR((unsigned char*)port),WRITE_PORT_UCHAR((unsigned char *)port,(unsigned char)value) 要求的操作對象為uchar型,范圍在0-255之間。
(二)如果采用在evc中嵌入匯編的方式
注意避開系統保留關鍵字,比如OUT要寫成out之類的才能避免編譯器報語法錯誤。
(三)對寄存器的概念加深認識
同一個地址上既可以讀又可以寫時,不能指望寫入的數值能夠讀回來。因為可能是幾個寄存器共用一個物理地址,比如本實驗中,363H就是DI/DO兩個狀態的共享端口.
(1)在硬件系統中,對一個外設寄存器的讀寫實際上是總線信號起區分作用。如果讀信號為低電平時,就讀入對應寄存器的值,與之前在此寄存器寫的值無關。簡單的說,就是同一個物理地址可能是幾個數據寄存器共同使用,用信號來實現復用。
(2)在軟件中,可以是通過物理地址的某個位來區分讀寫的是哪個寄存器.