huiming
驱动小牛
驱动小牛
  • 注册日期2001-05-05
  • 最后登录2009-07-09
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
40楼#
发布于:2002-04-26 10:36
请问plasma:
    如果由ALE进行数据/命令切换,是不是P0口随便发一个奇数地址,D12就认为是命令;随便发一个偶数地址,D12就认为是数据呢?
 
驿动的心!放飞的心!勇敢的心!
plasma
驱动小牛
驱动小牛
  • 注册日期2002-02-19
  • 最后登录2008-02-27
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望5点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
41楼#
发布于:2002-04-26 11:29
是这样的.
takaya
驱动小牛
驱动小牛
  • 注册日期2002-02-10
  • 最后登录2006-05-16
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望3点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
42楼#
发布于:2002-05-09 16:59
有几个问题.
code char USBStringDescription1[] =
{
sizeof(USBStringDescription1),  ***这里会报一个警告,说反回了0长度
        0x03,
        \'C\',0,\'y\',0,\'p\',0,\'r\',0,\'e\',0,\'s\',0,\'s\',0,\' \'
};

编译时有几个函数会报
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
    SYMBOL:  SETPROTOCOL
    MODULE:  usbfunc.obj (USBFUNC)
    ADDRESS: 012CH

在SETUP_read中
     XmtBuff.b[0] = D12_DATA;
     XmtBuff.b[1] = D12_DATA;
   for(i=0;i<8;i++)
    {
       XmtBuff.b = D12_DATA;
    }
为什么0 1要重复读取?

timer1@163.net
QQ:2745071
我是只可爱的小猫咪,高枕无忧................................. QQ:2745071
ysfc51
驱动牛犊
驱动牛犊
  • 注册日期2001-10-01
  • 最后登录2009-12-27
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
43楼#
发布于:2002-05-09 23:41
因为SETUP包里有两个字节,看一下D12的datasheet.
千山千幅画 一步一重天
niatxu
驱动牛犊
驱动牛犊
  • 注册日期2002-03-26
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
44楼#
发布于:2002-05-14 11:00
 :o大哥:我爱死你了!!!!
liumda
驱动小牛
驱动小牛
  • 注册日期2002-01-23
  • 最后登录2012-07-16
  • 粉丝0
  • 关注0
  • 积分76分
  • 威望48点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
45楼#
发布于:2002-05-14 13:04
:o大哥:我爱死你了!!!!


那得感谢plasma的无私奉献啊:)
You Happy,So I Happy!
niatxu
驱动牛犊
驱动牛犊
  • 注册日期2002-03-26
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
46楼#
发布于:2002-05-14 17:16
请教plasma:D12芯片的初始化是在主机的SetAddress前还是后,如果在前D12的D0H命令应写什么地址,如果在后D12没初始化能传送信号吗? :) :) :) :D ;) :( :mad: :o :P
plasma
驱动小牛
驱动小牛
  • 注册日期2002-02-19
  • 最后登录2008-02-27
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望5点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
47楼#
发布于:2002-05-14 22:41
初始化D12见上面的例子,
发出连接USB命令后,PC先读取设备描述符,然后发出设置USB地址SETUP包,
设置USB地址后,进行PC客户驱动与设备初始化。
takaya
驱动小牛
驱动小牛
  • 注册日期2002-02-10
  • 最后登录2006-05-16
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望3点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
48楼#
发布于:2002-05-14 22:59
请教 一下关于用D12进行DMA操作的说明.我看了data sheet 越看越糊.有没有现成的电路 时序 程序可以参考?
听说D12的DMA的BUG.不知道我买到的有没有.
我是只可爱的小猫咪,高枕无忧................................. QQ:2745071
liumda
驱动小牛
驱动小牛
  • 注册日期2002-01-23
  • 最后登录2012-07-16
  • 粉丝0
  • 关注0
  • 积分76分
  • 威望48点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
49楼#
发布于:2002-05-15 10:09
最近好象见不到plasma来发帖子了;
plasma:你在哪儿?大家都盼着你呢呀
You Happy,So I Happy!
plasma
驱动小牛
驱动小牛
  • 注册日期2002-02-19
  • 最后登录2008-02-27
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望5点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
50楼#
发布于:2002-05-16 13:38
快来Download!
D12->C51硬件程序!
在此基础上扩展加快USB应用的步伐!

(不含DMA操作)
plasma
驱动小牛
驱动小牛
  • 注册日期2002-02-19
  • 最后登录2008-02-27
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望5点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
51楼#
发布于:2002-05-16 18:04
编译软件:
请到
北京革新科技
下载
E2000W
COMP51V6
 
takaya
驱动小牛
驱动小牛
  • 注册日期2002-02-10
  • 最后登录2006-05-16
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望3点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
52楼#
发布于:2002-05-19 09:41
void read_out()
{
    char i;
    D12_COMMAND = XmtBuff.out;// 选择端点0(指针指向0位置)
    D12_COMMAND = 0xf0;// 读标准控制码
    XmtBuff.b[0] = D12_DATA;
    XmtBuff.b[1] = D12_DATA;
    for(i=0;i<8;i++)
    {
       XmtBuff.b = D12_DATA;
    }
    D12_COMMAND = 0xf2;// 清 OUT 缓冲区
}
为什么在read_out函数中,不算是哪一个EP来的数据都只读出2+8个?而且为什么前两个要重复读一次?
总的来说,您的程序是先收到D12的中断后再向FIFO中发数据,但是有人告诉我要先装数据再等中断,否则就发不出去。到底哪个对?
我是只可爱的小猫咪,高枕无忧................................. QQ:2745071
hoverfei
驱动小牛
驱动小牛
  • 注册日期2002-04-19
  • 最后登录2010-07-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
53楼#
发布于:2002-05-19 11:17
快来Download!
D12->C51硬件程序!
在此基础上扩展加快USB应用的步伐!

(不含DMA操作)
 

好人哪!!!谢谢你的源程序,我正在尝试手工反汇编你的程序,呵呵,若有问题还请多帮忙~~~~:)
不知你有没有pc端的驱动以及读取usb口送来数据(只要有这一点点功能就行)的程序,可否给一份看一下?谢谢了~~~~~~~~
email: hoverfei@163.net
有朋自远方来,不亦乐乎?
niatxu
驱动牛犊
驱动牛犊
  • 注册日期2002-03-26
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
54楼#
发布于:2002-05-19 11:21
 :D你这不是DMA操作,第一位是0,第二位是数据长,再是有效数据;所以必须让过前两位,再读有效数据。我想是这样,但不一定对
plasma
驱动小牛
驱动小牛
  • 注册日期2002-02-19
  • 最后登录2008-02-27
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望5点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
55楼#
发布于:2002-05-19 11:32
首先应声明我提供的程序主要是进行测试,具体读出多少,读到哪个缓冲区,由你定。

在D12芯片说明中详细说明了读操作,读出的第一个字节为D12保留,第二个字节是传入的数据包大小,再读出的是真正传入的数据,读入的数据多少应由读出第二个字节决定。

D12向主机传数据,是先写入数据并设置满标志,主机读数据时,D12将已写入的数据送出,并向MCU发出中断,请求装入新数据。所以,写入D12的数据并不马上传出去,相对来说,向主机传数据慢了一个传输周期。

主机向D12传数据,D12收到数据后,向MCU发中断,MCU读出的数据是主机刚发的数据,是即时的。

我在程序中先向PIPE3,PIPE5写入满标志,是为了使这两个IN通道能直接进行读操作,当然第一次读入0长度。
takaya
驱动小牛
驱动小牛
  • 注册日期2002-02-10
  • 最后登录2006-05-16
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望3点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
56楼#
发布于:2002-05-19 14:42
高手你好。我的QQ是2745071,可以与你聊聊关于D12的一些东西吗?
ALE和A0的功能是不是类似的?用了一个,另一个就可以不用了?
我下载的D12讲得不明不白的。
我是只可爱的小猫咪,高枕无忧................................. QQ:2745071
plasma
驱动小牛
驱动小牛
  • 注册日期2002-02-19
  • 最后登录2008-02-27
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望5点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
57楼#
发布于:2002-05-19 16:38
快来Download!
D12->C51硬件程序!
在此基础上扩展加快USB应用的步伐!

(含DMA操作)
liewenrose
驱动牛犊
驱动牛犊
  • 注册日期2002-04-25
  • 最后登录2002-06-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
58楼#
发布于:2002-05-19 18:29
是呀!怎样将d12和mcu51通信,关键是谁有它的单片机程序,我诗作毕业客体的,现在手头有许多资料,但是这些程序没看懂。不只有那位先生能救命,给我一点提示,如果能给点源程序就跟好了!!谢谢了!
hoverfei
驱动小牛
驱动小牛
  • 注册日期2002-04-19
  • 最后登录2010-07-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
59楼#
发布于:2002-05-20 00:33
void USB_submit(void)
{

    if(XmtBuff.pNum>XmtBuff.wrLength)
{
XmtBuff.b[6] = XmtBuff.wrLength;
}else
{
XmtBuff.b[6] = XmtBuff.pNum;
}
    D12_COMMAND = XmtBuff.in;// 选择 IN 端点(指针指向0位置)
    D12_COMMAND = 0xf0;// 写缓冲区
    D12_DATA = 0x00;
    D12_DATA = XmtBuff.b[6];

    for(XmtBuff.b[7]=0;XmtBuff.b[7]<XmtBuff.b[6] ;XmtBuff.b[7]++)
    {
        ist = *(XmtBuff.p++);
        D12_DATA = ist;
    }
    XmtBuff.wrLength -= XmtBuff.b[6];
    D12_COMMAND = 0xfa;// 设置 IN 缓冲区有效(满标志)
}
对以上USB_submit函数有几点不明向大家请教:

XmtBuff.pNum和XmtBuff.wrLength的具体含义是什么?

为什么要对两者大小进行比较并取其中短的?

“XmtBuff.wrLength -= XmtBuff.b[6]”这句话的作用是什么?不加有什么后果?

为什么set_address、set_configuration、set_interface等一些子程序中最后要调用USB_submit?他们的XmtBuff.wrLength是0啊?

在d12c51.c中,有如下定义:
#define D12_COMMAND (*(unsigned char xdata *)0x8000)
#define D12_DATA    (*(unsigned char xdata *)0x0000)
不是说命令是奇数地址,数据是偶数地址吗?怎么两个都是偶数?

谢谢大家!!
有朋自远方来,不亦乐乎?
游客

返回顶部