Skip to content

Commit 7d16811

Browse files
authored
Merge pull request #15352 from OpenNuvoton/nuvoton_m2354_usbd
M2354: Support FS-USBD
2 parents 7ab5260 + 89ddd3f commit 7d16811

File tree

6 files changed

+28
-7
lines changed

6 files changed

+28
-7
lines changed

targets/TARGET_NUVOTON/USBEndpoints_Nuvoton.cpp

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ static USBPhyHw *instance;
2626
#define MBED_CONF_TARGET_USB_DEVICE_HSUSBD 0 /* USB 1.1 Only */
2727
#elif defined (TARGET_M480) || defined(TARGET_M460)
2828
#define USBD_SET_ADDRESS 0x05ul
29-
#elif defined (TARGET_M2351) || defined(TARGET_M261)
29+
#elif defined (TARGET_M2351) || defined(TARGET_M261) || defined(TARGET_M2354)
3030
#undef MBED_CONF_TARGET_USB_DEVICE_HSUSBD
3131
#define MBED_CONF_TARGET_USB_DEVICE_HSUSBD 0 /* USB 1.1 Only */
3232
#define USBD_SET_ADDRESS 0x05ul
@@ -104,7 +104,22 @@ void chip_config(void)
104104
/* USBD multi-function pins for VBUS, D+, D-, and ID pins */
105105
SYS->GPA_MFPH &= ~(SYS_GPA_MFPH_PA12MFP_Msk | SYS_GPA_MFPH_PA13MFP_Msk | SYS_GPA_MFPH_PA14MFP_Msk | SYS_GPA_MFPH_PA15MFP_Msk);
106106
SYS->GPA_MFPH |= (SYS_GPA_MFPH_PA12MFP_USB_VBUS | SYS_GPA_MFPH_PA13MFP_USB_D_N | SYS_GPA_MFPH_PA14MFP_USB_D_P | SYS_GPA_MFPH_PA15MFP_USB_OTG_ID);
107+
#elif defined (TARGET_M2354)
108+
109+
/* To select USBD in TF-M image secure domain */
110+
//SYS->USBPHY = (SYS->USBPHY & ~SYS_USBPHY_USBROLE_Msk) | SYS_USBPHY_OTGPHYEN_Msk | SYS_USBPHY_SBO_Msk;
111+
112+
/* Enable IP clock */
113+
CLK_EnableModuleClock_S(USBD_MODULE);
107114

115+
/* Select IP clock source */
116+
CLK_SetModuleClock_S(USBD_MODULE, CLK_CLKSEL0_USBSEL_HIRC48, CLK_CLKDIV0_USB(1));
117+
118+
/* USBD multi-function pins for VBUS, D+, D-, and ID pins */
119+
nu_pin_function_s(0, 12, SYS_GPA_MFPH_PA12MFP_USB_VBUS);
120+
nu_pin_function_s(0, 13, SYS_GPA_MFPH_PA13MFP_USB_D_N);
121+
nu_pin_function_s(0, 14, SYS_GPA_MFPH_PA14MFP_USB_D_P);
122+
nu_pin_function_s(0, 15, SYS_GPA_MFPH_PA15MFP_USB_OTG_ID);
108123

109124
#elif defined (TARGET_NANO100)
110125

@@ -178,7 +193,7 @@ void chip_config(void)
178193
#define HW_TO_DESC(endpoint) (endpoint|(((endpoint&1)?0x0:0x80)))
179194

180195
/* Global variables for Control Pipe */
181-
#if defined(TARGET_M2351) || defined(TARGET_M261)
196+
#if defined(TARGET_M2351) || defined(TARGET_M261) || defined(TARGET_M2354)
182197
extern uint8_t g_USBD_au8SetupPacket[]; /*!< Setup packet buffer */
183198
uint8_t* g_usbd_SetupPacket=g_USBD_au8SetupPacket;
184199
#else
@@ -235,9 +250,12 @@ void USBPhyHw::init(USBPhyEvents *events)
235250
sleep_manager_lock_deep_sleep();
236251
}
237252
this->events = events;
238-
253+
#if defined(TARGET_M2354)
254+
wait_us(10); /* To init us_ticker to avoid invoking NSC for us_ticker, it could keep wait_us safe from ISR Context */
255+
SYS_UnlockReg_S();
256+
#else
239257
SYS_UnlockReg();
240-
258+
#endif
241259
s_ep_buf_ind = 0;
242260

243261
chip_config();
@@ -515,6 +533,7 @@ void USBPhyHw::ep0_write(uint8_t *buffer, uint32_t size)
515533
NVT_USB_Debug(("### %s[%d]\n", __FUNCTION__, __LINE__));
516534
if (buffer && size)
517535
{
536+
NVT_USB_Debug(("### %s[%d]\n", __FUNCTION__, __LINE__));
518537
if(s_ep_data_bit[0] & 1)
519538
USBD_SET_DATA1(EP0);
520539
else
@@ -527,6 +546,7 @@ void USBPhyHw::ep0_write(uint8_t *buffer, uint32_t size)
527546
}
528547
else
529548
{
549+
NVT_USB_Debug(("### %s[%d]\n", __FUNCTION__, __LINE__));
530550
s_ep_data_bit[0] = 1;
531551
USBD_SET_DATA1(EP0);
532552
wait_us(500);
@@ -843,7 +863,7 @@ void USBPhyHw::process()
843863
ep_status = (USBD->EPSTS >> (ep_hw_index * 4 + 8)) & 0xF;
844864
else
845865
ep_status = (USBD->EPSTS2 >> ((ep_hw_index - 6) * 4)) & 0x7;
846-
#elif defined(TARGET_M480) || defined(TARGET_M2351) || defined(TARGET_M261) || defined(TARGET_M460)
866+
#elif defined(TARGET_M480) || defined(TARGET_M2351) || defined(TARGET_M261) || defined(TARGET_M460) || defined(TARGET_M2354)
847867
if(ep_hw_index < 8)
848868
ep_status = (USBD->EPSTS0 >> (ep_hw_index * 4)) & 0xF;
849869
else

targets/TARGET_NUVOTON/USBEndpoints_Nuvoton.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
#define NUMBER_OF_LOGICAL_ENDPOINTS (12)
2727
#define NUMBER_OF_PHYSICAL_ENDPOINTS (NUMBER_OF_LOGICAL_ENDPOINTS)
2828
#endif
29-
#elif defined (TARGET_M2351) || defined(TARGET_M261)
29+
#elif defined (TARGET_M2351) || defined(TARGET_M261) || defined(TARGET_M2354)
3030
#define NUMBER_OF_LOGICAL_ENDPOINTS (12)
3131
#define NUMBER_OF_PHYSICAL_ENDPOINTS (NUMBER_OF_LOGICAL_ENDPOINTS)
3232
#elif defined (TARGET_NANO100)

targets/targets.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8040,7 +8040,8 @@
80408040
"SPI",
80418041
"SPISLAVE",
80428042
"SPI_ASYNCH",
8043-
"MPU"
8043+
"MPU",
8044+
"USBDEVICE"
80448045
],
80458046
"release_versions": [
80468047
"5"

0 commit comments

Comments
 (0)