阅读:1484回复:3
枚举失败:大家帮我看看哪儿有问题。
具体情况是这样的(周立功的板子,D12):
1、仿真器先运行,然后插USB口,枚举正确;(即使我不写RECONNECT,选运行仿真器程序,也可以枚举成功) 2、先插USB口再F9仿真器;只是灯闪几下,不成功。 3、将程序下载到单片机中,灯闪几下,不成功。 4、D12上电复位V3.3伏的脚即为3.3V,即使不插单片机上去,将板子接上USB口主机也能找出UNKNOW DEVICE。(我在周立功出的书上看到SEFTCONNECT默认是低电平的) 5、最奇怪的是,拿那块板子原来的编译好的固件代码,一切OK。 请各位帮我分析一下,可能问题在哪里,我应该怎样查? 6、我用南京万利的仿真器,编译后D12工程里有两个HEX文件SP2V10.HEX和D12.HEX,我把编译过的这两个文件和原来厂家的固件HEX都放上来,大家帮我看一看有什么问题吗? main()函数: unsigned char i; init_port(); init_serial(); init_timer0(); EA = 1; //for test MCU_LED0=0; MCU_LED1=0; MCU_LED0=1; MCU_LED1=1; IE0=0; IT0=0; EX0=1; MCU_D12CS = 0x1; bNoRAM = TRUE; MCU_D12CS = 0x0; reconnect_USB(); } //======================================= /* Main program loop */ while( TRUE ){ if (bEPPflags.bits.timer){ DISABLE; bEPPflags.bits.timer = 0; ENABLE; if(bEPPflags.bits.configuration) check_key_LED(); } if (bEPPflags.bits.bus_reset) { DISABLE; bEPPflags.bits.bus_reset = 0; ENABLE; // Release D12's SUSPEND pin after bus reset // Enable 74HCT123 pulse generation before disconnect ///D12SUSPD = 1; D12SUSPD=0; } // if bus reset if (bEPPflags.bits.suspend) { DISABLE; bEPPflags.bits.suspend= 0; ENABLE; if(D12SUSPD == 1) { D12SUSPD = 0; P0 = 0xFF; P1 = 0xFF; P2 = 0xFF; P3 = 0xFF; D12_SetDMA(0xC3); D12SUSPD = 1; PCON |= 0x02; while (1); } } // if suspend change if (bEPPflags.bits.setup_packet){ DISABLE; bEPPflags.bits.setup_packet = 0; ENABLE; control_handler(); //D12SUSPD = 1; D12SUSPD=0; } // if setup_packet if(bEPPflags.bits.setup_dma != 0) { DISABLE; bEPPflags.bits.setup_dma --; ENABLE; setup_dma(); } // if setup_dma } // Main Loop on_exit(); //======================================= |
|
|
沙发#
发布于:2004-03-29 10:42
是MCU的中断开早了,改为reconnect之后开就可以了
|
|
板凳#
发布于:2004-03-25 22:43
是不是我的问题不详细而不好答,不早了,我先回去试吧,我想仿真器上通得过应该不会有很大的问题,应该是一个先后的问题,明天等各位的高见!
|
|
地板#
发布于:2004-03-25 22:28
好几天早上三四点才睡了,这个问题折磨我一天了,时好时坏的真让人恼心,请大家给点建议。
|
|