TMC32_QJB/USB/USB_init.c

117 lines
2.3 KiB
C
Raw Normal View History

2026-04-30 08:23:12 +00:00
/*
* Copyright (c) 2019, Tongxin Microelectronics Co., Ltd.
* All rights reserved.
*
* FileName: usb_init.c
* SCFID:
* Feature:
* Version: V0.1
*
* History:
* 2019-06-04
* 1. Original version 0.1
* */
#include "global.h"
extern uint8_t gLicenseFlag; //<2F><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>License<73><65>gLicenseFlag = 0<><30><EFBFBD><EFBFBD>license<73><65>Ч
void USBClkInit(void)
{
int i;
RCC_Security2PeriphClockCmd(RCC_SEC2Periph_USB, ENABLE);
USBPHYCKCON1 |= Bit1_En;
USBPHYCKCON2 |= Bit12_En | Bit13_En | Bit16_En;
USBPHYCON = 0x00000004; // Disable Pull-up
for(i=0;i<100;i++)
{}
RCC_USBClockConfig(RCC_USB_CLKSRC_USBPHY,ENABLE);
for(i=0;i<100;i++)
{}
USBDCON |= Bit20_En;
for(i=0;i<10;i++) // Waiting for USB controller reset,16 cycles needed
{
__NOP();
__NOP();
__NOP();
}
USBPHYCON = 0x00000007; // Enable DP PU
}
/***************************************************************************
* Function: USBInit
* Description: usb Init
* Input: NULL
* Output: NULL
* Return: NULL
* Other: NULL
**************************************************************************/
void USBInit(void)
{
// USBDCON |= Bit20_En;
USBDCON |= Bit16_En | Bit0_En; //reset irq en, ep0 irq en
// SCUCM3 |= Bit8_En; // usb clock enable
USBPCON = 0x00000002; // USB physical layer power on and no suspend
USBPHYCON = 0x00000005; // Enable DP PU
USBPHYCKCON1 |= Bit1_En;
USBPHYCKCON2 |= Bit16_En;
// XTAL and PLL Init
// SCUXTAL = 0x03; // enable xtal in and out IO
// USB parameter init
st_usbDeviceRequest.bStdRqstFlag = 0;
st_usbDeviceRequest.bClsRqstFlag = 0;
st_usbDeviceRequest.bVdrRqstFlag = 0;
g_sUsbEp0TxLen = 0;
g_bUsbEp0TxIntFlag = 0;
g_bUsbEp0RcvDataFlag = 0;
g_bUsbEp1RcvDataFlag = 0;
g_sUsbEp2TxLen = 0;
#if CCID
st_ccidCmdMessage.bWaitForAbort = 0;
g_Icc1PowerOn = 0;
#endif
//usb<73>˵<EFBFBD><CBB5><EFBFBD>ʼ<EFBFBD><CABC>
usbEpInit(); // USB Eps initialize
}
void AppUSBInit(uint8_t usbType)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒû<C6B7><C3BB>SPRODUCT_FLAG<41><47>λ<EFBFBD><CEBB><EFBFBD>豸Ϊ<E8B1B8><CEAA><EFBFBD><EFBFBD><E2B4AE>
if(gLicenseFlag) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
g_bUsbDevType = USBDEVTYPE_VSP;
}
else
{
g_bUsbDevType = usbType;
}
//usbʱ<62>ӳ<EFBFBD>ʼ<EFBFBD><CABC>
USBClkInit();
//usb<73>˵<EFBFBD><CBB5><EFBFBD>ʼ<EFBFBD><CABC>
USBInit();
//usb<73>ж<EFBFBD>ʹ<EFBFBD><CAB9>
NVIC_ClearPendingIRQ(USB_IRQn);
NVIC_EnableIRQ(USB_IRQn);
}