阅读:1357回复:0
9052 write_io,write_mem
我用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) 我该如何解决这个问题啊? 谢谢您了! |
|