jeosph
驱动中牛
驱动中牛
  • 注册日期2001-04-19
  • 最后登录2006-08-08
  • 粉丝0
  • 关注0
  • 积分96分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
阅读:1306回复:0

9052 write_io,write_mem

楼主#
更多 发布于:2002-11-28 21:14
我用9052做了一块pci->isa的转接卡.
_______
|      |-----write_memory(8bit) 即pin_cs0
|      |-----write_Io    (16bit)
|______|------read_Io    (16bit)
对一个内存写数据,对I/O口读数据.由于我不需要地址线,我只想用这三个信号线作为外部设备的片选信号.
由于内存,i/o的申请必须满足一定的数量,所以尽管我不用地址线,我也申请了256个内存空间.8个i/0空间.

于是我的 LAS0RR = ff,ff,ff,f8
        LAS1RR = ff,ff,ff,f9
        
        LAS0BA = 00,00,00,01
        LAS1BA = 00,00,00,01
        
        CS0BASE= 00,00,00,81
        CS1BASE= 00,00,00,05
        
这些空间的申请操作系统也认可了.操作函数如下
对于写i/o, write_port_ushort(Io_address,Data);
对于内存,mm_address = MmMapIoSpace(*,*,*);
然后 write_register_uchar(mm_address,data)
现在问题来了,无论我是写i/o,还是写内存 write_memory和write_io
两根分属于不同性质的信号线上会同时 active.

实在没有办法 于是我在mm_Address 的基础上凭空加了一个 10
即 mm_Address +=10;
于是再次写内存write_register_uchar(mm_address,data)
发现只有write_memory信号active ,write_io 无效
但写i/O 时仍旧是write_memory和write_io会同时active.

按理说,这是不应该的啊? (问题1?)  

好了,或许是因为i/o空间与memory空间的基址重叠(都是0).
可是我将改动LAS0BA和CS0BASE
LAS0BA = FF,24,00,01 (基址=0x24000)
CS0BASE =FF,02,40,81 0x24000/0x100= 0x240
数据这样改动后,系统依旧可以成功分配memory和 i/o
但是,我用write_register_uchar(mm_address,data) 写
内存是却无论如何无无法是write_memory信号active.

这是怎么会事啊? (问题2)
我该如何解决这个问题啊? 谢谢您了!


游客

返回顶部