19
19
#include " mbed_critical.h"
20
20
21
21
static USBPhyHw *instance;
22
-
23
-
24
- // #undef MBED_CONF_TARGET_USB_DEVICE_HSUSBD
25
- // #define MBED_CONF_TARGET_USB_DEVICE_HSUSBD 1 /* USB 1.1 Only */
26
22
27
23
#if defined (TARGET_M451)
28
24
#undef MBED_CONF_TARGET_USB_DEVICE_HSUSBD
29
25
#define MBED_CONF_TARGET_USB_DEVICE_HSUSBD 0 /* USB 1.1 Only */
30
- #elif defined (TARGET_M2351)
26
+ #elif defined (TARGET_M2351) || defined(TARGET_M261)
31
27
#undef MBED_CONF_TARGET_USB_DEVICE_HSUSBD
32
28
#define MBED_CONF_TARGET_USB_DEVICE_HSUSBD 0 /* USB 1.1 Only */
29
+ #define USBD_SET_ADDRESS 0x05ul
33
30
#elif defined (TARGET_NANO100)
34
31
#undef MBED_CONF_TARGET_USB_DEVICE_HSUSBD
35
32
#define MBED_CONF_TARGET_USB_DEVICE_HSUSBD 0 /* USB 1.1 Only */
@@ -38,8 +35,7 @@ static USBPhyHw *instance;
38
35
#undef MBED_CONF_TARGET_USB_DEVICE_HSUSBD
39
36
#define MBED_CONF_TARGET_USB_DEVICE_HSUSBD 1 /* USB 2.0 Only */
40
37
#endif
41
- #undef MBED_CONF_TARGET_USB_DEVICE_HSUSBD
42
- #define MBED_CONF_TARGET_USB_DEVICE_HSUSBD 0 /* USB 1.1 Only */
38
+
43
39
void chip_config (void )
44
40
{
45
41
#if defined(TARGET_M451)
@@ -83,7 +79,7 @@ void chip_config(void)
83
79
CLK_EnableModuleClock (HSUSBD_MODULE);
84
80
#endif
85
81
86
- #elif defined (TARGET_M2351)
82
+ #elif defined (TARGET_M2351) || defined(TARGET_M261)
87
83
88
84
/* Select USBD */
89
85
SYS->USBPHY = (SYS->USBPHY & ~SYS_USBPHY_USBROLE_Msk) | SYS_USBPHY_OTGPHYEN_Msk | SYS_USBPHY_SBO_Msk;
@@ -92,7 +88,7 @@ void chip_config(void)
92
88
CLK_EnableModuleClock (USBD_MODULE);
93
89
94
90
/* Select IP clock source */
95
- CLK_SetModuleClock (UART0_MODULE, CLK_CLKSEL1_UART0SEL_HIRC, CLK_CLKDIV0_UART0 (1 ));
91
+ CLK_SetModuleClock (USBD_MODULE, CLK_CLKSEL0_USBSEL_HIRC48, CLK_CLKDIV0_USB (1 ));
96
92
97
93
/* USBD multi-function pins for VBUS, D+, D-, and ID pins */
98
94
SYS->GPA_MFPH &= ~(SYS_GPA_MFPH_PA12MFP_Msk | SYS_GPA_MFPH_PA13MFP_Msk | SYS_GPA_MFPH_PA14MFP_Msk | SYS_GPA_MFPH_PA15MFP_Msk);
@@ -126,7 +122,12 @@ void chip_config(void)
126
122
#define HW_TO_DESC (endpoint ) (endpoint|(((endpoint&1 )?0x0 :0x80 )))
127
123
128
124
/* Global variables for Control Pipe */
125
+ #if defined(TARGET_M261)
126
+ extern uint8_t g_USBD_au8SetupPacket[]; /* !< Setup packet buffer */
127
+ uint8_t * g_usbd_SetupPacket=g_USBD_au8SetupPacket;
128
+ #else
129
129
extern uint8_t g_usbd_SetupPacket[]; /* !< Setup packet buffer */
130
+ #endif
130
131
static volatile uint32_t s_ep_compl = 0 ;
131
132
static volatile uint32_t s_ep_buf_ind = 8 ;
132
133
static volatile uint32_t s_ep0_max_packet_size = 8 ;
@@ -643,7 +644,7 @@ void USBPhyHw::process()
643
644
/* Enable USB but disable PHY */
644
645
USBD_DISABLE_PHY ();
645
646
}
646
- if (u32State & USBD_ATTR_RESUME_Msk)
647
+ if (u32State & USBD_ATTR_RESUME_Msk)
647
648
{
648
649
/* Enable USB and enable PHY */
649
650
USBD_ENABLE_USB ();
@@ -671,17 +672,20 @@ void USBPhyHw::process()
671
672
USBD_CLR_INT_FLAG (USBD_INTSTS_EP0);
672
673
/* control IN */
673
674
events->ep0_in ();
674
-
675
675
/* In ACK for Set address */
676
- if ((g_usbd_SetupPacket[0 ] == REQ_STANDARD) && (g_usbd_SetupPacket[1 ] == USBD_SET_ADDRESS))
676
+ #if defined(TARGET_M480) || defined(TARGET_M451)
677
+ if ((g_usbd_SetupPacket[0 ] == REQ_STANDARD) && (g_usbd_SetupPacket[1 ] == USBD_SET_ADDRESS))
678
+ #else
679
+ if ((g_usbd_SetupPacket[0 ] == REQ_STANDARD) && (g_usbd_SetupPacket[1 ] == SET_ADDRESS))
680
+ #endif
677
681
{
678
682
if ((USBD_GET_ADDR () != s_usb_addr) && (USBD_GET_ADDR () == 0 ))
679
683
{
680
684
USBD_SET_ADDR (s_usb_addr);
681
685
}
682
686
}
683
687
}
684
- if (u32IntSts & USBD_INTSTS_EP1)
688
+ if (u32IntSts & USBD_INTSTS_EP1)
685
689
{
686
690
/* Clear event flag */
687
691
USBD_CLR_INT_FLAG (USBD_INTSTS_EP1);
@@ -704,7 +708,7 @@ void USBPhyHw::process()
704
708
ep_status = (USBD->EPSTS >> (ep_hw_index * 4 ) + 8 ) & 0x7 ;
705
709
else
706
710
ep_status = (USBD->EPSTS2 >> ((ep_hw_index - 4 ) * 4 )) & 0x7 ;
707
- #elif defined(TARGET_M480) || defined(TARGET_M2351)
711
+ #elif defined(TARGET_M480) || defined(TARGET_M2351) || defined(TARGET_M261)
708
712
if (ep_hw_index < 8 )
709
713
ep_status = (USBD->EPSTS0 >> (ep_hw_index * 4 )) & 0x7 ;
710
714
else
@@ -720,7 +724,7 @@ void USBPhyHw::process()
720
724
if (s_ep_valid[NU_EPH2EPL (ep_hw_index)])
721
725
events->out (HW_TO_DESC (ep_hw_index));
722
726
s_ep_valid[NU_EPH2EPL (ep_hw_index)] = 1 ;
723
- }
727
+ }
724
728
else if (ep_status == 0x00 || ep_status == 0x07 )
725
729
{ /* TX */
726
730
s_ep_compl &= ~(1 << (NU_EPH2EPL (ep_hw_index)));
@@ -796,7 +800,7 @@ void USBD_CtrlInput(void)
796
800
USBD->CEPDAT_BYTE = *(uint8_t *)(g_usbd_CtrlInPointer++);
797
801
USBD->CEPTXCNT = g_usbd_CtrlMaxPktSize;
798
802
g_usb_CtrlInSize -= g_usbd_CtrlMaxPktSize;
799
- }
803
+ }
800
804
else
801
805
{
802
806
for (i=0 ; i<g_usb_CtrlInSize; i++)
@@ -806,7 +810,7 @@ void USBD_CtrlInput(void)
806
810
g_usb_CtrlInSize = 0 ;
807
811
}
808
812
}
809
- #elif defined (TARGET_M480)
813
+ #elif defined (TARGET_M480)
810
814
void HSUSBD_CtrlInput (void )
811
815
{
812
816
unsigned volatile i;
@@ -818,7 +822,7 @@ void HSUSBD_CtrlInput(void)
818
822
HSUSBD->CEPDAT_BYTE = *(uint8_t *)(g_usbd_CtrlInPointer++);
819
823
HSUSBD->CEPTXCNT = g_usbd_CtrlMaxPktSize;
820
824
g_usb_CtrlInSize -= g_usbd_CtrlMaxPktSize;
821
- }
825
+ }
822
826
else
823
827
{
824
828
for (i=0 ; i<g_usb_CtrlInSize; i++)
@@ -866,7 +870,7 @@ void USBPhyHw::init(USBPhyEvents *events)
866
870
867
871
USBD_ENABLE_PHY ();
868
872
869
- while (1 )
873
+ while (1 )
870
874
{
871
875
USBD->EPAMPS = 0x20 ;
872
876
if (USBD->EPAMPS == 0x20 )
@@ -1202,7 +1206,7 @@ void USBPhyHw::ep0_write(uint8_t *buffer, uint32_t size)
1202
1206
g_usb_CtrlInSize = size;
1203
1207
USBD_CLR_CEP_INT_FLAG (USBD_CEPINTSTS_INTKIF_Msk);
1204
1208
USBD_ENABLE_CEP_INT (USBD_CEPINTEN_INTKIEN_Msk);
1205
- }
1209
+ }
1206
1210
else
1207
1211
{
1208
1212
/* Status stage */
@@ -1217,7 +1221,7 @@ void USBPhyHw::ep0_write(uint8_t *buffer, uint32_t size)
1217
1221
g_usb_CtrlInSize = size;
1218
1222
HSUSBD_CLR_CEP_INT_FLAG (HSUSBD_CEPINTSTS_INTKIF_Msk);
1219
1223
HSUSBD_ENABLE_CEP_INT (HSUSBD_CEPINTEN_INTKIEN_Msk);
1220
- }
1224
+ }
1221
1225
else
1222
1226
{
1223
1227
/* Status stage */
@@ -1265,7 +1269,7 @@ bool USBPhyHw::endpoint_add(usb_ep_t endpoint, uint32_t max_packet, usb_ep_type_
1265
1269
uint32_t ep_type;
1266
1270
uint32_t ep_hw_index = NU_EPL2EPH (DESC_TO_LOG (endpoint));
1267
1271
1268
- #if defined (TARGET_NUC472)
1272
+ #if defined (TARGET_NUC472)
1269
1273
USBD_SetEpBufAddr (ep_hw_index, s_ep_buf_ind, max_packet);
1270
1274
s_ep_buf_ind += max_packet;
1271
1275
USBD_SET_MAX_PAYLOAD (ep_hw_index, max_packet);
@@ -1298,7 +1302,7 @@ bool USBPhyHw::endpoint_add(usb_ep_t endpoint, uint32_t max_packet, usb_ep_type_
1298
1302
HSUSBD_SetEpBufAddr (ep_hw_index, s_ep_buf_ind, max_packet);
1299
1303
s_ep_buf_ind += max_packet;
1300
1304
HSUSBD_SET_MAX_PAYLOAD (ep_hw_index, max_packet);
1301
- switch (type)
1305
+ switch (type)
1302
1306
{
1303
1307
case USB_EP_TYPE_INT:
1304
1308
ep_type = HSUSBD_EP_CFG_TYPE_INT;
@@ -1418,7 +1422,7 @@ bool USBPhyHw::endpoint_read_result_core(usb_ep_t endpoint, uint8_t *data, uint3
1418
1422
gEpReadCnt = HSUSBD_GET_EP_DATA_COUNT (ep_hw_index);
1419
1423
#endif
1420
1424
1421
- if (gEpReadCnt == 0 )
1425
+ if (gEpReadCnt == 0 )
1422
1426
{
1423
1427
*bytes_read = 0 ;
1424
1428
return true ;
@@ -1468,7 +1472,7 @@ bool USBPhyHw::endpoint_read_result_core(usb_ep_t endpoint, uint8_t *data, uint3
1468
1472
1469
1473
while (1 )
1470
1474
{
1471
- #if defined (TARGET_NUC472)
1475
+ #if defined (TARGET_NUC472)
1472
1476
if (!(USBD->DMACTL & USBD_DMACTL_DMAEN_Msk))
1473
1477
break ;
1474
1478
else if (!USBD_IS_ATTACHED ())
@@ -1491,7 +1495,7 @@ bool USBPhyHw::endpoint_read_result_core(usb_ep_t endpoint, uint8_t *data, uint3
1491
1495
1492
1496
if (len)
1493
1497
{
1494
- #if defined (TARGET_NUC472)
1498
+ #if defined (TARGET_NUC472)
1495
1499
USBD_SET_DMA_LEN (len);
1496
1500
USBD_SET_DMA_ADDR (buffer);
1497
1501
USBD_SET_DMA_WRITE (ep_logic_index);
@@ -1628,7 +1632,7 @@ bool USBPhyHw::endpoint_write(usb_ep_t endpoint, uint8_t *data, uint32_t size)
1628
1632
1629
1633
if (len)
1630
1634
{
1631
- #if defined (TARGET_NUC472)
1635
+ #if defined (TARGET_NUC472)
1632
1636
USBD_SET_DMA_LEN (len);
1633
1637
USBD_SET_DMA_ADDR ((uint32_t )buffer);
1634
1638
USBD_SET_DMA_READ (ep_logic_index);
0 commit comments