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

请教PDIUSBD12,枚举错误

楼主#
更多 发布于:2001-10-17 17:01
下面是我的一段C51程序,验证在设备枚举时能接收来自PC的SETUP包。在我的程序中,接收的数据错误,而且PC机不能检测到USB口的设备。我的硬件连接如下:
   PDIUSBD12的CS----MCU的P2.8;
   PDIUSBD12的A0----MCU的P2.7;
   PDIUSBD12的RD,WR,ALE-----MCU的RD,WR,ALE;
   PDIUSBD12的suspend----MCU的P1.5;
  下面是我的程序,MCU我选用ADuC812,仿真器Insight SE-52.
#include<stdio.h>
#include<ADuC812.h>
#include<ABsacc.h>
#define CPLD XBYTE[0XEFFF]
#define USBCOM XBYTE[0X7FFF]
#define USBDATA XBYTE[0X3FFF]

sbit r=P3^7;
sbit w=P3^6;
//sbit cpldcs=P2^4;
sbit usbcs=P2^7;
sbit suspend=P1^5;
unsigned char data usbbuf,epdata,usbb[10];
unsigned char bdata breg;
unsigned char data i;

void read_buffer(void){
USBCOM=0XF0;        //read buffer
for(i=0;i<10;i++){
usbb=USBDATA;    //read 10 bytes
}
//USBCOM=0XF1;
}

void delay(unsigned char t)
  {
    while(t--);          //延时子程序        
    }
 /* 中断服务子程序  */
 void usb_int0() interrupt 0 using 1{
 
 USBCOM=0XF4; //read interrupt register
 //delay(2);
 breg=USBDATA;          ! 读出的breg值为0XC1
 //delay(5);
 
 if(breg^0==1)
   USBCOM=0X40;// EP0 OUT
//   delay(2);
   usbbuf=USBDATA;   !  读出的usbbuf值为0X21
//   delay(5);

  USBCOM=0XF2;  
  USBCOM=0X00;  //select endpoint0
  epdata=USBDATA;        ! 读出端点0的值是0X01
   read_buffer();  //read buffer !读出连续的10个buffer的值 全是0XFF,这与设备在枚举时host发送的GET_DESCRIPTOR相差太远。
 // USBCOM=0XF1;
  
   }
 
 void main(void)
  {
    EA=0;  //close interrupt
   // SP=0X55;//set stack
    IT0=0;  //low to trigger
    EX0=0;  //close interrupt INT0
    delay(10);
    
   /*  Initialization Commands  */
   suspend=0;
  USBCOM=0xd0;//Set Address/Enable
  delay(2);
  USBDATA=0x80;
  delay(2);
  USBCOM=0XD8; //set Endpoint Enable
  delay(2);
  USBDATA=0X01;
  delay(2);
  
  USBCOM=0XFB; //set DMA
  delay(2);
  USBDATA=0Xc0;
  delay(2);
    USBCOM=0XF3;  //set mode
    delay(2);
    USBDATA=0X16;
    delay(2);
    USBDATA=0X4B;  //4M CLOCK
    delay(2);
    
    EA=1;
    EX0=1;   //open interrupt
   while(1){  
   }
    }
    
   “!”后是我读出的变量的值。
 
请斑竹和各位同行大虾帮忙,小可先谢谢各位了!
    
    

互相学习,互相进步! Email:tojbchen@hotmail.com
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-10-23 11:36
既然用c51,为什么不从philips那里直接拿来呢?还搞得自己这么累!
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
usb11
驱动小牛
驱动小牛
  • 注册日期2001-09-17
  • 最后登录2009-04-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2001-10-23 15:12
rayyang2000老兄说得对,确实让人费解
助人乃快乐之本! 共同进步是我的本意!
jbchen
驱动牛犊
驱动牛犊
  • 注册日期2001-10-10
  • 最后登录2003-05-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2001-10-23 17:19
谢谢两位斑竹,我现在正在研读philips的firmware,可是philip的例子有两种预编译:
#ifdef __c51__
.......
#else
.......

我是不是只需要看c51的代码,而不用关心其他的代码?
互相学习,互相进步! Email:tojbchen@hotmail.com
usb11
驱动小牛
驱动小牛
  • 注册日期2001-09-17
  • 最后登录2009-04-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2001-10-23 19:26
完全正确!
助人乃快乐之本! 共同进步是我的本意!
jbchen
驱动牛犊
驱动牛犊
  • 注册日期2001-10-10
  • 最后登录2003-05-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2001-10-23 21:26
万分感激两位斑竹的指点!
互相学习,互相进步! Email:tojbchen@hotmail.com
游客

返回顶部