didar
驱动牛犊
驱动牛犊
  • 注册日期2003-05-29
  • 最后登录2003-09-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1521回复:8

说说我的错误――d12

楼主#
更多 发布于:2003-08-07 17:10
setmode正确
clkout可改变
读chip id
得到0010

写缓冲区11,11,11,11,11
读缓冲区
结果得到11,00,00,00,00
int_n始终为低电平
main()
{

          D12_SetMode(0x10,0x05);
          *((unsigned int xdata *)0x0100)=D12_ReadChipID();
          D12_WriteEndpoint(0x02,5,MainEpBuf2);
          j=D12_ReadEndpoint(0x02,9,MainEpBuf);
          D12_WriteEndpoint(0x02,5,MainEpBuf2);
          j=D12_ReadEndpoint(0x02,9,MainEpBuf3);

}

主程序就是为了测试读写寄存器



d12已经折腾我很长时间了
没有什么头绪
就做了个232的通信
说实话
除了速度慢点
没什么不好的
现在整个系统就差usb这块了
clementzhao
驱动大牛
驱动大牛
  • 注册日期2003-05-08
  • 最后登录2009-02-20
  • 粉丝0
  • 关注0
  • 积分28分
  • 威望63点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-08-11 08:45
这位大哥,你写的跟读的虽然是一个端口的,但是有两个缓冲区,对应读和写,分别指向不同的地址!整个usb内部缓冲字节数是:320=16+16+16+16+[64+64]*2。那你说这样做有什么用?只要你发送数据检测正确就行了。
primey
驱动牛犊
驱动牛犊
  • 注册日期2002-02-27
  • 最后登录2005-02-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-08-10 20:21
你写入A BUFFER,读出B BUFFER。
如果USB数据传输,接受BUFFER为空,读操作无意义
4qiuxh
驱动小牛
驱动小牛
  • 注册日期2002-11-27
  • 最后登录2008-04-14
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-08-09 16:14
对于端口缓冲写完指针是指向最后一个!你再去读就会切换到另一个缓冲区。而且这个指针不会复位,也就是你这样做完全没有意义。


好像不是的巴?在下位机还是可以得阿,我就是写数据进去,然后又读出来了的,而且读出来的数就是我写进去的数啊,没有错的。
didar
驱动牛犊
驱动牛犊
  • 注册日期2003-05-29
  • 最后登录2003-09-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-08-08 10:12
那么这个那?

读chip id
得到0010

usb_anywhere
驱动小牛
驱动小牛
  • 注册日期2003-07-29
  • 最后登录2005-11-22
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-08-08 09:42
这是正确的读取端点
UBYTE i, length;
D12_OutPortB(D12_COMMAND, endp);
if(! (D12_InPortB(D12_DATA) & 0x01) )
return 0;

D12_OutPortB(D12_COMMAND, 0xF0);
D12_InPortB(D12_DATA);
length = D12_InPortB(D12_DATA);
if(length > len)
length = len;
for(i=0; i<length; i++)
*(buf+i) = D12_InPortB(D12_DATA);
D12_OutPortB(D12_COMMAND, 0xF2);

所谓的读取数的多少若是在最大封包内则完全由你控制
只要总线上有数据并且总线没有初始化,必然会有此现象

驱网是你们的,也是我们的,归根结底还是大家的!
clementzhao
驱动大牛
驱动大牛
  • 注册日期2003-05-08
  • 最后登录2009-02-20
  • 粉丝0
  • 关注0
  • 积分28分
  • 威望63点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-08-08 08:53
对于端口缓冲写完指针是指向最后一个!你再去读就会切换到另一个缓冲区。而且这个指针不会复位,也就是你这样做完全没有意义。
stanleyhe
驱动牛犊
驱动牛犊
  • 注册日期2003-06-15
  • 最后登录2006-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-08-07 17:25
向端点写入数据后, 数据应该是由硬件传输至外部了吧. 再读回来是否有意义.
didar
驱动牛犊
驱动牛犊
  • 注册日期2003-05-29
  • 最后登录2003-09-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-08-07 17:15
对了
我有个奇怪的问题
我明明写进去的是5个数
测试的时候我把read改成读9个数
竟然也会读出来
11,00,00,00,00,00,00,00,00

会吗?
游客

返回顶部