snakehl
驱动牛犊
驱动牛犊
  • 注册日期2001-07-29
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:3085回复:13

PDIUSBD12:40分绝对值得!

楼主#
更多 发布于:2001-10-08 17:26
首先请问斑竹:怎么给分?我好散分。
下面是我的一段程序(很简单的,只是验证能够在设备枚举的时候能够收到来自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
欢迎做答。

最新喜欢:

Jkw_DevJkw_De...
snakehl
驱动牛犊
驱动牛犊
  • 注册日期2001-07-29
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-10-08 19:48
我做了一个实验:
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中的写和读都是正确的,即读写的时序是正确的。那么我上面的问题是什么原因了?
wwffllf
驱动小牛
驱动小牛
  • 注册日期2001-07-14
  • 最后登录2004-11-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2001-10-08 20:07
你应该试试12M等频率,
因为D12本身不用配置就输出4M的信号
我告诉你们,我可是身经百战了。见的多了,驱动开发,哪个版我没灌过? 你们要知道,驱动的▲版,那比你们不知道厉害到哪里去了,我在那谈笑风声。 你们有一个好,就是什么话题都灌。但是灌来灌去的问题,都 too simple, sometimes naive! 懂了没有? 所以说灌水啊,关键是要提高自己的知识水平。 哦,你们啊,不要想弄个大坑,re上十大,再羞辱一番?你们啊.... naive !! 改编于《江core发飙》
snakehl
驱动牛犊
驱动牛犊
  • 注册日期2001-07-29
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2001-10-08 20:45
我试了,12M可以输出。
wwffllf
驱动小牛
驱动小牛
  • 注册日期2001-07-14
  • 最后登录2004-11-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2001-10-10 10:32
我觉得你的CS接的不太好,
当你读写外部数据时,
RD和WR信号与CS不对应,
并且容易引起总线冲突。
你那总线分时复用是什么意思?
我怎么看着不像是
[wwffllf 编辑于 2001-10-10 10:37]
我告诉你们,我可是身经百战了。见的多了,驱动开发,哪个版我没灌过? 你们要知道,驱动的▲版,那比你们不知道厉害到哪里去了,我在那谈笑风声。 你们有一个好,就是什么话题都灌。但是灌来灌去的问题,都 too simple, sometimes naive! 懂了没有? 所以说灌水啊,关键是要提高自己的知识水平。 哦,你们啊,不要想弄个大坑,re上十大,再羞辱一番?你们啊.... naive !! 改编于《江core发飙》
snakehl
驱动牛犊
驱动牛犊
  • 注册日期2001-07-29
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2001-10-10 14:27
我说的总线分时复用是说的MCU采用总线的方式我PDIUSBD12通信,即相对I/O方式而言的。
那是不是如果采用I/0方式,应该按照下面的接法:
PDIUSBD12的ALE----GND
PDIUSBD12的CS-----MCU的P1。6
PDIUSBD12的SUSPEND-----MCU的P1。7
PDIUSBD12的WR,RD-----MCU的WR,RD
PDIUSBD12的A0--------MCU的P1。4
如果采用总线方式,那又该怎么接?
wwffllf
驱动小牛
驱动小牛
  • 注册日期2001-07-14
  • 最后登录2004-11-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2001-10-10 16:17
我认为主要是CS应该接P2口或者用138译码器输出一个信号,
因为当CS为低即选中片子之后,
这个片子就占据了总线,
别的芯片就不能用总线了,
尤其是下一部你还得取程序进行别的处理,
那么取程序还得用总线,
就引起了总线冲突,
如果用P2选择片子,
那么对此片输出数据,
需要MOVX @DPTR,A此时产生一个短暂不超过一个指令周期的低脉冲就把数据发到片子内
然后就释放总线了,
如果用P1则是一直中占用总线,
等你把你以后的几句程序执行完清除P1后才真正释放总线。
不知我说的对不对?
实话跟你说我的片子也没有调好,
我比你还差,
连最起码的频率都控制不了,
你说不用配置别的仅一个SETMODE可以控制频率吗?
能不能告诉我你怎么配置输出频率的?
希望能共同探讨一下


[wwffllf 编辑于 2001-10-10 16:21]
[wwffllf 编辑于 2001-10-10 16:32]
我告诉你们,我可是身经百战了。见的多了,驱动开发,哪个版我没灌过? 你们要知道,驱动的▲版,那比你们不知道厉害到哪里去了,我在那谈笑风声。 你们有一个好,就是什么话题都灌。但是灌来灌去的问题,都 too simple, sometimes naive! 懂了没有? 所以说灌水啊,关键是要提高自己的知识水平。 哦,你们啊,不要想弄个大坑,re上十大,再羞辱一番?你们啊.... naive !! 改编于《江core发飙》
snakehl
驱动牛犊
驱动牛犊
  • 注册日期2001-07-29
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2001-10-10 19:13
我现在正想象你说的试一试,就是CS该用P2口的一根线来选择,不过还是采用总线方式通信。
我不知道你的硬件是如何连接的?如果你是和我说的连接一样的话,用我上面的程序就可以用示波器检测到12M时钟输出。或者你将你的电路图给我发一份我看看。(bijunzhang@263.net)
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 ;12
lcall D12Write
setb ea ;open interrupt
setb ex0
mainloop
   nop
   jmp  mainloop

Delay_500us:
push 0
mov 0,#0h
d500:
djnz 0,d500
pop 0
ret

Delay_100ms:
push 0
mov 0,#200
d100: call Delay_500us
djnz 0,d100
pop 0
ret

D12Write:
movx @dptr,a
nop
nop
nop
ret

D12Command:
mov dptr,#01h
lcall D12Write
dec dpl
ret

D12GetStatus:
lcall D12Command
D12Read:
movx a,@dptr
nop
nop
nop
ret

如果你的采用P2进行片选的话,你就修改其中的DPTR就可以了。
我想是可以观察到12M输出的,如果不行,那就是你硬件的问题了。
wwffllf
驱动小牛
驱动小牛
  • 注册日期2001-07-14
  • 最后登录2004-11-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2001-10-11 19:48
请问在D12Command:
mov dptr,#01h
中为什么DPTR为01H,
你的DPTR是由什么决定的?
我告诉你们,我可是身经百战了。见的多了,驱动开发,哪个版我没灌过? 你们要知道,驱动的▲版,那比你们不知道厉害到哪里去了,我在那谈笑风声。 你们有一个好,就是什么话题都灌。但是灌来灌去的问题,都 too simple, sometimes naive! 懂了没有? 所以说灌水啊,关键是要提高自己的知识水平。 哦,你们啊,不要想弄个大坑,re上十大,再羞辱一番?你们啊.... naive !! 改编于《江core发飙》
snakehl
驱动牛犊
驱动牛犊
  • 注册日期2001-07-29
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2001-10-11 21:15
我是看了以前斑竹和别人的讨论知道是这样的,但是为什么要这样我也不是很清楚。
因为我是采用总线形式所以在写命令的时候dptr,只是关心最低位是不是1,在读和写数据的时候只是关心最低位是不是0而已。
而且我的片选现在该用P1。1,P1。2,P1。3进行选通74138进行译码来对PDIUSBD12进行片选,但是以前有的波形现在也出不来。
不知道是什么问题?
我可以将我的电路图和测试程序告诉你,你帮我看看有什么问题。
wwffllf
驱动小牛
驱动小牛
  • 注册日期2001-07-14
  • 最后登录2004-11-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2001-10-11 21:23
好的,
我的地址:wwffllff@263.net
我告诉你们,我可是身经百战了。见的多了,驱动开发,哪个版我没灌过? 你们要知道,驱动的▲版,那比你们不知道厉害到哪里去了,我在那谈笑风声。 你们有一个好,就是什么话题都灌。但是灌来灌去的问题,都 too simple, sometimes naive! 懂了没有? 所以说灌水啊,关键是要提高自己的知识水平。 哦,你们啊,不要想弄个大坑,re上十大,再羞辱一番?你们啊.... naive !! 改编于《江core发飙》
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2001-10-12 11:57
[QUOTE]原本由 snakehl 发表
[B]我是看了以前斑竹和别人的讨论知道是这样的,但是为什么要这样我也不是很清楚。
因为我是采用总线形式所以在写命令的时候dptr,只是关心最低位是不是1,在读和写数据的时候只是关心最低位是不是0而已。
而且我的片选现在该用P1。1,P1。2,P1。3进行选通74138进行译码来对PDIUSBD12进行片选,但是以前有的波形现在也出不来。
不知道是什么问题?
我可以将我的电路图和测试程序告诉你,你帮我看看有什么问题。 [/B][/QUOTE]
dptr:
1: command to D12
0: data to d12
very simple!
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
snakehl
驱动牛犊
驱动牛犊
  • 注册日期2001-07-29
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2001-10-12 17:15
你可以参考斑竹设计的板子。
wwffllf
驱动小牛
驱动小牛
  • 注册日期2001-07-14
  • 最后登录2004-11-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2001-10-12 20:09
你给我发的资料我都看了,
跟我的设计思路是一样的,
到现在还不明白为什么出不来波形?
麻烦你把你出来波型的电路图和程序发给我让我参考一下可以吗?
谢谢!
我告诉你们,我可是身经百战了。见的多了,驱动开发,哪个版我没灌过? 你们要知道,驱动的▲版,那比你们不知道厉害到哪里去了,我在那谈笑风声。 你们有一个好,就是什么话题都灌。但是灌来灌去的问题,都 too simple, sometimes naive! 懂了没有? 所以说灌水啊,关键是要提高自己的知识水平。 哦,你们啊,不要想弄个大坑,re上十大,再羞辱一番?你们啊.... naive !! 改编于《江core发飙》
游客

返回顶部