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

PDIUSBD12设备枚举错误!

楼主#
更多 发布于:2001-09-03 19:21
急问:
   我的MCU是采用的AT89C52,是采用总线方式我PC通信的。开发的时候,我是采用爱思的仿真机,在设备枚举的时候,我采用了跟踪的办法。我发现:ReadLastTransaction后,读出的数值是:0x21h,着说明是setup packet包,而且上次传输成功了,但是在接下来SelectEndpoint后,读出的数值总是0x00,说明Endpoint0(就是端点0)是空,按理说,既然从ReadLastTransaction读出内容可以确定是setup packet,但是在endpoint0中怎么没有来自PC机的8字节的命令内容呢?
我的这段程序如下:希望各位大虾指点,我已经两周徘徊不前了。这
可是我的毕业设计的一部分,我解决不了就毕业不了拉。真的谢谢你,如果你能帮我解决这个问题,我可以给你磕头了 !!!!!!!!!
也不知道我的仿真机有没有问题,但是应该没有问题啊,它至少能够接受来自PC机的数据嘛。
Ep0_RxDone:
;R_L_TransactionStatus(0) to decide if setup package
mov    r1,#0
lcall  R_L_TransactionStatus
;read the state and at the same time to clear the control out flag
anl    a,#20h       ;0010 0000b
jz     Usb_Receive_Ready
ljmp   Is_Setup_packgae
Usb_Receive_Ready:
mov    a,bControl_State
cjne   a,#D12_Receive,Set_State_Idle
lcall  Usb_Receive
ljmp   Q_Ep0_RxDone
Set_State_Idle:
mov    bControl_State,#D12_Idle
ljmp   Q_Ep0_RxDone
Is_Setup_Package:
;is setup package
;D12_SelectEndpoint
clr    CS
mov    dptr,#01h
mov    a,#0h        ;D12_SelectEndpoint:control out(00h)
movx   @dptr,a
setb   CS
clr    CS
mov    dptr,#0h
movx   a,@dptr      ;read data
setb   CS
;the end of D12_SelectEndpoint
anl    a,#01h       ;0000 0001b
jz     EP0Null
////////////////////////////////////////////////////////
问题就在这里:SelectEndpoint后,读出的数值总是0,说明在从PC机
接受命令的时候,比如SetAddress,根本就没有读出来自PC机的8字节的命令内容。
;control out endpoint0 is full
           ;read  buffer(read 8tytes)
clr    CS
mov    dptr,#01h
mov    a,#0f0h      ;F0h:read buffer command
movx   @dptr,a
setb   CS
clr    CS
mov    dptr,#0h
movx   a,@dptr      ;the first byte is reserved
setb   CS
clr    CS
mov    dptr,#0
movx   a,@dptr      ;the length of data bytes
setb   CS
clr    c
subb   a,#08h       ;the length of data bytes is 8 or not
jc     Not8_bytes
ljmp   GetCommand
Not8_bytes:
ljmp   Q_Ep0_RxDone
;--------------------------------------------------------------------------
EP0Null:
;D12_SetEndpointStatus(r4,r5)
mov    r4,#0
mov    r5,#1
lcall  S_Ep_Status
mov    r4,#1
mov    r5,#1
lcall  S_Ep_Status
mov    bControl_State,#D12_Idle
ljmp   Q_Ep0_RxDone
;the end of setup package
;--------------------------------------------------------------------------
;EndPoint 0: process configuration command
;--------------------------------------------------------------------------
GetCommand:
lcall  GetCmd       ;get 8 bytes command from host
;the end of read buffer
;clear control out buffer
clr    CS
mov    dptr,#01h
mov    a,#0f2h      ;F2:clear buffer command
movx   @dptr,a
setb   CS
;the end of clear control out buffer
;D12_AcknowledgeEndPoint(0):control out
clr    CS
mov    dptr,#01h
mov    a,#0h        ;select endpoint:control out
movx   @dptr,a
setb   CS
clr    CS
mov    dptr,#01h
mov    a,#0f0h        ;Acknowledge setup package
movx   @dptr,a
setb   CS
;the end of D12_AcknowledgeEndPoint(0)
;D12_AcknowledgeEndPoint(1):control in
clr    CS
mov    dptr,#01h
mov    a,#1h        ;select endpoint:control in
movx   @dptr,a
setb   CS
clr    CS
mov    dptr,#01h
mov    a,#0f0h        ;Acknowledge setup package
movx   @dptr,a
setb   CS
;the end of D12_AcknowledgeEndPoint(1)

jnb    bmRequestType.7,Ep0_DOut
mov    bSetup_packet,#1
mov    bControl_State,#D12_Idle
ljmp   Q_Ep0_RxDone

最新喜欢:

Jkw_DevJkw_De...
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-09-07 08:43
天天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分
板凳#
发布于:2001-09-06 19:46
斑竹:
   能不能给一个具体的philips的链接,可以从那里下载关于usb的pdiusbd12的例子(包括output,input)。/
   谢谢
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
地板#
发布于:2001-09-06 09:18
既然名为硬件抽象层,当然要根据你的硬件来修改了。
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
wwffllf
驱动小牛
驱动小牛
  • 注册日期2001-07-14
  • 最后登录2004-11-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2001-09-04 13:38
怎样修改那两个函数啊?
我告诉你们,我可是身经百战了。见的多了,驱动开发,哪个版我没灌过? 你们要知道,驱动的▲版,那比你们不知道厉害到哪里去了,我在那谈笑风声。 你们有一个好,就是什么话题都灌。但是灌来灌去的问题,都 too simple, sometimes naive! 懂了没有? 所以说灌水啊,关键是要提高自己的知识水平。 哦,你们啊,不要想弄个大坑,re上十大,再羞辱一番?你们啊.... naive !! 改编于《江core发飙》
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2001-09-04 09:06
告诉你一个可以毕业的方法:把philips的例子的hal.c里面的outportb和inportb修改一下,直接编译就可以用了。不过它可是c51的。你再加一点注释,给老师交差没有问题。
我以前也想用asm51,结果仿真器老是搞鬼,浪费了3个星期。后来干脆直接把c51的程序编译后烧到芯片里面,一次就成功了。
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
游客

返回顶部