1 /* 2 * Copyright (c) 2024, sakumisu 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 */ 6 #include "usbd_core.h" 7 #include "fsl_common.h" 8 #include "usb_kinetis_reg.h" 9 10 #define USB_OTG_DEV ((KINETIS_MCX_TypeDef *)g_usbdev_bus[busid].reg_base) 11 12 #if defined(MCXC444_H_) 13 #define USBD_IRQ USB0_IRQHandler USB_ClockInit(void)14void USB_ClockInit(void) 15 { 16 SystemCoreClockUpdate(); 17 CLOCK_EnableUsbfs0Clock(kCLOCK_UsbSrcIrc48M, 48000000U); 18 } 19 #elif defined(MCXA153_H_) 20 #define USBD_IRQ USB0_IRQHandler USB_ClockInit(void)21void USB_ClockInit(void) 22 { 23 RESET_PeripheralReset(kUSB0_RST_SHIFT_RSTn); 24 CLOCK_EnableUsbfsClock(); 25 } 26 #elif defined(MCXN947_CM33_CORE0_H_) 27 #define USBD_IRQ USB0_FS_IRQHandler USB_ClockInit(void)28void USB_ClockInit(void) 29 { 30 CLOCK_AttachClk(kCLK_48M_to_USB0); 31 CLOCK_EnableClock(kCLOCK_Usb0Ram); 32 CLOCK_EnableClock(kCLOCK_Usb0Fs); 33 CLOCK_EnableUsbfsClock(); 34 } 35 #elif defined(MCXA156_H_) 36 #define USBD_IRQ USB0_IRQHandler USB_ClockInit(void)37void USB_ClockInit(void) 38 { 39 RESET_PeripheralReset(kUSB0_RST_SHIFT_RSTn); 40 CLOCK_EnableUsbfsClock(); 41 } 42 #else 43 #error "Unsupported MCU with Kinetis IP" 44 #endif 45 USBD_IRQ(void)46void USBD_IRQ(void) 47 { 48 extern void USBD_IRQHandler(uint8_t busid); 49 USBD_IRQHandler(0); 50 } 51 usb_dc_low_level_init(uint8_t busid)52void usb_dc_low_level_init(uint8_t busid) 53 { 54 USB_ClockInit(); 55 56 uint8_t irqNumber; 57 58 uint8_t usbDeviceKhciIrq[] = USB_IRQS; 59 irqNumber = usbDeviceKhciIrq[0]; 60 61 /* Install isr, set priority, and enable IRQ. */ 62 NVIC_SetPriority((IRQn_Type)irqNumber, 3); 63 EnableIRQ((IRQn_Type)irqNumber); 64 65 USB_OTG_DEV->USBTRC0 |= USB_USBTRC0_USBRESET_MASK; 66 while (USB_OTG_DEV->USBTRC0 & USB_USBTRC0_USBRESET_MASK); 67 68 USB_OTG_DEV->USBTRC0 |= USB_USBTRC0_VREGIN_STS(1); /* software must set this bit to 1 */ 69 USB_OTG_DEV->USBCTRL = 0; 70 USB_OTG_DEV->CONTROL |= USB_CONTROL_DPPULLUPNONOTG_MASK; 71 } 72 usb_dc_low_level_deinit(uint8_t busid)73void usb_dc_low_level_deinit(uint8_t busid) 74 { 75 USB_OTG_DEV->CONTROL &= ~USB_CONTROL_DPPULLUPNONOTG_MASK; 76 #if defined(MCXN947_CM33_CORE0_H_) 77 DisableIRQ((IRQn_Type)USB0_FS_IRQn); 78 #else 79 DisableIRQ((IRQn_Type)USB0_IRQn); 80 #endif 81 } 82 usbd_kinetis_delay_ms(uint8_t ms)83void usbd_kinetis_delay_ms(uint8_t ms) 84 { 85 }