@@ -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)
182197extern uint8_t g_USBD_au8SetupPacket[]; /* !< Setup packet buffer */
183198uint8_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
0 commit comments