@@ -26,7 +26,7 @@ static USBPhyHw *instance;
26
26
#define MBED_CONF_TARGET_USB_DEVICE_HSUSBD 0 /* USB 1.1 Only */
27
27
#elif defined (TARGET_M480) || defined(TARGET_M460)
28
28
#define USBD_SET_ADDRESS 0x05ul
29
- #elif defined (TARGET_M2351) || defined(TARGET_M261)
29
+ #elif defined (TARGET_M2351) || defined(TARGET_M261) || defined(TARGET_M2354)
30
30
#undef MBED_CONF_TARGET_USB_DEVICE_HSUSBD
31
31
#define MBED_CONF_TARGET_USB_DEVICE_HSUSBD 0 /* USB 1.1 Only */
32
32
#define USBD_SET_ADDRESS 0x05ul
@@ -104,7 +104,22 @@ void chip_config(void)
104
104
/* USBD multi-function pins for VBUS, D+, D-, and ID pins */
105
105
SYS->GPA_MFPH &= ~(SYS_GPA_MFPH_PA12MFP_Msk | SYS_GPA_MFPH_PA13MFP_Msk | SYS_GPA_MFPH_PA14MFP_Msk | SYS_GPA_MFPH_PA15MFP_Msk);
106
106
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);
107
114
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);
108
123
109
124
#elif defined (TARGET_NANO100)
110
125
@@ -178,7 +193,7 @@ void chip_config(void)
178
193
#define HW_TO_DESC (endpoint ) (endpoint|(((endpoint&1 )?0x0 :0x80 )))
179
194
180
195
/* Global variables for Control Pipe */
181
- #if defined(TARGET_M2351) || defined(TARGET_M261)
196
+ #if defined(TARGET_M2351) || defined(TARGET_M261) || defined(TARGET_M2354)
182
197
extern uint8_t g_USBD_au8SetupPacket[]; /* !< Setup packet buffer */
183
198
uint8_t * g_usbd_SetupPacket=g_USBD_au8SetupPacket;
184
199
#else
@@ -235,9 +250,12 @@ void USBPhyHw::init(USBPhyEvents *events)
235
250
sleep_manager_lock_deep_sleep ();
236
251
}
237
252
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
239
257
SYS_UnlockReg ();
240
-
258
+ # endif
241
259
s_ep_buf_ind = 0 ;
242
260
243
261
chip_config ();
@@ -515,6 +533,7 @@ void USBPhyHw::ep0_write(uint8_t *buffer, uint32_t size)
515
533
NVT_USB_Debug ((" ### %s[%d]\n " , __FUNCTION__, __LINE__));
516
534
if (buffer && size)
517
535
{
536
+ NVT_USB_Debug ((" ### %s[%d]\n " , __FUNCTION__, __LINE__));
518
537
if (s_ep_data_bit[0 ] & 1 )
519
538
USBD_SET_DATA1 (EP0);
520
539
else
@@ -527,6 +546,7 @@ void USBPhyHw::ep0_write(uint8_t *buffer, uint32_t size)
527
546
}
528
547
else
529
548
{
549
+ NVT_USB_Debug ((" ### %s[%d]\n " , __FUNCTION__, __LINE__));
530
550
s_ep_data_bit[0 ] = 1 ;
531
551
USBD_SET_DATA1 (EP0);
532
552
wait_us (500 );
@@ -843,7 +863,7 @@ void USBPhyHw::process()
843
863
ep_status = (USBD->EPSTS >> (ep_hw_index * 4 + 8 )) & 0xF ;
844
864
else
845
865
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)
847
867
if (ep_hw_index < 8 )
848
868
ep_status = (USBD->EPSTS0 >> (ep_hw_index * 4 )) & 0xF ;
849
869
else
0 commit comments