|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
本帖最后由 kalelshey 于 2012-11-27 21:28 编辑
前段时间测试9054读写的时候没有好好仔细测试,当时只想着能够写进去一个数据就好了,没想到现在问题这么严重,不说废话,说重点:
在进行了一次读写一个32位的数据之后,需要进行更多的数据读写,由于数据量并没有很大,所以暂时考虑不用DMA,于是我采用了PlxBusIopWrite这个函数
void CP2Dlg::OnButton1()
{
U32 Value[10];
Value[0]=0x1;
Value[1]=0x6;
Value[2]=0x7;
Value[3]=0x7;
Value[4]=0x7;
Value[5]=0x7;
Value[6]=0x7;
Value[7]=0x3;
Value[8]=0x7;
Value[9]=0x7;
PlxBusIopWrite (hDevice,IopSpace0,0x8000024,false,(U32*)&Value,sizeof(Value),BitSize32);
}
可是发现时序图不对(test2是时钟,test6是ads,test5是den,见图)
于是又换了一种赋值方式(仅仅为了测试,忽略所赋的值吧),
void CP2Dlg::OnButton9()
{
U32 i;
U32 Value[10];
for (i=0;i<=9;i++)
{Value=0x1+i;
}
PlxBusIopWrite (hDevice,IopSpace0,0x8000024,false,(U32*)&Value,sizeof(Value),BitSize32);
}
可是结果还是一样的。
于是我思考,这里面出现了两种不同的读写模式,而且是在非DMA模式下。在前两个ads下,9054只传送一个数据,而在第三个ads下,9054传送了8个数据,这属于突发读写了,可见,在我没有开启DMA模式下,它自动地进行了突发读写。(从我接触到的资料来看,一般的主板是不支持突发读写的,也就是说当我没有设置PCI9054向CPU请求权限的时候,应该每次读写都是每个lhold中1个ads+1个den,就像前两例那样的single write)。
所以我的问题是,有没有这样一种方法,可以判别,9054的local bus执行的是single write 还是burst write? |
-
test2是时钟,test6是ads,test5是den
|