阅读:2638回复:9
哪里有PDIUSBD12的时序图?
请问:
哪里有PDIUSBD12芯片的时序图?我是采用总线分时复用的方式进行通信的,就是A0是高电平,地址和数据线分时复用。但是我想看看PDISUBD12的时序图,不知道那里有? |
|
沙发#
发布于:2001-10-09 22:15
请问哪儿有PHILIPS的EPP的C程序
也给我一个:snakehl@263.net 谢谢了 |
|
板凳#
发布于:2001-10-09 11:42
下面是我的一段程序(很简单的,只是验证能够在设备枚举的时候能够收到来自PC的8字节的setup包就可以了,mcs51编写,用ICES-G3仿真机调试,很古老的一种),我怎么看都找不到原因在哪里,搞的我一个国庆过的很不爽。问题在下面的程序段中我有提示的地方。那位大虾能够搞定,我绝对奉送30分。
;----------------------------------------------------------- ;usb standard command packge ;-----------------------------------------------------------bmrequesttype equ 20h brequest equ 21h wvalue0 equ 22h wvalue1 equ 23h windex0 equ 24h windex1 equ 25h wlength0 equ 26h wlength1 equ 27h ;-----------------------------------------------------------;d12 signal pin map CS bit p1.6 PinSuspend bit p1.7 ;-----------------------------------------------------------; main.asm: main program ;-----------------------------------------------------------org 00h ljmp startup org 03h ljmp Int0Break org 30h startup: clr ea ;close interrupt mov sp,#55h ;set stack clr rs0 clr rs1 ;select register clr It0 ;low to trigger clr Ex0 ;close interrupt clr CS ;pdiusbd12 chip lcall Delay_100ms mov a,#0f3h ;set mode lcall D12Command mov a,#00010110b lcall D12Write mov a,#01000010b lcall D12Write setb ea ;open interrupt setb ex0 Mainloop: nop ljmp Mainloop ;-----------------------------------------------------------;Delay_500us ;-----------------------------------------------------------Delay_500us: push 0 mov 0,#0h d500: djnz 0,d500 pop 0 ret ;-----------------------------------------------------------;Delay_100ms ;-----------------------------------------------------------Delay_100ms: push 0 mov 0,#200 d100: call Delay_500us djnz 0,d100 pop 0 ret ;-----------------------------------------------------------;D12Write ;-----------------------------------------------------------D12Write: movx @dptr,a nop nop nop ret ;-----------------------------------------------------------;D12Command ;-----------------------------------------------------------D12Command: mov dptr,#01h lcall D12Write dec dpl ret ;-----------------------------------------------------------;D12GetStatus ;-----------------------------------------------------------D12GetStatus: lcall D12Command D12Read: movx a,@dptr nop nop nop ret ;-----------------------------------------------------------;Int0Break ;-----------------------------------------------------------Int0Break: mov a,#0f4h ;read register lcall D12GetStatus ;read one_byte lcall FindInterruptSource reti FindInterruptSource: jb acc.7,SuspendChange jb acc.6,BusReset jb acc.0,Ep0Out jb acc.1,Ep0In jb acc.2,Ep1Out jb acc.3,Ep1In jb acc.4,Ep2Out jb acc.5,Ep2In SuspendChange: BusReset: ; setb PinSuspend ret Ep1Out: mov a,#42h ljmp D12GetStatus Ep2Out: mov a,#44h ljmp D12GetStatus Ep2In: mov a,#45h ljmp D12GetStatus Ep1In: mov a,#43h ljmp D12GetStatus Ep0In: mov a,41h ljmp D12GetStatus Ep0Out: mov a,#40h ;read last transaction lcall D12GetStatus ;这里读出的一个字节是21h,说明是setup包,而且传送成功了,我想不知道这能不能说明至少我的硬件电路应该没有问题,否则是收不到数据的 mov a,#0 ;lcall D12Command ;select endpoint0 lcall D12GetStatus ;我采取了跟踪:select endpoint0后读出的一个字节是01h,说明端点0是满的,然后连续读出10个字节,可是读出的字节是:c0,c0,80h,80h,80h,80h,80h,80h,80h,80h,或者有时候读出的都是c0,这个跟在设备枚举时host发送的GET_DESCRIPTOR相差实在是太远了。我觉得我的程序已经到了很简单的程度,实在是找不到办法。 我的硬件连接:p1.6----PDIUSBD12的cs,p1.7----PDIUSBS12的suspend,AT89C52的ALE------PDIUSB12的ALE,PDIUSBD12的rd,wr和AT89C52的rd,wr相连。PDISUBD12的A0通过一个10k的电阻接到电源。PDIUSBD12由外部提供电源,不由PC提供。即:通信采用的是总线分时复用方式 mov r0,#bmrequesttype mov r7,#10 mov a,#0f0h lcall D12Command ;read buffer CopySD: lcall D12Read mov @r0,a inc r0 djnz r7,CopySD mov a,#0f1h ;acknowledge lcall D12Command mov a,#0f2h ;clear buffer lcall D12Command mov a,#01h ;select endpoint1 lcall D12Command mov a,#0f1h lcall D12Command ret 欢迎做答。 我做了一个实验: org 00h ljmp startup org 03h ljmp Int0Break org 30h startup: clr ea ;close interrupt mov sp,#55h ;set stack clr rs0 clr rs1 ;select register clr It0 ;low to trigger clr Ex0 ;close interrupt clr CS ;pdiusbd12 chip lcall Delay_100ms mov a,#0f3h ;set mode lcall D12Command mov a,#00010110b lcall D12Write mov a,#01001011b ;4M lcall D12Write setb ea ;open interrupt setb ex0 只是执行上面的程序段,用示波器观察看到了PDIUSBD12的clkout脚输出的是4M的波形,我想这至少说明我对PDIUSBD12的setmode中的写和读都是正确的,即读写的时序是正确的。那么我上面的问题是什么原因了? 而且12M可以输出。 |
|
地板#
发布于:2001-10-09 10:03
请问哪儿有PHILIPS的EPP的C程序啊,
怎么我的EPPHAL.C里面什么也没有? 只有一个空的void dma_start(PIO_REQUEST pio)? 哪位大侠给指点一下或给我发一个有关EPP的程序 wwffllff@263.net 谢谢了 |
|
|
地下室#
发布于:2001-10-09 09:29
对阿,A0怎么能常高
应该接到一个i/o口上 |
|
5楼#
发布于:2001-10-08 21:47
看不明白你的硬件连线
另外你的程序我也用过,没调通。后来改用philips的EPP示例的c程序,用Keil C编译后,通过了。 读写调试可将时钟设为4MHz以外的其他频率,用示波器一测便知。 |
|
6楼#
发布于:2001-10-07 09:24
我的一段程序代码
下面是我的一段程序代码: 不知道按照时序对不对: read interrupt register:只是读中断寄存器的第一字节 mov a,#0f4h clr p1.6 lcall D12GetStatus setb p1.6 (PDIUSBD12的片选) D12Write: movx @dptr,a nop nop nop nop ret D12Command: mov dptr,#01h lcall D12Write dec dpl ret D12GetStatus: lcall D12Command D12Read: movx a,@dptr nop nop nop nop ret |
|
7楼#
发布于:2001-10-04 20:27
应该有哦!
总线分时复用时序和一般的RAM读写差不多,只是D12要求一写一读间要有500ns以上的间隔。 A0应该是不可能恒为高的。 [wzr 编辑于 2001-10-04 20:29] |
|
8楼#
发布于:2001-10-04 17:26
我下载了,但是上面没有。
|
|
9楼#
发布于:2001-10-04 14:38
到philips的网站,有d12的datasheet
|
|