激情综合丁香-激情综合六月-激情综合婷婷亚洲图片-激情综合图区-激情综合网五月

EM335x主板ISA總線的高級應用

 2015-7-15              

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

 

  要對ISA總線進行讀寫,首先需要打開設備文件“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)

 

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

 

  在上述數據結構中:

  pReadBuf為進行讀操作時的數據buffer,讀操作具體為8-bit數據讀。注意:數據結構中,pReadBuf和pWrietBuf只能有一個有效。

  pWriteBuf為進行寫操作時的數據buffer,寫操作具體為8-bit數據讀。注意:數據結構中,pReadBuf和pWrietBuf只能有一個有效。

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

  dwDataLength為本數據塊讀或寫的字節數。

  dwInc為每次讀寫后,地址的自動增量,dwInc = 0:表示固定地址讀寫,dwInc > 0: 表示每次讀寫后,地址會自動增加dwInc,作為下一次的讀寫地址。當地址超過0xFF時,會折回到地址0x00。

 

  如果要進行單一數據塊讀寫功能,只需定義一個ISA_BLOCK_INFO結構變量,如BlockInfo,并按照應用需求填寫相應的參數。然后就可調用系統API進行設置了:

  ISA_BLOCK_INFO BlockInfo;

  memset(&BlockInfo, 0, sizeof(ISA_BLOCK_INFO));
  // 填寫輸入參數值BlockInfo...

 

  對讀操作,直接調用標準讀函數:
  DWORD dwNbBytesRead = 0;
  BOOL bRet = ReadFile(hISA, // 打開“ISA1:”返回的Handler
    &BlockInfo, // 輸入數據結構指針
    sizeof(ISA_BLOCK_INFO), // 數據結構Size
    &dwNbByteRead, NULL);

 

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

 

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

  memset(BlockInfo, 0, dwTotalSize);
  // 填寫輸入參數值BlockInfo... 

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

  

  上述操作的主要特點是提高訪問ISA總線的效率,因為每次調用驅動程序API,都會有一個幾微秒的系統開銷。對多字節的數據塊讀寫,這樣的開銷應用程序就需要注意,否則會發現CPU的負載不合理的升高。


  相關閱讀:《ESM335x工控主板ISA總線DMA數據傳輸》

主站蜘蛛池模板: 成年网址网站在线观看| 免费一级黄色录像影片| 爱爱网站免费| 草草在线播放| 亚洲国产精品美女| keez在线观看视频免费| 在线欧美成人| 欧美一区中文字幕| 国产一级淫片免费大片| 国产精品视频一区二区三区不卡 | 日韩精品一区在线观看| 成年人在线免费网站| 欧美成人黄色网| 国产区精品视频| 精品国产高清a毛片无毒不卡| 国产无限制自拍| 免费人成黄页在线观看日本| 亚洲成人在线播放| 伊人激情网| 日本免费乱人伦在线观看| 亚洲在线播放视频| 欧洲免费极品videos| 国产成人综合精品一区| 国产精品视频一区二区三区不卡 | 国产精品久久一区二区三区| 成人在线免费视频播放| 国内在线观看| 日韩精品免费一区二区| 亚洲精品日韩专区在线观看| 一级特黄特黄毛片欧美的| 久久久免费观看视频| 女人被狂躁视频网站免费| 日韩免费高清一级毛片在线| 手机免费看片网站| 护士精品一区二区三区| 欧美一区二区三区性| 欧美叼嘿| 国产欧美精品一区二区色综合| 夜夜爱成人免费网站| 精品成人免费视频| 97香蕉|