Skip to content

Commit 5272550

Browse files
committed
Refine M487 USBD code and build M263A successfully
1 parent d15b07f commit 5272550

File tree

2 files changed

+32
-28
lines changed

2 files changed

+32
-28
lines changed

targets/TARGET_NUVOTON/USBEndpoints_Nuvoton.cpp

Lines changed: 31 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,14 @@
1919
#include "mbed_critical.h"
2020

2121
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 */
2622

2723
#if defined (TARGET_M451)
2824
#undef MBED_CONF_TARGET_USB_DEVICE_HSUSBD
2925
#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)
3127
#undef MBED_CONF_TARGET_USB_DEVICE_HSUSBD
3228
#define MBED_CONF_TARGET_USB_DEVICE_HSUSBD 0 /* USB 1.1 Only */
29+
#define USBD_SET_ADDRESS 0x05ul
3330
#elif defined (TARGET_NANO100)
3431
#undef MBED_CONF_TARGET_USB_DEVICE_HSUSBD
3532
#define MBED_CONF_TARGET_USB_DEVICE_HSUSBD 0 /* USB 1.1 Only */
@@ -38,8 +35,7 @@ static USBPhyHw *instance;
3835
#undef MBED_CONF_TARGET_USB_DEVICE_HSUSBD
3936
#define MBED_CONF_TARGET_USB_DEVICE_HSUSBD 1 /* USB 2.0 Only */
4037
#endif
41-
#undef MBED_CONF_TARGET_USB_DEVICE_HSUSBD
42-
#define MBED_CONF_TARGET_USB_DEVICE_HSUSBD 0 /* USB 1.1 Only */
38+
4339
void chip_config(void)
4440
{
4541
#if defined(TARGET_M451)
@@ -83,7 +79,7 @@ void chip_config(void)
8379
CLK_EnableModuleClock(HSUSBD_MODULE);
8480
#endif
8581

86-
#elif defined (TARGET_M2351)
82+
#elif defined (TARGET_M2351) || defined(TARGET_M261)
8783

8884
/* Select USBD */
8985
SYS->USBPHY = (SYS->USBPHY & ~SYS_USBPHY_USBROLE_Msk) | SYS_USBPHY_OTGPHYEN_Msk | SYS_USBPHY_SBO_Msk;
@@ -92,7 +88,7 @@ void chip_config(void)
9288
CLK_EnableModuleClock(USBD_MODULE);
9389

9490
/* 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));
9692

9793
/* USBD multi-function pins for VBUS, D+, D-, and ID pins */
9894
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)
126122
#define HW_TO_DESC(endpoint) (endpoint|(((endpoint&1)?0x0:0x80)))
127123

128124
/* 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
129129
extern uint8_t g_usbd_SetupPacket[]; /*!< Setup packet buffer */
130+
#endif
130131
static volatile uint32_t s_ep_compl = 0;
131132
static volatile uint32_t s_ep_buf_ind = 8;
132133
static volatile uint32_t s_ep0_max_packet_size = 8;
@@ -643,7 +644,7 @@ void USBPhyHw::process()
643644
/* Enable USB but disable PHY */
644645
USBD_DISABLE_PHY();
645646
}
646-
if(u32State & USBD_ATTR_RESUME_Msk)
647+
if(u32State & USBD_ATTR_RESUME_Msk)
647648
{
648649
/* Enable USB and enable PHY */
649650
USBD_ENABLE_USB();
@@ -671,17 +672,20 @@ void USBPhyHw::process()
671672
USBD_CLR_INT_FLAG(USBD_INTSTS_EP0);
672673
/* control IN */
673674
events->ep0_in();
674-
675675
/* 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
677681
{
678682
if((USBD_GET_ADDR() != s_usb_addr) && (USBD_GET_ADDR() == 0))
679683
{
680684
USBD_SET_ADDR(s_usb_addr);
681685
}
682686
}
683687
}
684-
if(u32IntSts & USBD_INTSTS_EP1)
688+
if(u32IntSts & USBD_INTSTS_EP1)
685689
{
686690
/* Clear event flag */
687691
USBD_CLR_INT_FLAG(USBD_INTSTS_EP1);
@@ -704,7 +708,7 @@ void USBPhyHw::process()
704708
ep_status = (USBD->EPSTS >> (ep_hw_index * 4) + 8) & 0x7;
705709
else
706710
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)
708712
if(ep_hw_index < 8)
709713
ep_status = (USBD->EPSTS0 >> (ep_hw_index * 4)) & 0x7;
710714
else
@@ -720,7 +724,7 @@ void USBPhyHw::process()
720724
if(s_ep_valid[NU_EPH2EPL(ep_hw_index)])
721725
events->out(HW_TO_DESC(ep_hw_index));
722726
s_ep_valid[NU_EPH2EPL(ep_hw_index)] = 1;
723-
}
727+
}
724728
else if(ep_status == 0x00 || ep_status == 0x07)
725729
{ /* TX */
726730
s_ep_compl &= ~(1 << (NU_EPH2EPL(ep_hw_index)));
@@ -796,7 +800,7 @@ void USBD_CtrlInput(void)
796800
USBD->CEPDAT_BYTE = *(uint8_t *)(g_usbd_CtrlInPointer++);
797801
USBD->CEPTXCNT = g_usbd_CtrlMaxPktSize;
798802
g_usb_CtrlInSize -= g_usbd_CtrlMaxPktSize;
799-
}
803+
}
800804
else
801805
{
802806
for (i=0; i<g_usb_CtrlInSize; i++)
@@ -806,7 +810,7 @@ void USBD_CtrlInput(void)
806810
g_usb_CtrlInSize = 0;
807811
}
808812
}
809-
#elif defined (TARGET_M480)
813+
#elif defined (TARGET_M480)
810814
void HSUSBD_CtrlInput(void)
811815
{
812816
unsigned volatile i;
@@ -818,7 +822,7 @@ void HSUSBD_CtrlInput(void)
818822
HSUSBD->CEPDAT_BYTE = *(uint8_t *)(g_usbd_CtrlInPointer++);
819823
HSUSBD->CEPTXCNT = g_usbd_CtrlMaxPktSize;
820824
g_usb_CtrlInSize -= g_usbd_CtrlMaxPktSize;
821-
}
825+
}
822826
else
823827
{
824828
for (i=0; i<g_usb_CtrlInSize; i++)
@@ -866,7 +870,7 @@ void USBPhyHw::init(USBPhyEvents *events)
866870

867871
USBD_ENABLE_PHY();
868872

869-
while (1)
873+
while (1)
870874
{
871875
USBD->EPAMPS = 0x20;
872876
if (USBD->EPAMPS == 0x20)
@@ -1202,7 +1206,7 @@ void USBPhyHw::ep0_write(uint8_t *buffer, uint32_t size)
12021206
g_usb_CtrlInSize = size;
12031207
USBD_CLR_CEP_INT_FLAG(USBD_CEPINTSTS_INTKIF_Msk);
12041208
USBD_ENABLE_CEP_INT(USBD_CEPINTEN_INTKIEN_Msk);
1205-
}
1209+
}
12061210
else
12071211
{
12081212
/* Status stage */
@@ -1217,7 +1221,7 @@ void USBPhyHw::ep0_write(uint8_t *buffer, uint32_t size)
12171221
g_usb_CtrlInSize = size;
12181222
HSUSBD_CLR_CEP_INT_FLAG(HSUSBD_CEPINTSTS_INTKIF_Msk);
12191223
HSUSBD_ENABLE_CEP_INT(HSUSBD_CEPINTEN_INTKIEN_Msk);
1220-
}
1224+
}
12211225
else
12221226
{
12231227
/* Status stage */
@@ -1265,7 +1269,7 @@ bool USBPhyHw::endpoint_add(usb_ep_t endpoint, uint32_t max_packet, usb_ep_type_
12651269
uint32_t ep_type;
12661270
uint32_t ep_hw_index = NU_EPL2EPH(DESC_TO_LOG(endpoint));
12671271

1268-
#if defined (TARGET_NUC472)
1272+
#if defined (TARGET_NUC472)
12691273
USBD_SetEpBufAddr(ep_hw_index, s_ep_buf_ind, max_packet);
12701274
s_ep_buf_ind += max_packet;
12711275
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_
12981302
HSUSBD_SetEpBufAddr(ep_hw_index, s_ep_buf_ind, max_packet);
12991303
s_ep_buf_ind += max_packet;
13001304
HSUSBD_SET_MAX_PAYLOAD(ep_hw_index, max_packet);
1301-
switch (type)
1305+
switch (type)
13021306
{
13031307
case USB_EP_TYPE_INT:
13041308
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
14181422
gEpReadCnt = HSUSBD_GET_EP_DATA_COUNT(ep_hw_index);
14191423
#endif
14201424

1421-
if(gEpReadCnt == 0)
1425+
if(gEpReadCnt == 0)
14221426
{
14231427
*bytes_read = 0;
14241428
return true;
@@ -1468,7 +1472,7 @@ bool USBPhyHw::endpoint_read_result_core(usb_ep_t endpoint, uint8_t *data, uint3
14681472

14691473
while(1)
14701474
{
1471-
#if defined (TARGET_NUC472)
1475+
#if defined (TARGET_NUC472)
14721476
if (!(USBD->DMACTL & USBD_DMACTL_DMAEN_Msk))
14731477
break;
14741478
else if (!USBD_IS_ATTACHED())
@@ -1491,7 +1495,7 @@ bool USBPhyHw::endpoint_read_result_core(usb_ep_t endpoint, uint8_t *data, uint3
14911495

14921496
if(len)
14931497
{
1494-
#if defined (TARGET_NUC472)
1498+
#if defined (TARGET_NUC472)
14951499
USBD_SET_DMA_LEN(len);
14961500
USBD_SET_DMA_ADDR(buffer);
14971501
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)
16281632

16291633
if(len)
16301634
{
1631-
#if defined (TARGET_NUC472)
1635+
#if defined (TARGET_NUC472)
16321636
USBD_SET_DMA_LEN(len);
16331637
USBD_SET_DMA_ADDR((uint32_t)buffer);
16341638
USBD_SET_DMA_READ(ep_logic_index);

targets/TARGET_NUVOTON/USBEndpoints_Nuvoton.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
#define NUMBER_OF_LOGICAL_ENDPOINTS (12)
2626
#define NUMBER_OF_PHYSICAL_ENDPOINTS (NUMBER_OF_LOGICAL_ENDPOINTS)
2727
#endif
28-
#elif defined (TARGET_M2351)
28+
#elif defined (TARGET_M2351) || defined(TARGET_M261)
2929
#define NUMBER_OF_LOGICAL_ENDPOINTS (12)
3030
#define NUMBER_OF_PHYSICAL_ENDPOINTS (NUMBER_OF_LOGICAL_ENDPOINTS)
3131
#elif defined (TARGET_NANO100)

0 commit comments

Comments
 (0)