阅读:2091回复:4
请教PDIUSBD12,枚举错误
下面是我的一段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){ } } “!”后是我读出的变量的值。 请斑竹和各位同行大虾帮忙,小可先谢谢各位了! |
|
最新喜欢:![]()
|
沙发#
发布于: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? 自己找找吧,开饭了。。。。。。。。。 |
|
板凳#
发布于: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] |
|
|
地板#
发布于: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] |
|
|
地下室#
发布于: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] |
|
|