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

请教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){  
   }
    }
    
   “!”后是我读出的变量的值。
 
请斑竹和各位同行大虾帮忙,小可先谢谢各位了!
    
    


最新喜欢:

Jkw_DevJkw_De...
互相学习,互相进步! Email:tojbchen@hotmail.com
Truly
驱动牛犊
驱动牛犊
  • 注册日期2001-08-16
  • 最后登录2005-05-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-10-23 17:57
http://www.semiconductors.philips.com/usb/products/device/pdiusbd12/

自己去看看吧,下几个FIRMWARE看看就会了。
你是用PHILIPS的演示板在做吗?如是那就注意板上其它芯片,特别是EPP芯片74HC1284,如没用到DMA时D12的EOT脚可能要加个20K的上拉电阻,DMAACK_N接VCC,没什么必要就不要用ALE了。我就是给它的这些脚弄得我头大了好几天!
“usbb[10];”十个还是10H?
自己找找吧,开饭了。。。。。。。。。

jbchen
驱动牛犊
驱动牛犊
  • 注册日期2001-10-10
  • 最后登录2003-05-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2001-10-17 17:18
有一点没显示出来,补上:
#include<stdio.h>
#include<ADuC812.H>
#include<absacc.h>
//#define CPLD XBYTE[0XEFFF]
#define USBCOM XBYTE[0X7FFF]
#define USBDATA XBYTE[0X3FFF]
互相学习,互相进步! Email:tojbchen@hotmail.com
jbchen
驱动牛犊
驱动牛犊
  • 注册日期2001-10-10
  • 最后登录2003-05-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2001-10-17 17:17
还是出不来?
#include stdio.h
#include ADuC812.h
#include absacc.h
//#define CPLD XBYTE[0XEFFF]
#define USBCOM XBYTE[0X7FFF]
#define USBDATA XBYTE[0X3FFF]

互相学习,互相进步! Email:tojbchen@hotmail.com
jbchen
驱动牛犊
驱动牛犊
  • 注册日期2001-10-10
  • 最后登录2003-05-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2001-10-17 17:13
有一点没显示出来,补上:
#include<stdio.h>
#include<ADuC812.H>
#include<absacc.h>
//#define CPLD XBYTE[0XEFFF]
#define USBCOM XBYTE[0X7FFF]
#define USBDATA XBYTE[0X3FFF]
互相学习,互相进步! Email:tojbchen@hotmail.com
游客

返回顶部