void USB_Reset_Handler(void)
{
K60.USB0->CTL_Bit.ODDRST=1;
//禁止所有端点
for(int i=0;i<16;i++)
{
K60.USB0->ENDPOINT[i].ENDPT=0;
USB_States.EndPointStatus.EndPoint[i].Data=0;
USB_States.EndPointStatus.EndPoint[i].EVEN=0;
USB_States.EndPointStatus.EndPoint[i].ODD=0;
USB_States.EndPointStatus.EndPoint[i].Status=0;
}
//K60.USB0->USBTRC0|=0x40;//强制设置第6位为1
//端点0
Table[BDT_INDEX(0, Rx, ODDx)].Addr = &USB_States.Buff_0[0][0];
Table[BDT_INDEX(0, Rx, ODDx)].Desc = BDT_DESC2(ENDP_SIZE, 1);
Table[BDT_INDEX(0, Rx, EVENx)].Addr = &USB_States.Buff_1[0][0];
Table[BDT_INDEX(0, Rx, EVENx)].Desc = BDT_DESC2(ENDP_SIZE, 0);
Table[BDT_INDEX(0, Tx, ODDx)].Addr=&USB_States.Buff_0_tx[0][0];
Table[BDT_INDEX(0, Tx, ODDx)].Desc = 0;
Table[BDT_INDEX(0, Tx, EVENx)].Addr=&USB_States.Buff_0_tx[1][0];
Table[BDT_INDEX(0, Tx, EVENx)].Desc = 0;
// 使能 EP0
K60.USB0->ENDPOINT[0].ENDPT=0x0D;
K60.USB0->CTL_Bit.ODDRST=0;
// 清除所有的错误
K60.USB0->ERRSTAT=0xFF;
// 清除所有的中断标志
K60.USB0->ISTAT=0xFF;
// USB设备地址
K60.USB0->ADDR=0x00;
// 使能所有的错误中断
K60.USB0->ERREN=0xFF;
// USB模块中断使能
K60.USB0->INTEN_Bit.TOKDNEEN=1;
K60.USB0->INTEN_Bit.SOFTOKEN=1;
K60.USB0->INTEN_Bit.ERROREN=1;
K60.USB0->INTEN_Bit.USBRSTEN=1;
K60.USB0->CTL_Bit.TXSUSPENDTOKENBUSY=0;
}
|