libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1136回复:6

读16位ISA端口的问题,好奇怪!

楼主#
更多 发布于:2003-08-28 18:51
我的的ISA板,在2000系统下,我用DS写的驱动,进行单纯的16位端口的读操作。却发生了奇怪的现象:
插上板子,在驱动的分发例程里,我从5个端口读数据,每个端口读一个字,程序如下:
miorange0.inw(1,pbuffer,1);
miorange0.inw(2,pbuffer+1,1);
miorange0.inw(3,pbuffer+2,1);
miorange0.inw(4,pbuffer+3,1);
miorange0.inw(5,pbuffer+4,1);
miorange0是的端口对象,1,2,3,4,5是硬件的偏移地址,pbuffer是存放数据的缓冲区。上面程序应当是没有错误的吧!
用逻辑分析仪测量总线的读信号IOR,确发现了8个IOR信号,我明明是读了5个字,怎么会发现8个IOR?总线上的IOCS16是被置低的。

我把板子拔掉,只对板子上的ISA插槽操作,运行应用和驱动,发现了10个IOR信号,我把总线上的IOCS16接地,IOR变成了8个。和插板子的时候一样,怎么回事???

很着急!


我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-08-28 20:52
怎么没人来回答??
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
grant
驱动老牛
驱动老牛
  • 注册日期2001-05-14
  • 最后登录2007-04-13
  • 粉丝0
  • 关注0
  • 积分350分
  • 威望35点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-08-29 09:40
1 2 3 4 对应什么东西?
应该是0x300, 0x302, 0x304这种吧?
不要是0x300, 0x301, 0x302...
助人乃快乐之本 有人给分就更快乐了 :-)
grant
驱动老牛
驱动老牛
  • 注册日期2001-05-14
  • 最后登录2007-04-13
  • 粉丝0
  • 关注0
  • 积分350分
  • 威望35点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-08-29 09:41
我等下发个传真给你。
助人乃快乐之本 有人给分就更快乐了 :-)
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-08-29 11:23
1 2 3 4 对应什么东西?
应该是0x300, 0x302, 0x304这种吧?
不要是0x300, 0x301, 0x302...


今天上午又做了实验:
miorange0.inw(1,pbuffer,1);
miorange0.inw(2,pbuffer+1,1);
miorange0.inw(3,pbuffer+2,1);
miorange0.inw(4,pbuffer+3,1);
miorange0.inw(5,pbuffer+4,1);
miorange0.inw(6,pbuffer+4,1);
miorange0.inw(7,pbuffer+4,1);
miorange0.inw(8,pbuffer+4,1);
miorange0.inw(9,pbuffer+4,1);
miorange0.inw(10,pbuffer+4,1);
我的基地址是0x300,我的IOCS16没接地。
发现
1 对应:0x301, 0x302
2 对应:0x302, 0x303
3 对应:0x304, 0x303
4 对应:0x304, 0x305
5 对应:0x305, 0x306
6 对应:0x306, 0x307
7 对应:0x308, 0x307
8 对应:0x308, 0x309
9 对应:0x309, 0x310
10 对应:0x310, 0x311




我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
zxw_top
驱动大牛
驱动大牛
  • 注册日期2003-07-18
  • 最后登录2020-04-26
  • 粉丝0
  • 关注0
  • 积分1116分
  • 威望2537点
  • 贡献值0点
  • 好评度202点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2003-08-29 17:12
你发现的8个io操作不一定是你的板子的,有可能是其他的设备的
iocs16为低表示当前数据周期是16位的
如果你是8位数据总线宽度,iocs16不要为低
如果你是16位的,iocs16在你的数据操作期间才能为低,不要一直拉低
,这样系统会认为对其他的设备操作也是16位的
最好不要在2000下面调试,因为2000禁止直接对io端口的访问
最好在win98或者dos下面调试,直接用bc调试,用inpw,outpw是16位的
写出,读入操作,你先在98或者dos下调试好了,再编2000的驱动程序,
很多开发都是这样
建议你先把单个io操作调试好了,再调试批处理
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-08-29 20:15
特别感谢grant的提醒和热心帮助和斑竹的回复!
问题就是出再了地址方面,我的程序执行的时候,应用读偶数地址的,不应当操作奇数地址。也就是说16位的传输是占用两个地址的。
放分!
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
游客

返回顶部