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