如何获得PCI卡的IO地址 点击:2552 | 回复:3



gongkongedit

    
  • 精华:1099帖
  • 求助:0帖
  • 帖子:14392帖 | 54470回
  • 年度积分:0
  • 历史总积分:622
  • 注册:2008年9月08日
发表于:2002-09-13 14:42:00
楼主
请教各位高手,如何在纯DOS环境下,获取某片PCI数据采集卡的基地址?我知道有些卡自带的函数有这一功能,但我不想用这些函数,该怎么办?



李侃

  • 精华:22帖
  • 求助:0帖
  • 帖子:30帖 | 813回
  • 年度积分:0
  • 历史总积分:1015
  • 注册:2002年2月27日
发表于:2002-09-12 11:17:00
1楼
给你一些代码做为参考。 网上其实可以找到对PCI设备编程的例子。 实在找不到的话,就看看Linux自带的设备驱动原代码。

李侃

  • 精华:22帖
  • 求助:0帖
  • 帖子:30帖 | 813回
  • 年度积分:0
  • 历史总积分:1015
  • 注册:2002年2月27日
发表于:2002-09-12 11:21:00
2楼
int find_pci_device(word device_id, word vendor_id, word index, byte *bus_number, byte *device_and_function) { int ret_status; /* Function Return Status */ word ax, bx, flags; /* Temporary variables to hold register values */ /* Load entry registers for PCI BIOS */ _CX = device_id; _DX = vendor_id; _SI = index; _AH = PCI_FUNCTION_ID; _AL = FIND_PCI_DEVICE; /* Call PCI BIOS Int 1Ah interface */ geninterrupt(0x1a); /* Save registers before overwritten by compiler usage of registers */ ax = _AX; bx = _BX; flags = _FLAGS; /* First check if CARRY FLAG Set, if so, error has occurred */ if ((flags & CARRY_FLAG) == 0) { /* Get Return code from BIOS */ ret_status = HIGH_BYTE(ax); if (ret_status == SUCCESSFUL) { /* Assign Bus Number, Device & Function if successful */ if (bus_number != NULL) { *bus_number = HIGH_BYTE(bx); } if (device_and_function != NULL) { *device_and_function = LOW_BYTE(bx); } } } else { ret_status = NOT_SUCCESSFUL; } return (ret_status); }

gongkongedit

  • 精华:1099帖
  • 求助:0帖
  • 帖子:14392帖 | 54470回
  • 年度积分:0
  • 历史总积分:622
  • 注册:2008年9月08日
发表于:2002-09-13 14:42:00
3楼
谢谢李斑竹,待我好好消化一下

热门招聘
相关主题

官方公众号

智造工程师