阅读:1061回复:5
问大家一个问题
请问:对网卡进行Remote DMA写和读的时候,地址0x4000-0x7fff与处理器的地址怎么样影映射。假设我设置8019AS的DMA START PAGE 寄存器是0x46,那么我从这页往里面写入2K的数据,并且相对于我的CPU来说我的8019AS的地址空间是0x8000-0xffff,那么该怎样设置地址呢?
|
|
沙发#
发布于:2003-03-21 01:15
0x8000-0xffff???系统空间还是局部空间?
|
|
板凳#
发布于:2003-03-21 09:20
0x8000-0xffff,是CPU对8019AS的寻址空间,尽管我只需要32个寄存器地址。我选择的是0xC000-0xffff。假设我想作DMA读和写,且我的开始寄存器是0x46,那么我想从这页开始读和写,那么我的起始地址是什么,一定不是0x4600,因为他不在0x8000-0xffff之间。
请问我该怎样确定地址呢?谢先。 |
|
地板#
发布于:2003-03-21 11:59
是独立的系统还是基于PC的板卡?
如果是基于PC的板卡,是什么接口?PCI?ISA? 把问题说清楚,让回答的人打字越少越好 |
|
地下室#
发布于:2003-03-21 12:05
ISA接口。现在数据是完全读出来了,但是地址错位。举列如;想从起始地址为0x4c00开始读,但实际上从0x4B1D开始读的。
不好意思 ,给你们添麻烦了。 |
|
5楼#
发布于:2003-03-22 01:09
ISA的寻址能力是20位,前640K是系统基本内存,从0XA0000开始是显卡内存,所以不是你没理解就是你没说清。
看了半天猜测如下: 1)0x8000-0xffff是实模式下的段地址,实际地址是0x80000-0xffff0 2)0x8000-0xffff不是真正的地址而是指你的内存可以安排在这段区间内。你可以把他安排在0xc000或0xd000,0xe000有东西,0xf000是系统BIOS。 3)开始寄存器是0x46估计是0x80000+46*0x1000=0xc600,就是物理地址是0xc6000 4)实模式下:物理地址+偏移(0x4000-0x7fff)就可以了。 5)保护模式下(WINDOWS):把0xc6000影射到逻辑地址 6)用逻辑地址+偏移(0x4000-0x7fff)就可以了。 |
|