Files
hc32f460_boot/hdl/hdl_usb.c
T

52 lines
1.7 KiB
C
Raw Normal View History

2026-04-23 13:49:53 +08:00
#include "hdl_usb.h"
static void USB_IRQ_Handler(void)
{
extern void USBD_IRQHandler(uint8_t busid);
USBD_IRQHandler(0);
}
void hdl_usb_init(void)
{
stc_clock_pllx_init_t stcUpllInit;
stc_gpio_init_t stcGpioCfg;
stc_irq_signin_config_t stcIrqRegiConf;
LL_PERIPH_WE(LL_PERIPH_EFM | LL_PERIPH_FCG | LL_PERIPH_GPIO | LL_PERIPH_PWC_CLK_RMU | LL_PERIPH_SRAM);
/* 时钟配置 */
(void)CLK_PLLxStructInit(&stcUpllInit);
stcUpllInit.u8PLLState = CLK_PLLX_ON;
stcUpllInit.PLLCFGR = 0UL;
stcUpllInit.PLLCFGR_f.PLLM = (4UL - 1UL);
stcUpllInit.PLLCFGR_f.PLLN = (84UL - 1UL);
stcUpllInit.PLLCFGR_f.PLLR = (7UL - 1UL);
stcUpllInit.PLLCFGR_f.PLLQ = (7UL - 1UL);
stcUpllInit.PLLCFGR_f.PLLP = (7UL - 1UL); //48M
(void)CLK_PLLxInit(&stcUpllInit);
CLK_SetUSBClockSrc(CLK_USBCLK_PLLXP);
/* 引脚配置 */
(void)GPIO_StructInit(&stcGpioCfg);
stcGpioCfg.u16PinAttr = PIN_ATTR_ANALOG;
(void)GPIO_Init(USB_DM_PORT, USB_DM_PIN, &stcGpioCfg);
(void)GPIO_Init(USB_DP_PORT, USB_DP_PIN, &stcGpioCfg);
// GPIO_SetFunc(USB_DM_PORT, USB_DM_PIN, GPIO_FUNC_10);
// GPIO_SetFunc(USB_DP_PORT, USB_DP_PIN, GPIO_FUNC_10);
// GPIO_SetFunc(USB_VBUS_PORT, USB_VBUS_PIN, GPIO_FUNC_10); /* VBUS */
FCG_Fcg1PeriphClockCmd(FCG1_PERIPH_USBFS, ENABLE);
/* 中断配置 */
stcIrqRegiConf.enIRQn = INT030_IRQn;
stcIrqRegiConf.enIntSrc = INT_SRC_USBFS_GLB;
stcIrqRegiConf.pfnCallback = &USB_IRQ_Handler; // 添加中断函数
(void)INTC_IrqSignIn(&stcIrqRegiConf);
NVIC_ClearPendingIRQ(stcIrqRegiConf.enIRQn);
NVIC_SetPriority(stcIrqRegiConf.enIRQn, DDL_IRQ_PRIO_15);
NVIC_EnableIRQ(stcIrqRegiConf.enIRQn);
LL_PERIPH_WP(LL_PERIPH_EFM | LL_PERIPH_FCG | LL_PERIPH_SRAM);
}