feat(port/kinetis): add mm32f5 support

Signed-off-by: sakumisu <1203593632@qq.com>
This commit is contained in:
sakumisu
2025-03-29 15:37:03 +08:00
parent 9a26c50900
commit 6f25f797ed
2 changed files with 47 additions and 2 deletions

View File

@@ -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));
}
}

View File

@@ -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);
}