Kaynağa Gözat

update(port/kinetis): update mcx glue for mcxa153/mcxc444

sakumisu 1 yıl önce
ebeveyn
işleme
a20e312b55
2 değiştirilmiş dosya ile 33 ekleme ve 9 silme
  1. 2 2
      port/kinetis/README.md
  2. 31 7
      port/kinetis/usb_glue_mcx.c

+ 2 - 2
port/kinetis/README.md

@@ -10,8 +10,8 @@ Modify USB_NOCACHE_RAM_SECTION
 #define USB_NOCACHE_RAM_SECTION __attribute__((section(".NonCacheable")))
 ```
 
-- MCXC/MCXA (device only)
-- MCXN
+- MCXC444/MCXA153 (device only)
+- MCXN947
 
 ### MM32
 

+ 31 - 7
port/kinetis/usb_glue_mcx.c

@@ -9,12 +9,22 @@
 
 #define USB_OTG_DEV ((KINETIS_MCX_TypeDef *)g_usbdev_bus[busid].reg_base)
 
-void USB0_FS_IRQHandler(void)
+#if defined(MCXC444_H_)
+#define USBD_IRQ USB0_IRQHandler
+void USB_ClockInit(void)
 {
-    extern void USBD_IRQHandler(uint8_t busid);
-    USBD_IRQHandler(0);
+    SystemCoreClockUpdate();
+    CLOCK_EnableUsbfs0Clock(kCLOCK_UsbSrcIrc48M, 48000000U);
 }
-
+#elif defined(MCXA153_H_)
+#define USBD_IRQ USB0_IRQHandler
+void USB_ClockInit(void)
+{
+    RESET_PeripheralReset(kUSB0_RST_SHIFT_RSTn);
+    CLOCK_EnableUsbfsClock();
+}
+#elif defined(MCXN947_CM33_CORE0_H_)
+#define USBD_IRQ USB0_FS_IRQHandler
 void USB_ClockInit(void)
 {
     CLOCK_AttachClk(kCLK_48M_to_USB0);
@@ -22,13 +32,28 @@ void USB_ClockInit(void)
     CLOCK_EnableClock(kCLOCK_Usb0Fs);
     CLOCK_EnableUsbfsClock();
 }
+#else
+#error "Unsupported MCU with Kinetis IP"
+#endif
+
+void USBD_IRQ(void)
+{
+    extern void USBD_IRQHandler(uint8_t busid);
+    USBD_IRQHandler(0);
+}
 
 void usb_dc_low_level_init(uint8_t busid)
 {
     USB_ClockInit();
+
+    uint8_t irqNumber;
+
+    uint8_t usbDeviceKhciIrq[] = USB_IRQS;
+    irqNumber                  = usbDeviceKhciIrq[0];
+
     /* Install isr, set priority, and enable IRQ. */
-    NVIC_SetPriority((IRQn_Type)USB0_FS_IRQn, 3);
-    EnableIRQ((IRQn_Type)USB0_FS_IRQn);
+    NVIC_SetPriority((IRQn_Type)irqNumber, 3);
+    EnableIRQ((IRQn_Type)irqNumber);
 
     USB_OTG_DEV->USBTRC0 |= USB_USBTRC0_USBRESET_MASK;
     while (USB_OTG_DEV->USBTRC0 & USB_USBTRC0_USBRESET_MASK)
@@ -47,5 +72,4 @@ void usb_dc_low_level_deinit(uint8_t busid)
 
 void usbd_kinetis_delay_ms(uint8_t ms)
 {
-
 }