usb一旦没有接入,比如说usb只接电源,不通信的时候,下面的函数一直卡在内部,有什么办法绕过去的哦!就是EA=1启动,我别的功能都没有用了(注意重点gpio中断函数不执行,执行失败),一直卡在里面!现在就是需要我usb万一只是通电,不能影响我其他功能(GPIO中断);要是usb通信的时候,也要能通信!
USBDeviceInit();
EA = 1;
//注意这个是中断函数,只要usb通信了,哪怕是当前状态usb通电状态,再加入usb信号,这个中断都可以使能,一旦usb通信数据线拔掉又没有功能,再插入usb数据线又有功能,请问这个是啥问题呢??
void GPIOInterruptCfg()
{
GPIO_IE &= ~bIE_IO_EDGE; //?/?????
// GPIO_IE |= bIE_IO_EDGE; //??/????
// GPIO_IE |= bIE_RXD1_LO; //RXD1?????????
GPIO_IE |= bIE_P3_1_LO;
//P15\P14\P13?????;RST?????
// GPIO_IE |= bIE_P3_1_LO; //P31?????????
// GPIO_IE |= bIE_RXD0_LO; //RXD0?????????
IE_GPIO = 1; //GPIO????
IP_EX|=bIP_GPIO;//注意这个中断在while循坏就搞定了!!
}
IT0 = 1;
EX0 = 1;
你开启gpio外部中断IN0(P3.2)
跟我那个P3.1没有任何关系!
voidGPIOInterrupt( void ) interrupt INT_NO_GPIO using 3 //GPIO??????,??????1
{
kd_led();
}
void main( void )
{
CfgFsys( );
kd_pwm_init();
kd_gpio_init();
mDelaymS(5);
memset(TP,0,sizeof(TP));
CTP_Info.x_max_pos = 0;
CTP_Info.y_max_pos = 0;
CTP_Info.IRQ_Flag = 0;
GT_Init();
MAX_POINT = 5;
MyManuInfo_Len = sizeof(MyManuInfo);
MyProdInfo_Len = sizeof(MyProdInfo);
GPIOInterruptCfg();
USBDeviceInit();
EA = 1; //注意就是卡在了这里,因为usb只通电了,USBDeviceInit 源码也看不到,只有lib文件,把相关函数放在EA=1前面就可以正常,EA=1后面就不行了,因为这个是全局中断使能啦啦!usb中断优先级比gpio中断优先级要高,就卡在那里了!
while( USB_Enum_OK == 0 )
{
};
IT0 = 1;
EX0 = 1; /* ??????????????????,?????ì?????? */
CH554WDTModeSelect(1); /* ?????????ú?????????· */
while(1)
{
CH554WDTFeed(0);
GT_Touch_Check();
}
}