Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of USBDevice by
Revision 67:6e1433359654, committed 2016-10-07
- Comitter:
- enginerd
- Date:
- Fri Oct 07 15:41:30 2016 +0000
- Parent:
- 63:01321bd6ff89
- Child:
- 68:e62755e5cd1e
- Commit message:
- [MAX32620HSP] Adding support for new platform.
Changed in this revision
| USBDevice/USBHAL_Maxim.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/USBDevice/USBHAL_Maxim.cpp Tue May 03 00:16:32 2016 +0100
+++ b/USBDevice/USBHAL_Maxim.cpp Fri Oct 07 15:41:30 2016 +0000
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (C) 2015 Maxim Integrated Products, Inc., All Rights Reserved.
+ * Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@ -58,7 +58,7 @@
ep_buffer_t ep[MXC_USB_NUM_EP - 1];
} ep_buffer_descriptor_t;
-// Static storage for endpoint buffer descriptor table. Must be 512 byte alligned for DMA.
+// Static storage for endpoint buffer descriptor table. Must be 512 byte aligned for DMA.
#ifdef __IAR_SYSTEMS_ICC__
#pragma data_alignment = 512
#else
@@ -66,7 +66,7 @@
#endif
ep_buffer_descriptor_t ep_buffer_descriptor;
-// static storage for temporary data buffers. Must be 32 byte alligned.
+// static storage for temporary data buffers. Must be 32 byte aligned.
#ifdef __IAR_SYSTEMS_ICC__
#pragma data_alignment = 4
#else
@@ -74,7 +74,7 @@
#endif
static uint8_t aligned_buffer[NUMBER_OF_LOGICAL_ENDPOINTS][MXC_USB_MAX_PACKET];
-// contorl packet state
+// control packet state
static enum {
CTRL_NONE = 0,
CTRL_SETUP,
@@ -86,15 +86,20 @@
{
NVIC_DisableIRQ(USB_IRQn);
+#if defined(TARGET_MAX32600)
// The PLL must be enabled for USB
MBED_ASSERT(MXC_CLKMAN->clk_config & MXC_F_CLKMAN_CLK_CONFIG_PLL_ENABLE);
// Enable the USB clock
MXC_CLKMAN->clk_ctrl |= MXC_F_CLKMAN_CLK_CTRL_USB_GATE_N;
+#elif defined(TARGET_MAX32620)
+ // Enable the USB clock
+ MXC_CLKMAN->clk_ctrl |= MXC_F_CLKMAN_CLK_CTRL_USB_CLOCK_ENABLE;
+#endif
// reset the device
MXC_USB->cn = 0;
- MXC_USB->cn = 1;
+ MXC_USB->cn = MXC_F_USB_CN_USB_EN;
MXC_USB->dev_inten = 0;
MXC_USB->dev_cn = 0;
MXC_USB->dev_cn = MXC_F_USB_DEV_CN_URST;
@@ -124,6 +129,9 @@
// set the descriptor location
MXC_USB->ep_base = (uint32_t)&ep_buffer_descriptor;
+ // enable VBUS interrupts
+ MXC_USB->dev_inten = MXC_F_USB_DEV_INTEN_NO_VBUS | MXC_F_USB_DEV_INTEN_VBUS;
+
// attach IRQ handler and enable interrupts
instance = this;
NVIC_SetVector(USB_IRQn, (uint32_t)&_usbisr);
@@ -203,7 +211,11 @@
void USBHAL::EP0setup(uint8_t *buffer)
{
- memcpy(buffer, (void*)&MXC_USB->setup0, 8); // setup packet is fixed at 8 bytes
+ // Setup packet is fixed at 8 bytes
+ // Setup registers cannot be read in byte mode
+ uint32_t *ptr32 = (uint32_t*)buffer;
+ ptr32[0] = (uint32_t)MXC_USB->setup0;
+ ptr32[1] = (uint32_t)MXC_USB->setup1;
}
void USBHAL::EP0read(void)
