瀏覽代碼

feat(port/kinetis): add mm32f5 support

Signed-off-by: sakumisu <1203593632@qq.com>
sakumisu 9 月之前
父節點
當前提交
6f25f797ed
共有 2 個文件被更改,包括 47 次插入2 次删除
  1. 11 2
      port/kinetis/usb_dc_kinetis.c
  2. 36 0
      port/kinetis/usb_glue_mm32.c

+ 11 - 2
port/kinetis/usb_dc_kinetis.c

@@ -108,6 +108,15 @@ int usb_dc_init(uint8_t busid)
 
 int usb_dc_deinit(uint8_t busid)
 {
+    USB_OTG_DEV->INTEN = 0;
+    USB_OTG_DEV->CTL &= ~USB_CTL_USBENSOFEN_MASK;
+
+    memset(&g_kinetis_udc[busid], 0, sizeof(g_kinetis_udc[busid]));
+
+    USB_OTG_DEV->BDTPAGE1 = (uint8_t)((uintptr_t)&g_kinetis_bdt[busid] >> 8);
+    USB_OTG_DEV->BDTPAGE2 = (uint8_t)((uintptr_t)&g_kinetis_bdt[busid] >> 16);
+    USB_OTG_DEV->BDTPAGE3 = (uint8_t)((uintptr_t)&g_kinetis_bdt[busid] >> 24);
+
     usb_dc_low_level_deinit(busid);
     return 0;
 }
@@ -421,7 +430,7 @@ void USBD_IRQHandler(uint8_t busid)
                 usbd_event_ep_in_complete_handler(busid, ep_idx | 0x80, g_kinetis_udc[busid].in_ep[ep_idx].actual_xfer_len);
             } else {
                 kinetis_start_transfer(busid, ep_idx | 0x80, g_kinetis_udc[busid].in_ep[ep_idx].xfer_buf,
-                                           MIN(g_kinetis_udc[busid].in_ep[ep_idx].xfer_len, g_kinetis_udc[busid].in_ep[ep_idx].ep_mps));
+                                       MIN(g_kinetis_udc[busid].in_ep[ep_idx].xfer_len, g_kinetis_udc[busid].in_ep[ep_idx].ep_mps));
             }
         } else {
             g_kinetis_udc[busid].out_ep[ep_idx].xfer_buf += bc;
@@ -432,7 +441,7 @@ void USBD_IRQHandler(uint8_t busid)
                 usbd_event_ep_out_complete_handler(busid, ep_idx, g_kinetis_udc[busid].out_ep[ep_idx].actual_xfer_len);
             } else {
                 kinetis_start_transfer(busid, ep_idx, g_kinetis_udc[busid].out_ep[ep_idx].xfer_buf,
-                                           MIN(g_kinetis_udc[busid].out_ep[ep_idx].xfer_len, g_kinetis_udc[busid].out_ep[ep_idx].ep_mps));
+                                       MIN(g_kinetis_udc[busid].out_ep[ep_idx].xfer_len, g_kinetis_udc[busid].out_ep[ep_idx].ep_mps));
             }
         }
 

+ 36 - 0
port/kinetis/usb_glue_mm32.c

@@ -0,0 +1,36 @@
+#include <stdio.h>
+#include <string.h>
+
+#include "mm32_device.h"
+#include "hal_rcc.h"
+#include "usbd_core.h"
+
+void usb_dc_low_level_init(uint8_t busid)
+{
+    /* Select USBCLK source */
+    //  RCC_USBCLKConfig(RCC_USBCLKSource_PLLCLK_Div1);
+    RCC->CFGR &= ~(0x3 << 22);
+    RCC->CFGR |= (0x1 << 22);
+
+    /* Enable USB clock */
+    RCC->AHB2ENR |= 0x1 << 7;
+
+#define USB_DEVICE_INTERRUPT_PRIORITY (7U)
+    NVIC_SetPriority((IRQn_Type)USB_OTGFS_IRQn, USB_DEVICE_INTERRUPT_PRIORITY);
+    NVIC_EnableIRQ(USB_OTGFS_IRQn);
+}
+
+void usb_dc_low_level_deinit(uint8_t busid)
+{
+    RCC->AHB2ENR &= ~(0x1 << 7);
+}
+
+void USB_OTGFS_IRQHandler(void)
+{
+    USBD_IRQHandler(0);
+}
+
+void usbd_kinetis_delay_ms(uint8_t ms)
+{
+    //delay_ms(ms);
+}