40楼#
发布于:2002-04-26 10:36
请问plasma:
如果由ALE进行数据/命令切换,是不是P0口随便发一个奇数地址,D12就认为是命令;随便发一个偶数地址,D12就认为是数据呢? |
|
|
41楼#
发布于:2002-04-26 11:29
是这样的.
|
|
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 |
|
|
43楼#
发布于:2002-05-09 23:41
因为SETUP包里有两个字节,看一下D12的datasheet.
|
|
|
44楼#
发布于:2002-05-14 11:00
:o大哥:我爱死你了!!!!
|
|
45楼#
发布于:2002-05-14 13:04
:o大哥:我爱死你了!!!! 那得感谢plasma的无私奉献啊:) |
|
|
46楼#
发布于:2002-05-14 17:16
请教plasma:D12芯片的初始化是在主机的SetAddress前还是后,如果在前D12的D0H命令应写什么地址,如果在后D12没初始化能传送信号吗? :) :) :) :D ;) :( :mad: :o :P
|
|
47楼#
发布于:2002-05-14 22:41
初始化D12见上面的例子,
发出连接USB命令后,PC先读取设备描述符,然后发出设置USB地址SETUP包, 设置USB地址后,进行PC客户驱动与设备初始化。 |
|
48楼#
发布于:2002-05-14 22:59
请教 一下关于用D12进行DMA操作的说明.我看了data sheet 越看越糊.有没有现成的电路 时序 程序可以参考?
听说D12的DMA的BUG.不知道我买到的有没有. |
|
|
49楼#
发布于:2002-05-15 10:09
最近好象见不到plasma来发帖子了;
plasma:你在哪儿?大家都盼着你呢呀 |
|
|
50楼#
发布于:2002-05-16 13:38
快来Download!
D12->C51硬件程序! 在此基础上扩展加快USB应用的步伐! (不含DMA操作) |
|
51楼#
发布于:2002-05-16 18:04
|
|
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中发数据,但是有人告诉我要先装数据再等中断,否则就发不出去。到底哪个对? |
|
|
53楼#
发布于:2002-05-19 11:17
快来Download! 好人哪!!!谢谢你的源程序,我正在尝试手工反汇编你的程序,呵呵,若有问题还请多帮忙~~~~:) 不知你有没有pc端的驱动以及读取usb口送来数据(只要有这一点点功能就行)的程序,可否给一份看一下?谢谢了~~~~~~~~ email: hoverfei@163.net |
|
|
54楼#
发布于:2002-05-19 11:21
:D你这不是DMA操作,第一位是0,第二位是数据长,再是有效数据;所以必须让过前两位,再读有效数据。我想是这样,但不一定对
|
|
55楼#
发布于:2002-05-19 11:32
首先应声明我提供的程序主要是进行测试,具体读出多少,读到哪个缓冲区,由你定。
在D12芯片说明中详细说明了读操作,读出的第一个字节为D12保留,第二个字节是传入的数据包大小,再读出的是真正传入的数据,读入的数据多少应由读出第二个字节决定。 D12向主机传数据,是先写入数据并设置满标志,主机读数据时,D12将已写入的数据送出,并向MCU发出中断,请求装入新数据。所以,写入D12的数据并不马上传出去,相对来说,向主机传数据慢了一个传输周期。 主机向D12传数据,D12收到数据后,向MCU发中断,MCU读出的数据是主机刚发的数据,是即时的。 我在程序中先向PIPE3,PIPE5写入满标志,是为了使这两个IN通道能直接进行读操作,当然第一次读入0长度。 |
|
56楼#
发布于:2002-05-19 14:42
高手你好。我的QQ是2745071,可以与你聊聊关于D12的一些东西吗?
ALE和A0的功能是不是类似的?用了一个,另一个就可以不用了? 我下载的D12讲得不明不白的。 |
|
|
57楼#
发布于:2002-05-19 16:38
快来Download!
D12->C51硬件程序! 在此基础上扩展加快USB应用的步伐! (含DMA操作) |
|
58楼#
发布于:2002-05-19 18:29
是呀!怎样将d12和mcu51通信,关键是谁有它的单片机程序,我诗作毕业客体的,现在手头有许多资料,但是这些程序没看懂。不只有那位先生能救命,给我一点提示,如果能给点源程序就跟好了!!谢谢了!
|
|
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) 不是说命令是奇数地址,数据是偶数地址吗?怎么两个都是偶数? 谢谢大家!! |
|
|