/* * The MIT License (MIT) * * Copyright (c) 2021, Ha Thach (tinyusb.org) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * This file is part of the TinyUSB stack. *//* ... */#ifndefTUSB_MCU_H_#defineTUSB_MCU_H_//--------------------------------------------------------------------+// Port/Platform Specific// TUP stand for TinyUSB Port/Platform (can be renamed)//--------------------------------------------------------------------+//------------- Unaligned Memory Access -------------//#ifdef__ARM_ARCH// ARM Architecture set __ARM_FEATURE_UNALIGNED to 1 for mcu supports unaligned access#ifdefined(__ARM_FEATURE_UNALIGNED)&&__ARM_FEATURE_UNALIGNED==1#defineTUP_ARCH_STRICT_ALIGN0#else#defineTUP_ARCH_STRICT_ALIGN1#endif/* ... */#else// TODO default to strict align for others// Should investigate other architecture such as risv, xtensa, mips for optimal setting#defineTUP_ARCH_STRICT_ALIGN1/* ... */#endif/* USB Controller Attributes for Device, Host or MCU (both) * - ENDPOINT_MAX: max (logical) number of endpoint * - ENDPOINT_EXCLUSIVE_NUMBER: endpoint number with different direction IN and OUT aren't allowed, * e.g EP1 OUT & EP1 IN cannot exist together * - RHPORT_HIGHSPEED: support highspeed with on-chip PHY *//* ... *///--------------------------------------------------------------------+// NXP//--------------------------------------------------------------------+#ifTU_CHECK_MCU(OPT_MCU_LPC11UXX,OPT_MCU_LPC13XX,OPT_MCU_LPC15XX)#defineTUP_USBIP_IP3511#defineTUP_DCD_ENDPOINT_MAX5/* ... */#elifTU_CHECK_MCU(OPT_MCU_LPC175X_6X,OPT_MCU_LPC177X_8X,OPT_MCU_LPC40XX)#defineTUP_DCD_ENDPOINT_MAX16#defineTUP_USBIP_OHCI#defineTUP_OHCI_RHPORTS2/* ... */#elifTU_CHECK_MCU(OPT_MCU_LPC51UXX)#defineTUP_USBIP_IP3511#defineTUP_DCD_ENDPOINT_MAX5/* ... */#elifTU_CHECK_MCU(OPT_MCU_LPC54)// TODO USB0 has 5, USB1 has 6#defineTUP_USBIP_IP3511#defineTUP_DCD_ENDPOINT_MAX6/* ... */#elifTU_CHECK_MCU(OPT_MCU_LPC55)// TODO USB0 has 5, USB1 has 6#defineTUP_USBIP_IP3511#defineTUP_DCD_ENDPOINT_MAX6/* ... */#elifTU_CHECK_MCU(OPT_MCU_LPC18XX,OPT_MCU_LPC43XX)// USB0 has 6 with HS PHY, USB1 has 4 only FS#defineTUP_USBIP_CHIPIDEA_HS#defineTUP_USBIP_EHCI#defineTUP_DCD_ENDPOINT_MAX6#defineTUP_RHPORT_HIGHSPEED1/* ... */#elifTU_CHECK_MCU(OPT_MCU_MCXN9)// USB0 is chipidea FS#defineTUP_USBIP_CHIPIDEA_FS#defineTUP_USBIP_CHIPIDEA_FS_MCX// USB1 is chipidea HS#defineTUP_USBIP_CHIPIDEA_HS#defineTUP_USBIP_EHCI#defineTUP_DCD_ENDPOINT_MAX8#defineTUP_RHPORT_HIGHSPEED16 defines/* ... */#elifTU_CHECK_MCU(OPT_MCU_MCXA15)// USB0 is chipidea FS#defineTUP_USBIP_CHIPIDEA_FS#defineTUP_USBIP_CHIPIDEA_FS_MCX#defineTUP_DCD_ENDPOINT_MAX16/* ... */#elifTU_CHECK_MCU(OPT_MCU_MIMXRT1XXX)#defineTUP_USBIP_CHIPIDEA_HS#defineTUP_USBIP_EHCI#defineTUP_DCD_ENDPOINT_MAX8#defineTUP_RHPORT_HIGHSPEED1/* ... */#elifTU_CHECK_MCU(OPT_MCU_KINETIS_KL,OPT_MCU_KINETIS_K32L,OPT_MCU_KINETIS_K)#defineTUP_USBIP_CHIPIDEA_FS#defineTUP_USBIP_CHIPIDEA_FS_KINETIS#defineTUP_DCD_ENDPOINT_MAX16/* ... */#elifTU_CHECK_MCU(OPT_MCU_MM32F327X)#defineTUP_DCD_ENDPOINT_MAX16//--------------------------------------------------------------------+// Nordic//--------------------------------------------------------------------+/* ... */#elifTU_CHECK_MCU(OPT_MCU_NRF5X)// 8 CBI + 1 ISO#defineTUP_DCD_ENDPOINT_MAX9//--------------------------------------------------------------------+// Microchip//--------------------------------------------------------------------+/* ... */#elifTU_CHECK_MCU(OPT_MCU_SAMD21,OPT_MCU_SAMD51,OPT_MCU_SAME5X)||\TU_CHECK_MCU(OPT_MCU_SAMD11,OPT_MCU_SAML21,OPT_MCU_SAML22)#defineTUP_DCD_ENDPOINT_MAX8/* ... */#elifTU_CHECK_MCU(OPT_MCU_SAMG)#defineTUP_DCD_ENDPOINT_MAX6#defineTUP_DCD_ENDPOINT_EXCLUSIVE_NUMBER/* ... */#elifTU_CHECK_MCU(OPT_MCU_SAMX7X)#defineTUP_DCD_ENDPOINT_MAX10#defineTUP_RHPORT_HIGHSPEED1#defineTUP_DCD_ENDPOINT_EXCLUSIVE_NUMBER/* ... */#elifTU_CHECK_MCU(OPT_MCU_PIC32MZ)#defineTUP_DCD_ENDPOINT_MAX8#defineTUP_DCD_ENDPOINT_EXCLUSIVE_NUMBER/* ... */#elifTU_CHECK_MCU(OPT_MCU_PIC32MX,OPT_MCU_PIC32MM,OPT_MCU_PIC32MK)||\TU_CHECK_MCU(OPT_MCU_PIC24,OPT_MCU_DSPIC33)#defineTUP_DCD_ENDPOINT_MAX16#defineTUP_DCD_ENDPOINT_EXCLUSIVE_NUMBER//--------------------------------------------------------------------+// ST//--------------------------------------------------------------------+/* ... */#elifTU_CHECK_MCU(OPT_MCU_STM32F0)#defineTUP_USBIP_FSDEV#defineTUP_USBIP_FSDEV_STM32#defineTUP_DCD_ENDPOINT_MAX8/* ... */#elifTU_CHECK_MCU(OPT_MCU_STM32F1)// - F102, F103 use fsdev// - F105, F107 use dwc2#ifdefined(STM32F105x8)||defined(STM32F105xB)||defined(STM32F105xC)||\defined(STM32F107xB)||defined(STM32F107xC)#defineTUP_USBIP_DWC2#defineTUP_USBIP_DWC2_STM32#defineTUP_DCD_ENDPOINT_MAX4/* ... */#elifdefined(STM32F102x6)||defined(STM32F102xB)||\defined(STM32F103x6)||defined(STM32F103xB)||defined(STM32F103xE)||defined(STM32F103xG)#defineTUP_USBIP_FSDEV#defineTUP_USBIP_FSDEV_STM32#defineTUP_DCD_ENDPOINT_MAX8/* ... */#else#error"Unsupported STM32F1 mcu"#endif/* ... */#elifTU_CHECK_MCU(OPT_MCU_STM32F2)#defineTUP_USBIP_DWC2#defineTUP_USBIP_DWC2_STM32// FS has 4 ep, HS has 5 ep#defineTUP_DCD_ENDPOINT_MAX6/* ... */#elifTU_CHECK_MCU(OPT_MCU_STM32F3)#defineTUP_USBIP_FSDEV#defineTUP_USBIP_FSDEV_STM32#defineTUP_DCD_ENDPOINT_MAX8/* ... */#elifTU_CHECK_MCU(OPT_MCU_STM32F4)#defineTUP_USBIP_DWC2#defineTUP_USBIP_DWC2_STM32// For most mcu, FS has 4, HS has 6. TODO 446/469/479 HS has 9#defineTUP_DCD_ENDPOINT_MAX6/* ... */#elifTU_CHECK_MCU(OPT_MCU_STM32F7)#defineTUP_USBIP_DWC2#defineTUP_USBIP_DWC2_STM32// FS has 6, HS has 9#defineTUP_DCD_ENDPOINT_MAX9// MCU with on-chip HS Phy#ifdefined(STM32F723xx)||defined(STM32F730xx)||defined(STM32F733xx)#defineTUP_RHPORT_HIGHSPEED1// Port0: FS, Port1: HS#endif/* ... */#elifTU_CHECK_MCU(OPT_MCU_STM32H7)#defineTUP_USBIP_DWC2#defineTUP_USBIP_DWC2_STM32#defineTUP_DCD_ENDPOINT_MAX9/* ... */#elifTU_CHECK_MCU(OPT_MCU_STM32H5)#defineTUP_USBIP_FSDEV#defineTUP_USBIP_FSDEV_STM32#defineTUP_DCD_ENDPOINT_MAX8/* ... */#elifTU_CHECK_MCU(OPT_MCU_STM32G4)// Device controller#defineTUP_USBIP_FSDEV#defineTUP_USBIP_FSDEV_STM32// TypeC controller#defineTUP_USBIP_TYPEC_STM32#defineTUP_DCD_ENDPOINT_MAX8#defineTUP_TYPEC_RHPORTS_NUM15 defines/* ... */#elifTU_CHECK_MCU(OPT_MCU_STM32G0)#defineTUP_USBIP_FSDEV#defineTUP_USBIP_FSDEV_STM32#defineTUP_DCD_ENDPOINT_MAX8/* ... */#elifTU_CHECK_MCU(OPT_MCU_STM32L0,OPT_MCU_STM32L1)#defineTUP_USBIP_FSDEV#defineTUP_USBIP_FSDEV_STM32#defineTUP_DCD_ENDPOINT_MAX8/* ... */#elifTU_CHECK_MCU(OPT_MCU_STM32L4)// - L4x2, L4x3 use fsdev// - L4x4, L4x6, L4x7, L4x9 use dwc2#ifdefined(STM32L475xx)||defined(STM32L476xx)||\defined(STM32L485xx)||defined(STM32L486xx)||defined(STM32L496xx)||\defined(STM32L4A6xx)||defined(STM32L4P5xx)||defined(STM32L4Q5xx)||\defined(STM32L4R5xx)||defined(STM32L4R7xx)||defined(STM32L4R9xx)||\defined(STM32L4S5xx)||defined(STM32L4S7xx)||defined(STM32L4S9xx)#defineTUP_USBIP_DWC2#defineTUP_USBIP_DWC2_STM32#defineTUP_DCD_ENDPOINT_MAX6/* ... */#elifdefined(STM32L412xx)||defined(STM32L422xx)||defined(STM32L432xx)||defined(STM32L433xx)||\defined(STM32L442xx)||defined(STM32L443xx)||defined(STM32L452xx)||defined(STM32L462xx)#defineTUP_USBIP_FSDEV#defineTUP_USBIP_FSDEV_STM32#defineTUP_DCD_ENDPOINT_MAX8/* ... */#else#error"Unsupported STM32L4 mcu"#endif/* ... */#elifTU_CHECK_MCU(OPT_MCU_STM32WB)#defineTUP_USBIP_FSDEV#defineTUP_USBIP_FSDEV_STM32#defineTUP_DCD_ENDPOINT_MAX8/* ... */#elifTU_CHECK_MCU(OPT_MCU_STM32U5)#ifdefined(STM32U535xx)||defined(STM32U545xx)#defineTUP_USBIP_FSDEV#defineTUP_USBIP_FSDEV_STM32#defineTUP_DCD_ENDPOINT_MAX8/* ... */#else#defineTUP_USBIP_DWC2#defineTUP_USBIP_DWC2_STM32// U59x/5Ax/5Fx/5Gx are highspeed with built-in HS PHY#ifdefined(STM32U595xx)||defined(STM32U599xx)||defined(STM32U5A5xx)||defined(STM32U5A9xx)||\defined(STM32U5F7xx)||defined(STM32U5F9xx)||defined(STM32U5G7xx)||defined(STM32U5G9xx)#defineTUP_DCD_ENDPOINT_MAX9#defineTUP_RHPORT_HIGHSPEED1/* ... */#else#defineTUP_DCD_ENDPOINT_MAX6#endif/* ... */#endif/* ... */#elifTU_CHECK_MCU(OPT_MCU_STM32L5)#defineTUP_USBIP_FSDEV#defineTUP_USBIP_FSDEV_STM32#defineTUP_DCD_ENDPOINT_MAX8//--------------------------------------------------------------------+// Sony//--------------------------------------------------------------------+/* ... */#elifTU_CHECK_MCU(OPT_MCU_CXD56)#defineTUP_DCD_ENDPOINT_MAX7#defineTUP_RHPORT_HIGHSPEED1#defineTUP_DCD_ENDPOINT_EXCLUSIVE_NUMBER//--------------------------------------------------------------------+// TI//--------------------------------------------------------------------+/* ... */#elifTU_CHECK_MCU(OPT_MCU_MSP430x5xx)#defineTUP_DCD_ENDPOINT_MAX8/* ... */#elifTU_CHECK_MCU(OPT_MCU_MSP432E4,OPT_MCU_TM4C123,OPT_MCU_TM4C129)#defineTUP_DCD_ENDPOINT_MAX8//--------------------------------------------------------------------+// ValentyUSB (Litex)//--------------------------------------------------------------------+/* ... */#elifTU_CHECK_MCU(OPT_MCU_VALENTYUSB_EPTRI)#defineTUP_DCD_ENDPOINT_MAX16//--------------------------------------------------------------------+// Nuvoton//--------------------------------------------------------------------+/* ... */#elifTU_CHECK_MCU(OPT_MCU_NUC121,OPT_MCU_NUC126)#defineTUP_DCD_ENDPOINT_MAX8/* ... */#elifTU_CHECK_MCU(OPT_MCU_NUC120)#defineTUP_DCD_ENDPOINT_MAX6/* ... */#elifTU_CHECK_MCU(OPT_MCU_NUC505)#defineTUP_DCD_ENDPOINT_MAX12#defineTUP_RHPORT_HIGHSPEED1//--------------------------------------------------------------------+// Espressif//--------------------------------------------------------------------+/* ... */#elifTU_CHECK_MCU(OPT_MCU_ESP32S2,OPT_MCU_ESP32S3)#defineTUP_USBIP_DWC2#defineTUP_DCD_ENDPOINT_MAX6/* ... */#elifTU_CHECK_MCU(OPT_MCU_ESP32,OPT_MCU_ESP32C2,OPT_MCU_ESP32C3,OPT_MCU_ESP32C6,OPT_MCU_ESP32H2)&&(CFG_TUD_ENABLED||!(defined(CFG_TUH_MAX3421)&&CFG_TUH_MAX3421))#error"MCUs are only supported with CFG_TUH_MAX3421 enabled"//--------------------------------------------------------------------+// Dialog//--------------------------------------------------------------------+/* ... */#elifTU_CHECK_MCU(OPT_MCU_DA1469X)#defineTUP_DCD_ENDPOINT_MAX4//--------------------------------------------------------------------+// Raspberry Pi//--------------------------------------------------------------------+/* ... */#elifTU_CHECK_MCU(OPT_MCU_RP2040)#defineTUP_DCD_ENDPOINT_MAX16#defineTU_ATTR_FAST_FUNC__attribute__((section(".time_critical.tinyusb")))//--------------------------------------------------------------------+// Silabs//--------------------------------------------------------------------+/* ... */#elifTU_CHECK_MCU(OPT_MCU_EFM32GG)#defineTUP_USBIP_DWC2#defineTUP_DCD_ENDPOINT_MAX7//--------------------------------------------------------------------+// Renesas//--------------------------------------------------------------------+/* ... */#elifTU_CHECK_MCU(OPT_MCU_RX63X,OPT_MCU_RX65X,OPT_MCU_RX72N,OPT_MCU_RAXXX)#defineTUP_USBIP_RUSB2#defineTUP_DCD_ENDPOINT_MAX10//--------------------------------------------------------------------+// GigaDevice//--------------------------------------------------------------------+/* ... */#elifTU_CHECK_MCU(OPT_MCU_GD32VF103)#defineTUP_USBIP_DWC2#defineTUP_DCD_ENDPOINT_MAX4//--------------------------------------------------------------------+// Broadcom//--------------------------------------------------------------------+/* ... */#elifTU_CHECK_MCU(OPT_MCU_BCM2711,OPT_MCU_BCM2835,OPT_MCU_BCM2837)#defineTUP_USBIP_DWC2#defineTUP_DCD_ENDPOINT_MAX8#defineTUP_RHPORT_HIGHSPEED1//--------------------------------------------------------------------+// Infineon//--------------------------------------------------------------------+/* ... */#elifTU_CHECK_MCU(OPT_MCU_XMC4000)#defineTUP_USBIP_DWC2#defineTUP_DCD_ENDPOINT_MAX8//--------------------------------------------------------------------+// BridgeTek//--------------------------------------------------------------------+/* ... */#elifTU_CHECK_MCU(OPT_MCU_FT90X)#defineTUP_DCD_ENDPOINT_MAX8#defineTUP_RHPORT_HIGHSPEED1/* ... */#elifTU_CHECK_MCU(OPT_MCU_FT93X)#defineTUP_DCD_ENDPOINT_MAX16#defineTUP_RHPORT_HIGHSPEED1//--------------------------------------------------------------------+// Allwinner//--------------------------------------------------------------------+/* ... */#elifTU_CHECK_MCU(OPT_MCU_F1C100S)#defineTUP_DCD_ENDPOINT_MAX4//--------------------------------------------------------------------+// WCH//--------------------------------------------------------------------+/* ... */#elifTU_CHECK_MCU(OPT_MCU_CH32F20X)#defineTUP_USBIP_WCH_USBHS#defineTUP_USBIP_WCH_USBFS#if!defined(CFG_TUD_WCH_USBIP_USBFS)#defineCFG_TUD_WCH_USBIP_USBFS0#endif#if!defined(CFG_TUD_WCH_USBIP_USBHS)#defineCFG_TUD_WCH_USBIP_USBHS(CFG_TUD_WCH_USBIP_USBFS?0:1)#endif#defineTUP_RHPORT_HIGHSPEEDCFG_TUD_WCH_USBIP_USBHS#defineTUP_DCD_ENDPOINT_MAX(CFG_TUD_WCH_USBIP_USBHS?16:8)/* ... */#elifTU_CHECK_MCU(OPT_MCU_CH32V103)#defineTUP_USBIP_WCH_USBFS#if!defined(CFG_TUD_WCH_USBIP_USBFS)#defineCFG_TUD_WCH_USBIP_USBFS1#endif#defineTUP_DCD_ENDPOINT_MAX8/* ... */#elifTU_CHECK_MCU(OPT_MCU_CH32V20X)// v20x support both FSDEV (USBD) and USBFS, default to FSDEV#defineTUP_USBIP_WCH_USBFS#defineTUP_USBIP_FSDEV#defineTUP_USBIP_FSDEV_CH32#if!defined(CFG_TUD_WCH_USBIP_USBFS)#defineCFG_TUD_WCH_USBIP_USBFS0#endif#if!defined(CFG_TUD_WCH_USBIP_FSDEV)#defineCFG_TUD_WCH_USBIP_FSDEV(CFG_TUD_WCH_USBIP_USBFS?0:1)#endif#defineTUP_DCD_ENDPOINT_MAX8/* ... */#elifTU_CHECK_MCU(OPT_MCU_CH32V307)// v307 support both FS and HS, default to HS#defineTUP_USBIP_WCH_USBHS#defineTUP_USBIP_WCH_USBFS#if!defined(CFG_TUD_WCH_USBIP_USBFS)#defineCFG_TUD_WCH_USBIP_USBFS0#endif#if!defined(CFG_TUD_WCH_USBIP_USBHS)#defineCFG_TUD_WCH_USBIP_USBHS(CFG_TUD_WCH_USBIP_USBFS?0:1)#endif#defineTUP_RHPORT_HIGHSPEEDCFG_TUD_WCH_USBIP_USBHS#defineTUP_DCD_ENDPOINT_MAX(CFG_TUD_WCH_USBIP_USBHS?16:8)/* ... */#endif//--------------------------------------------------------------------+// External USB controller//--------------------------------------------------------------------+#ifdefined(CFG_TUH_MAX3421)&&CFG_TUH_MAX3421#ifndefCFG_TUH_MAX3421_ENDPOINT_TOTAL#defineCFG_TUH_MAX3421_ENDPOINT_TOTAL(8+4*(CFG_TUH_DEVICE_MAX-1))#endif/* ... */#endif//--------------------------------------------------------------------+// Default Values//--------------------------------------------------------------------+#ifndefTUP_MCU_MULTIPLE_CORE#defineTUP_MCU_MULTIPLE_CORE0#endif#if!defined(TUP_DCD_ENDPOINT_MAX)&&defined(CFG_TUD_ENABLED)&&CFG_TUD_ENABLED#warning"TUP_DCD_ENDPOINT_MAX is not defined for this MCU, default to 8"#defineTUP_DCD_ENDPOINT_MAX8/* ... */#endif// Default to fullspeed if not defined#ifndefTUP_RHPORT_HIGHSPEED#defineTUP_RHPORT_HIGHSPEED0#endif// fast function, normally mean placing function in SRAM#ifndefTU_ATTR_FAST_FUNC#defineTU_ATTR_FAST_FUNC#endif#ifdefined(TUP_USBIP_DWC2)||defined(TUP_USBIP_FSDEV)#defineTUP_DCD_EDPT_ISO_ALLOC#endif#ifdefined(TUP_USBIP_DWC2)#defineTUP_MEM_CONST_ADDR#endifUnaligned Memory Access/* ... */#endif
Details
Show: from
Types: Columns:
All items filtered out
All items filtered out
This file uses the notable symbols shown below. Click anywhere in the file to view more details.