EM9170工控主板的精簡(jiǎn)ISA總線包括8位數(shù)據(jù)總線、5位地址總線、片選控制線、讀寫(xiě)控制線以及中斷請(qǐng)求線。所提供的評(píng)估開(kāi)發(fā)底板將這些信號(hào)線制定了一個(gè)接口標(biāo)準(zhǔn),采用雙排20芯 IDC插針,用戶可利用精簡(jiǎn)ISA總線進(jìn)行系統(tǒng)功能的擴(kuò)展。本文著重從軟件開(kāi)發(fā)使用的角度來(lái)介紹ISA總線讀寫(xiě)操作的使用方法。
EM9170預(yù)裝WinCE 6.0,WinCE 6.0和WinCE 5.0一個(gè)比較大的區(qū)別就是用戶數(shù)據(jù)區(qū)和內(nèi)核數(shù)據(jù)區(qū)完全分開(kāi),應(yīng)用程序無(wú)法進(jìn)行指定地址的讀寫(xiě)操作,因此在EM9170上ISA總線的是以流式驅(qū)動(dòng)程序的方式來(lái)實(shí)現(xiàn)對(duì)其讀寫(xiě)的操作,ISA總線設(shè)備的名稱為: _T(“ISA1:”),通過(guò)標(biāo)準(zhǔn)的CreateFile()函數(shù)打開(kāi)該設(shè)備,對(duì)ISA總線數(shù)據(jù)的讀寫(xiě),EM9170的ISA驅(qū)動(dòng)程序提供了兩種方式。一種是單個(gè)字節(jié)的數(shù)據(jù)讀寫(xiě),一種是基于同一ISA地址的連續(xù)讀寫(xiě)操作。針對(duì)這兩種方式分別定義以下兩種數(shù)據(jù)結(jié)構(gòu):
typedef struct
{
DWORD dwCmd; // = 0: ISA讀操作, = 1: ISA寫(xiě)操作
DWORD dwSeg; // = 0: ISA_CS0#, = 1: ISA_CS1#
DWORD dwOffset; // ISA地址偏移量:0 – 31
DWORD dwValue; // 數(shù)據(jù)值,只有低8位有效
} ISA_BUS_ACCESS, *PISA_BUS_ACCESS;
typedef struct
{
DWORD dwCmd; // 保留,恒為0
DWORD dwSeg; // = 0: ISA_CS0#, = 1: ISA_CS1#
DWORD dwOffset; // ISA地址偏移量:0 – 31
PBYTE pBuf; // 數(shù)據(jù)
DWORD dwLength; // 數(shù)據(jù)長(zhǎng)度,以字節(jié)為單位
} ISA_BUS_BLOCK_ACCESS, *PISA_BUS_BLOCK_ACCESS;
第一種是單個(gè)字節(jié)的數(shù)據(jù)讀寫(xiě)操作。應(yīng)用程序通過(guò)調(diào)用相應(yīng)的DeviceIoControl( )函數(shù)進(jìn)行ISA數(shù)據(jù)讀寫(xiě)操作,所帶參類型為ISA_BUS_ACCESS。如:
BOOL ISA_Read( HANDLE hISA_DIO, int nSeg, unsigned int nOffset, unsigned char *pRdValue )
{
ISA_BUS_ACCESS isabus;
isabus.dwCmd = 0;
isabus.dwSeg = nSeg;
isabus.dwOffset = nOffset;
isabus.dwValue = 0;
if (!DeviceIoControl(hISA_DIO, // file handle to the driver
ISA_IOCTL_READ_WRITE, // I/O control code
&isabus, // in buffer
sizeof(ISA_BUS_ACCESS), // in buffer size
pRdValue, // out buffer
sizeof(UCHAR), // out buffer size
NULL, // pointer to number of bytes returned
NULL)) // ignored (=NULL)
{
return FALSE;
}
return TRUE;
}
第二種是基于相同ISA地址的連續(xù)讀寫(xiě)操作。應(yīng)用程序通過(guò)調(diào)用標(biāo)準(zhǔn)的函數(shù)ReadFile() 、WriteFile( ),所帶參類型為ISA_BUS_BLOCK_ACCESS,如:
ISA_BUS_BLOCK_ACCESS isa_block;
isa_block.dwCmd = 0; // 恒為0
isa_block.dwLength = 16; // 讀寫(xiě)數(shù)據(jù)塊長(zhǎng)度,以字節(jié)為單位
isa_block.dwSeg = 1; // 使用ISA_CS1#
isa_block.pBuf = Buf; // 讀寫(xiě)數(shù)據(jù)buffer指針
bRet = ReadFile( hISA, (LPVOID)&isa_block, sizeof(ISA_BUS_BLOCK_ACCESS), &dwLen, NULL );
bRet = WriteFile( hISA, (LPVOID)&isa_block, sizeof(ISA_BUS_BLOCK_ACCESS), &dwLen, NULL );
經(jīng)過(guò)測(cè)試在EM9170板卡上,第一種單個(gè)字節(jié)ISA數(shù)據(jù)讀寫(xiě)周期為12us;第二種連續(xù)讀寫(xiě)方式其周期為380ns。用戶可根據(jù)實(shí)際情況進(jìn)行選擇,相關(guān)的測(cè)試參考代碼可參考英創(chuàng)提供開(kāi)發(fā)光盤(pán)中的相關(guān)資料。
-
嵌入式主板
+關(guān)注
關(guān)注
7文章
6081瀏覽量
34942
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論