<strike id="kiyse"></strike>
  • <tr id="kiyse"></tr>
  • <strike id="kiyse"></strike><samp id="kiyse"><tbody id="kiyse"></tbody></samp>
    <strike id="kiyse"><s id="kiyse"></s></strike>
    <tr id="kiyse"></tr>
    <noframes id="kiyse"><code id="kiyse"></code></noframes>
    <th id="kiyse"></th>
    <samp id="kiyse"></samp>
  • <th id="kiyse"><s id="kiyse"></s></th>
  • EM335x主板ISA總線的高級應(yīng)用

     2015-7-15              

      對工控主板EM335x精簡ISA擴(kuò)展總線基本讀寫操作的介紹,已包含在EM335x編程手冊中。本文將介紹在Windows CE平臺上,通過精簡ISA總線進(jìn)行數(shù)據(jù)塊讀寫的方法。所謂數(shù)據(jù)塊讀寫,是指一次API調(diào)用對一個地址端口讀寫多個數(shù)據(jù)的操作。數(shù)據(jù)塊讀寫能有效提高數(shù)據(jù)讀寫的效率,在數(shù)據(jù)采集傳輸中有廣泛的應(yīng)用。

     

      要對ISA總線進(jìn)行讀寫,首先需要打開設(shè)備文件“ISA1:”如下:

     

      打開ISA文件
      HANDLE hISA;
      hISA = CreateFile(_T('ISA1:'), // name of device
        GENERIC_READ|GENERIC_WRITE, // desired access
        FILE_SHARE_READ|FILE_SHARE_WRITE, // sharing mode
        NULL, // security attributes (ignored)
        OPEN_EXISTING, // creation disposition
        FILE_FLAG_RANDOM_ACCESS, // flags/attributes
        NULL); // template file (ignored)

     

      數(shù)據(jù)塊讀寫功能是通過設(shè)備驅(qū)動的DeviceIoControl來完成的,需要用到以下數(shù)據(jù)結(jié)構(gòu):
      typedef struct
      {
        PBYTE pReadBuf; // ISA讀數(shù)據(jù)buffer, 只能一個buffer有效
        PBYTE pWriteBuf; // ISA寫數(shù)據(jù)buffer, 只能一個buffer有效
        DWORD dwDataLength; // length of data in byte
        DWORD dwDataPortOfs; // 讀寫的起始地址 = 0x00 – 0xFF
        DWORD dwInc; // = 0: 固定地址, > 0: 讀寫后地址自動增加
      } ISA_BLOCK_INFO, *PISA_BLOCK_INFO;

     

      在上述數(shù)據(jù)結(jié)構(gòu)中:

      pReadBuf為進(jìn)行讀操作時的數(shù)據(jù)buffer,讀操作具體為8-bit數(shù)據(jù)讀。注意:數(shù)據(jù)結(jié)構(gòu)中,pReadBuf和pWrietBuf只能有一個有效。

      pWriteBuf為進(jìn)行寫操作時的數(shù)據(jù)buffer,寫操作具體為8-bit數(shù)據(jù)讀。注意:數(shù)據(jù)結(jié)構(gòu)中,pReadBuf和pWrietBuf只能有一個有效。

      dwDataPortOfs為讀寫的端口地址,范圍為0x00 – 0xFF。

      dwDataLength為本數(shù)據(jù)塊讀或?qū)懙淖止?jié)數(shù)。

      dwInc為每次讀寫后,地址的自動增量,dwInc = 0:表示固定地址讀寫,dwInc > 0: 表示每次讀寫后,地址會自動增加dwInc,作為下一次的讀寫地址。當(dāng)?shù)刂烦^0xFF時,會折回到地址0x00。

     

      如果要進(jìn)行單一數(shù)據(jù)塊讀寫功能,只需定義一個ISA_BLOCK_INFO結(jié)構(gòu)變量,如BlockInfo,并按照應(yīng)用需求填寫相應(yīng)的參數(shù)。然后就可調(diào)用系統(tǒng)API進(jìn)行設(shè)置了:

      ISA_BLOCK_INFO BlockInfo;

      memset(&BlockInfo, 0, sizeof(ISA_BLOCK_INFO));
      // 填寫輸入?yún)?shù)值BlockInfo...

     

      對讀操作,直接調(diào)用標(biāo)準(zhǔn)讀函數(shù):
      DWORD dwNbBytesRead = 0;
      BOOL bRet = ReadFile(hISA, // 打開“ISA1:”返回的Handler
        &BlockInfo, // 輸入數(shù)據(jù)結(jié)構(gòu)指針
        sizeof(ISA_BLOCK_INFO), // 數(shù)據(jù)結(jié)構(gòu)Size
        &dwNbByteRead, NULL);

     

      對寫操作則為:
      DWORD dwNbBytesWritten = 0;
      BOOL bRet = WriteFile(hISA, // 打開“ISA1:”返回的Handler
        &BlockInfo, // 輸入數(shù)據(jù)結(jié)構(gòu)指針
        sizeof(ISA_BLOCK_INFO), // 數(shù)據(jù)結(jié)構(gòu)Size
        &dwNbByteWritten, NULL);

     

      如果要執(zhí)行混合的數(shù)據(jù)塊的讀寫操作,則需要定義ISA_BLOCK_INFO數(shù)組,并根據(jù)實際應(yīng)用填寫數(shù)組參數(shù)。例如需要進(jìn)行3組數(shù)據(jù)塊讀寫,實現(xiàn)代碼如下:
      ISA_BLOCK_INFO BlockInfo[3];
      DWORD dwTotalSize = sizeof(ISA_BLOCK_INFO) * 3;

      memset(BlockInfo, 0, dwTotalSize);
      // 填寫輸入?yún)?shù)值BlockInfo... 

      BOOL bRet = DeviceIoControl(hISA, // 打開“ISA1:”返回的Handler
        0, // 無需定義命令碼,置為0
        (LPVOID)BlockInfo, // 塊讀寫數(shù)據(jù)結(jié)構(gòu)變量指針
        dwTotalSize, // 整個結(jié)構(gòu)數(shù)組的size 
        NULL, 0, // 不使用這組參數(shù) 
        NULL, NULL);

      

      上述操作的主要特點是提高訪問ISA總線的效率,因為每次調(diào)用驅(qū)動程序API,都會有一個幾微秒的系統(tǒng)開銷。對多字節(jié)的數(shù)據(jù)塊讀寫,這樣的開銷應(yīng)用程序就需要注意,否則會發(fā)現(xiàn)CPU的負(fù)載不合理的升高。


      相關(guān)閱讀:《ESM335x工控主板ISA總線DMA數(shù)據(jù)傳輸》

    欧美黑人欧美精品刺激| 国内精品久久久久影视| 精品无码综合一区| 97久久精品人妻人人搡人人玩| 亚洲精品无码专区久久久| 国产精品白浆在线观看无码专区| 亚洲精品无码久久久久久久| 国产99视频精品免视看9| 国产免费无遮挡精品视频| 亚洲精品国精品久久99热| 国产精品成人久久久| 国产A级毛片久久久精品毛片 | 久久亚洲精品视频| 69精品久久久久| 国内少妇偷人精品视频免费| 亚洲国产精品成人AV无码久久综合影院 | 91精品国产高清久久久久久91| 成品人和精品人的区别在哪里| 亚洲A∨午夜成人片精品网站| 国产精品无码亚洲一区二区三区| 精品久久久噜噜噜久久久| 影院无码人妻精品一区二区| 国产精品videossexohd| 无码国产精品一区二区免费模式| 国产亚洲精品精品国产亚洲综合| 污污网站国产精品白丝袜| 国产精品四虎在线观看免费| 欧美精品久久天天躁| 国产精品成人不卡在线观看| 精品国产福利盛宴在线观看| 久草这里只有精品| 国产精品jlzz视频| 国产精品久久久久久影视| 99亚洲乱人伦aⅴ精品| 无码人妻精品一区二区蜜桃| 国产精品夜间视频香蕉| 久热中文字幕在线精品免费| 538精品在线视频| 亚洲国产综合精品| 精品国产乱码久久久久久呢 | 91亚洲精品麻豆|