4589|8

74

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

双口RAM读写 [复制链接]

环境:WINCE 5.0
工具:EVC 4.0
总线:ISA

请问除了使用WINDRIVER等第三方工具,是否可以访问ISA板卡的双口RAM?

最新回复

有人知道没?  详情 回复 发表于 2007-12-3 10:27
点赞 关注

回复
举报

77

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
既然3方工具可以实现,那编程肯定也能实现,不过物理地址的内存读写一般是写驱动程序实现的。
我只会windows,没用过wince。
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
尝试用VirtualAlloc、VirtualCopy、VirtualFree,但是VirtualCopy后得到的内容并不是双口RAM的内容。
在网上搜双口RAM的读写,没有看到什么有用的信息。

哪位做过这方面的高手指导一二?
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

4
 
既然3方工具可以实现,那编程肯定也能实现

说的对

若知道了,这个第三放的是如何实现的,那方法也就找到了

没弄过,但肯定应有方法的
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

5
 
   首先看你的ISA是什么方式接到CPU的。可能是IO方式(只能用特殊指令访问,X86平台),也可能是内存映射方式。
   VirtualCopy需要知道正确的物理地址。但是这个物理地址和双口RAM地址仍然存在一个转换的问题,要视硬件而定。
    你可以用HalTranslateBusAddress函数来转换一下ISA地址为物理地址。
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

6
 
请教ningxin了,如何调用HalTranslateBusAddress呢?

  1. #define ISA_BUS_ADDR (0x000D0000)
  2. #define ISA_MEM_SIZE (0x1000)

  3. char szBuff[ISA_MEM_SIZE];
  4. PVOID pMem = NULL;
  5. DWORD dwPhysAddr = NULL;

  6. pMem = VirtualAlloc(0, ISA_MEM_SIZE, MEM_RESERVE, PAGE_NOACCESS);
  7. if (pMem)
  8. {
  9.         if (HalTranslateBusAddress())/* 此处 */
  10.                 if (VirtualCopy(pMem, (PVOID)dwPhysAddr, ISA_MEM_SIZE, PAGE_READWRITE | PAGE_NOCACHE | PAGE_PHYSICAL))
  11.                         memcpy(szBuff, pMem, ISA_MEM_SIZE);
  12.         VirtualFree(pMem, ISA_MEM_SIZE, MEM_RELEASE);
  13. }
复制代码
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

7
 
这样调用对吗?
HalTranslateBusAddress(Isa, 1, (PHYSICAL_ADDRESS)ISA_BUS_ADDR, NULL, (PPHYSICAL_ADDRESS)&dwPhysAddr)
 
 
 

回复

55

帖子

0

TA的资源

一粒金砂(初级)

8
 
修改了一下,但是HalTranslateBusAddress转换出来的物理地址只是将ISA_BUS_ADDR放在低32位,高32位为空。

  1. #define ISA_BUS_ADDR (0x000D0000)
  2. #define ISA_MEM_SIZE (0x1000)

  3. char szBuff[ISA_MEM_SIZE];
  4. PVOID pMem = NULL;
  5. PHYSICAL_ADDRESS paIsaBusAddr, paIsaPhysAddr;

  6. pMem = VirtualAlloc(0, ISA_MEM_SIZE, MEM_RESERVE, PAGE_NOACCESS);
  7. if (pMem)
  8. {
  9.         paIsaBusAddr.QuadPart = ISA_BUS_ADDR;
  10.         if (HalTranslateBusAddress(Eisa, (ULONG)1, paIsaBusAddr, NULL, &paIsaPhysAddr))
  11.                 if (VirtualCopy(pMem, (PVOID)&(paIsaPhysAddr.u.LowPart), ISA_MEM_SIZE, PAGE_READWRITE | PAGE_NOCACHE | PAGE_PHYSICAL))
  12.                                 memcpy(szBuff, pMem, ISA_MEM_SIZE);
  13.         VirtualFree(pMem, ISA_MEM_SIZE, MEM_RELEASE);
  14. }
复制代码
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

9
 
有人知道没?
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表