szhighlight
驱动牛犊
驱动牛犊
  • 注册日期2004-11-08
  • 最后登录2004-11-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1185回复:17

wxl_50685330请教!

楼主#
更多 发布于:2004-11-24 19:58
wxl_50685330请教一个问题:
在isa总线上挂了一片ram,处理器采用x86,跑wince4。1,isa的io端口操作都调通了,但对ram的操作有问题,ram映射在内存的e0000-effff段,我用了TransbusAddrToVirtual将0x80cd0000映射到虚拟地址,在对虚拟地址操作,但用示波器看isa的smemw始终为高,不知wince下对isa是否还有什么其它的操作?
部分代码:
PHYSICAL_ADDRESS InAddr;
ULONG AddressSpace;
PVOID pGpioPtr;
UCHAR DATA;
unsigned char *pData;
AddewssSpace=0X0;
TransBusAddrToVirtual(Isa,0,InAddr,1024,&AddressSpace,&pGpioPtr)
pData=(unsigned char *)pGpioPtr;
*pData=data;
运行后,总线上的/smemw不起作用。
还发现一个问题,就是对映射后的地址(内存)写一个数,再读出来
始终是0xff,我怀疑写错了地址,用mmmapiospace及VirtualAlloc,
VirtualCopy结果都一样,不知什么原因?
请指教!谢谢!

szhighlight
驱动牛犊
驱动牛犊
  • 注册日期2004-11-08
  • 最后登录2004-11-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-11-24 20:08
补充一点:
对映射的虚拟地址写一个数,再读出来是对的,但用相同的物理地址
映射后,再读出来始终是0xff。
非常感谢!
szhighlight
驱动牛犊
驱动牛犊
  • 注册日期2004-11-08
  • 最后登录2004-11-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-11-25 10:22
还请wxl_50685330帮帮忙,已经搞了几天了,交不了差啊。
备注:我的应用程序是通过网口拷贝到目标板上的,编译是加的标准的sdk,不是定制的sdk,不知有没有关系,我觉得驱动主要是ddk。
谢谢!
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-11-25 13:21
慢慢来,慢慢来,我都觉得离胜利不远了:)

你的isa是用cpld扩展的?

你说:“对映射的虚拟地址写一个数,再读出来是对的,但用相同的物理地址映射后,再读出来始终是0xff。”
虚拟地址指的是什么?物理地址又是什么?

是映射的0x80cd0000后操作正常了吗?
根据地的兄弟们,团结就是力量
szhighlight
驱动牛犊
驱动牛犊
  • 注册日期2004-11-08
  • 最后登录2004-11-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-11-25 14:01
终于等到你了,谢谢wxl_50685330!
isa总线是直接从x86的数据线,地址线,读写信号线拉出来的,中间没接任何接口芯片。
我的操作是这样的:
接上次的。
unsigned short f;
if(TransBusAddrToVirtualIsa,0,InAddr,1024,&AddressSpace,&rawbuf))
{


pData=(unsigned char *)rawbuf;
*pData=0x8f;
f=*pData;    //f的值是0X8F

          MmUnmapIoSpace( rawbuf, 0x01 );


}
else
{
AfxMessageBox(_T("hhhh"));
}
if(TransBusAddrToVirtual(Isa,0,InAddr,0x01,&AddressSpace,&rawbuf))
{


pData=(unsigned char *)rawbuf;
f=*pData;
str.Format(_T("%d"),f);  //f的值是0XFF
           MmUnmapIoSpace( rawbuf, 1024 );


}
else
{
AfxMessageBox(_T("hhhh"));
}
两次f的值不同。
szhighlight
驱动牛犊
驱动牛犊
  • 注册日期2004-11-08
  • 最后登录2004-11-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-11-25 14:02
终于等到你了,谢谢wxl_50685330!
isa总线是直接从x86的数据线,地址线,读写信号线拉出来的,中间没接任何接口芯片。
我的操作是这样的:
接上次的。
unsigned short f;
if(TransBusAddrToVirtualIsa,0,InAddr,1024,&AddressSpace,&rawbuf))
{


pData=(unsigned char *)rawbuf;
*pData=0x8f;
f=*pData;    //f的值是0X8F

          MmUnmapIoSpace( rawbuf, 1024 );


}
else
{
AfxMessageBox(_T("hhhh"));
}
if(TransBusAddrToVirtual(Isa,0,InAddr,0x01,&AddressSpace,&rawbuf))
{


pData=(unsigned char *)rawbuf;
f=*pData;
str.Format(_T("%d"),f);  //f的值是0XFF
           MmUnmapIoSpace( rawbuf, 1024 );


}
else
{
AfxMessageBox(_T("hhhh"));
}
两次f的值不同。
szhighlight
驱动牛犊
驱动牛犊
  • 注册日期2004-11-08
  • 最后登录2004-11-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-11-25 14:09
我怀疑,地址映射到了一个空的地址区域(此区域并不是ram的地址区)。
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-11-25 14:19
...你是说执行两次,第一次正确,第二次不行?不是地址问题了?你第二次为什么给length是1呢?
根据地的兄弟们,团结就是力量
szhighlight
驱动牛犊
驱动牛犊
  • 注册日期2004-11-08
  • 最后登录2004-11-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-11-25 14:28
应该还是1024,帖上去的时候出了点问题。
确实像你说的,第一次是对的,第二次不对,
但我看了两次映射后的虚拟地址都是0x70000啊。
非常感谢!
szhighlight
驱动牛犊
驱动牛犊
  • 注册日期2004-11-08
  • 最后登录2004-11-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-11-25 17:47
有做了这样的试验:
变量设置如上,

if(TransBusAddrToVirtual(Isa,0,InAddr,1024,&AddressSpace,&rawbuf))
{


pData=(unsigned char *)rawbuf;
*pData=0x8f;
pData++;
*pData=0x0;
pData--;  
f=*pData;
str.Format(_T("%d"),f);
AfxMessageBox(str);      //f为0x0

pData++;
f=*pData;
str.Format(_T("%d"),f);
AfxMessageBox(str);     //f为0xff
MmUnmapIoSpace( rawbuf, 1024 );


}

唉!越来越迷茫!
请点拨点拨!谢谢!
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-11-26 08:56
我怀疑你的地址映射有问题。问一下:
在函数
TransBusAddrToVirtual(Isa,0,InAddr,1024,&AddressSpace,&rawbuf)中,InAddr的值是多少? 我觉得应该是InAddr=0x80cd0。你试试看!
Come on, let us drive the world.
szhighlight
驱动牛犊
驱动牛犊
  • 注册日期2004-11-08
  • 最后登录2004-11-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-11-26 10:52
非常感谢wwei_wang,正如您所说的,现在可以对内存正常读写了,
为什么这样?是因为要4k对齐吗?pb的help没有解释。
但isa总线的/SMEMW写信号还是不起作用,但这根信号线是和cpu的
写信号直接相连的啊,是不是要为之专门做个驱动,而不能直接在应用程序操作?
再次感谢!因为有你和wxl_50685330这样的热心人,才使这个网人气火爆。



szhighlight
驱动牛犊
驱动牛犊
  • 注册日期2004-11-08
  • 最后登录2004-11-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-11-26 11:33
问题解决了,谢谢各位!
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2004-11-26 13:32
昨天不好意思,突然连不上了,搞定了?厉害:)


作虚拟映射的地址确实要4k对齐,帮助上是没有。对了,你说些信号没有反应是不是你示波器频率调得太低了?或者你的示波器频率不够,你写一个死循环不停地读写再测一下呢,不可能没有的啊,要不怎么会写进去呢:)

有逻辑笔吗用这个试试

good luck
根据地的兄弟们,团结就是力量
szhighlight
驱动牛犊
驱动牛犊
  • 注册日期2004-11-08
  • 最后登录2004-11-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2004-11-26 14:17
谢谢!
不好意思,信号串的电阻虚焊,第一次做wince驱动,说实话挺狼狈的,而且觉得支持不是很好,多亏了这个网,还有网上热心的朋友,
以后有问题还要不耻下问哦。
有空到深圳请你吃饭,喝咖啡。
下午不想上班了,准备出去玩玩。
再次感谢!
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2004-11-26 15:59
哈哈哈哈哈,行,一定要不耻“下问”

哈哈,开个玩笑:)


那兄弟们就等下次到深圳找兄弟你了喔:)

根据地的兄弟们,团结就是力量
szhighlight
驱动牛犊
驱动牛犊
  • 注册日期2004-11-08
  • 最后登录2004-11-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2004-11-27 10:55
没问题,把mail留给我,把手机号给你。
再请教一下,4k对齐映射后的虚拟地址,应该不需要左移12bit把4k补齐吧,直接对映射后的地址操作或加个偏移量操作就行了吧?不知x86在这块的机制是怎样的?
谢谢!
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2004-11-29 13:24
恩,映射后的地址直接用,偏移自己算就行,good luck
根据地的兄弟们,团结就是力量
游客

返回顶部