summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhathach <[email protected]>2018-12-05 11:53:56 +0700
committerhathach <[email protected]>2018-12-05 11:53:56 +0700
commitc1336dff03032288d48704b055b507e175df2ac6 (patch)
tree31239a924f8a1ab0df4e490cba65f09b490061fd
parent9176b7b1da80ae8872deba74263431b843650c13 (diff)
lpc move Chip_USB_Init() out of stack to bsp
-rw-r--r--hw/bsp/ea4357/board_ea4357.c45
-rw-r--r--hw/bsp/lpcxpresso11u68/board_lpcxpresso11u68.c3
-rw-r--r--hw/bsp/lpcxpresso1347/board_lpcxpresso1347.c4
-rw-r--r--hw/bsp/mcb1800/board_mcb1800.c43
-rw-r--r--src/portable/nxp/lpc11_13_15/dcd_lpc11_13_15.c3
-rw-r--r--src/portable/nxp/lpc18_43/hal_lpc18_43.c59
6 files changed, 93 insertions, 64 deletions
diff --git a/hw/bsp/ea4357/board_ea4357.c b/hw/bsp/ea4357/board_ea4357.c
index d59e4cb3c..42b71e992 100644
--- a/hw/bsp/ea4357/board_ea4357.c
+++ b/hw/bsp/ea4357/board_ea4357.c
@@ -40,6 +40,7 @@
#include "../board.h"
#include "pca9532.h"
+#include "tusb.h"
#define BOARD_UART_PORT LPC_USART0
#define BOARD_UART_PIN_PORT 0x0f
@@ -171,6 +172,50 @@ void board_init(void)
#endif
//------------- USB -------------//
+ enum {
+ USBMODE_DEVICE = 2,
+ USBMODE_HOST = 3
+ };
+
+ enum {
+ USBMODE_VBUS_LOW = 0,
+ USBMODE_VBUS_HIGH = 1
+ };
+
+ // USB0
+#if CFG_TUSB_RHPORT0_MODE
+ Chip_USB0_Init();
+
+ // Reset controller
+ LPC_USB0->USBCMD_D |= 0x02;
+
+ // Set mode
+ #if CFG_TUSB_RHPORT0_MODE & OPT_MODE_HOST
+ LPC_USB0->USBMODE_H = USBMODE_HOST | (USBMODE_VBUS_HIGH << 5);
+ #else // TODO OTG
+ LPC_USB0->USBMODE_D = USBMODE_DEVICE;
+ LPC_USB0->OTGSC = (1<<3) | (1<<0) /*| (1<<16)| (1<<24)| (1<<25)| (1<<26)| (1<<27)| (1<<28)| (1<<29)| (1<<30)*/;
+ #endif
+#endif
+
+ // USB1
+#if CFG_TUSB_RHPORT1_MODE
+ Chip_USB1_Init();
+
+ // Reset controller
+ LPC_USB1->USBCMD_D |= 0x02;
+
+ // Set mode
+ #if CFG_TUSB_RHPORT1_MODE & OPT_MODE_HOST
+ LPC_USB1->USBMODE_H = USBMODE_HOST | (USBMODE_VBUS_HIGH << 5);
+ #else // TODO OTG
+ LPC_USB1->USBMODE_D = USBMODE_DEVICE;
+ #endif
+
+ // USB1 as fullspeed
+ LPC_USB1->PORTSC1_D |= (1<<24);
+#endif
+
// USB0 Vbus Power: P2_3 on EA4357 channel B U20 GPIO26 active low (base board)
Chip_SCU_PinMuxSet(2, 3, SCU_MODE_PULLUP | SCU_MODE_INBUFF_EN | SCU_MODE_FUNC7);
diff --git a/hw/bsp/lpcxpresso11u68/board_lpcxpresso11u68.c b/hw/bsp/lpcxpresso11u68/board_lpcxpresso11u68.c
index 4c8e0809c..b9ef30ab8 100644
--- a/hw/bsp/lpcxpresso11u68/board_lpcxpresso11u68.c
+++ b/hw/bsp/lpcxpresso11u68/board_lpcxpresso11u68.c
@@ -95,6 +95,9 @@ void board_init(void)
//------------- UART -------------//
//UARTInit(CFG_UART_BAUDRATE);
+
+ // USB
+ Chip_USB_Init(); // Setup PLL clock, and power
}
/*------------------------------------------------------------------*/
diff --git a/hw/bsp/lpcxpresso1347/board_lpcxpresso1347.c b/hw/bsp/lpcxpresso1347/board_lpcxpresso1347.c
index 1ae21efab..94ad34a6f 100644
--- a/hw/bsp/lpcxpresso1347/board_lpcxpresso1347.c
+++ b/hw/bsp/lpcxpresso1347/board_lpcxpresso1347.c
@@ -72,8 +72,6 @@ static const PINMUX_GRP_T pinmuxing[] =
{0, 1, (IOCON_FUNC1 | IOCON_RESERVED_BIT_7 | IOCON_MODE_INACT)}, /* PIO0_1 used for CLKOUT */
{0, 2, (IOCON_FUNC1 | IOCON_RESERVED_BIT_7 | IOCON_MODE_PULLUP)}, /* PIO0_2 used for SSEL */
{0, 3, (IOCON_FUNC1 | IOCON_RESERVED_BIT_7 | IOCON_MODE_INACT)}, /* PIO0_3 used for USB_VBUS */
- {0, 4, (IOCON_FUNC1 | IOCON_FASTI2C_EN)}, /* PIO0_4 used for SCL */
- {0, 5, (IOCON_FUNC1 | IOCON_FASTI2C_EN)}, /* PIO0_5 used for SDA */
{0, 6, (IOCON_FUNC1 | IOCON_RESERVED_BIT_7 | IOCON_MODE_INACT)}, /* PIO0_6 used for USB_CONNECT */
{0, 8, (IOCON_FUNC1 | IOCON_RESERVED_BIT_7 | IOCON_MODE_INACT)}, /* PIO0_8 used for MISO0 */
{0, 9, (IOCON_FUNC1 | IOCON_RESERVED_BIT_7 | IOCON_MODE_INACT)}, /* PIO0_9 used for MOSI0 */
@@ -111,6 +109,8 @@ void board_init(void)
//------------- UART -------------//
//UARTInit(CFG_UART_BAUDRATE);
+ // USB
+ Chip_USB_Init(); // Setup PLL clock, and power
}
/*------------------------------------------------------------------*/
diff --git a/hw/bsp/mcb1800/board_mcb1800.c b/hw/bsp/mcb1800/board_mcb1800.c
index 2aed87418..5b7a846ef 100644
--- a/hw/bsp/mcb1800/board_mcb1800.c
+++ b/hw/bsp/mcb1800/board_mcb1800.c
@@ -143,6 +143,49 @@ void board_init(void)
#endif
//------------- USB -------------//
+ enum {
+ USBMODE_DEVICE = 2,
+ USBMODE_HOST = 3
+ };
+
+ enum {
+ USBMODE_VBUS_LOW = 0,
+ USBMODE_VBUS_HIGH = 1
+ };
+
+ // USB0
+#if CFG_TUSB_RHPORT0_MODE
+ Chip_USB0_Init();
+
+ // Reset controller
+ LPC_USB0->USBCMD_D |= 0x02;
+
+ // Set mode
+ #if CFG_TUSB_RHPORT0_MODE & OPT_MODE_HOST
+ LPC_USB0->USBMODE_H = USBMODE_HOST | (USBMODE_VBUS_HIGH << 5);
+ #else // TODO OTG
+ LPC_USB0->USBMODE_D = USBMODE_DEVICE;
+ LPC_USB0->OTGSC = (1<<3) | (1<<0) /*| (1<<16)| (1<<24)| (1<<25)| (1<<26)| (1<<27)| (1<<28)| (1<<29)| (1<<30)*/;
+ #endif
+#endif
+
+ // USB1
+#if CFG_TUSB_RHPORT1_MODE
+ Chip_USB1_Init();
+
+ // Reset controller
+ LPC_USB1->USBCMD_D |= 0x02;
+
+ // Set mode
+ #if CFG_TUSB_RHPORT1_MODE & OPT_MODE_HOST
+ LPC_USB1->USBMODE_H = USBMODE_HOST | (USBMODE_VBUS_HIGH << 5);
+ #else // TODO OTG
+ LPC_USB1->USBMODE_D = USBMODE_DEVICE;
+ #endif
+
+ // USB1 as fullspeed
+ LPC_USB1->PORTSC1_D |= (1<<24);
+#endif
}
//------------- LED -------------//
diff --git a/src/portable/nxp/lpc11_13_15/dcd_lpc11_13_15.c b/src/portable/nxp/lpc11_13_15/dcd_lpc11_13_15.c
index 1ae070a73..9c5991cef 100644
--- a/src/portable/nxp/lpc11_13_15/dcd_lpc11_13_15.c
+++ b/src/portable/nxp/lpc11_13_15/dcd_lpc11_13_15.c
@@ -180,9 +180,6 @@ bool dcd_init(uint8_t rhport)
{
(void) rhport;
- // Setup PLL clock, and power
- Chip_USB_Init();
-
LPC_USB->EPLISTSTART = (uint32_t) _dcd.ep;
LPC_USB->DATABUFSTART = SRAM_REGION;
diff --git a/src/portable/nxp/lpc18_43/hal_lpc18_43.c b/src/portable/nxp/lpc18_43/hal_lpc18_43.c
index f91cf1309..152072cab 100644
--- a/src/portable/nxp/lpc18_43/hal_lpc18_43.c
+++ b/src/portable/nxp/lpc18_43/hal_lpc18_43.c
@@ -42,16 +42,6 @@
#include "chip.h"
-enum {
- LPC43XX_USBMODE_DEVICE = 2,
- LPC43XX_USBMODE_HOST = 3
-};
-
-enum {
- LPC43XX_USBMODE_VBUS_LOW = 0,
- LPC43XX_USBMODE_VBUS_HIGH = 1
-};
-
void tusb_hal_int_enable(uint8_t rhport)
{
NVIC_EnableIRQ(rhport ? USB1_IRQn : USB0_IRQn);
@@ -62,57 +52,8 @@ void tusb_hal_int_disable(uint8_t rhport)
NVIC_DisableIRQ(rhport ? USB1_IRQn : USB0_IRQn);
}
-
-static void hal_controller_reset(uint8_t rhport)
-{ // TODO timeout expired to prevent trap
- volatile uint32_t * p_reg_usbcmd;
-
- p_reg_usbcmd = (rhport ? &LPC_USB1->USBCMD_D : &LPC_USB0->USBCMD_D);
-// NXP chip powered with non-host mode --> sts bit is not correctly reflected
- (*p_reg_usbcmd) |= BIT_(1);
-
-// tu_timeout_t timeout;
-// tu_timeout_set(&timeout, 2); // should not take longer the time to stop controller
- while( ((*p_reg_usbcmd) & BIT_(1)) /*&& !tu_timeout_expired(&timeout)*/) {}
-//
-// return tu_timeout_expired(&timeout) ? TUSB_ERROR_OSAL_TIMEOUT : TUSB_ERROR_NONE;
-}
-
bool tusb_hal_init(void)
{
- // USB0
-#if CFG_TUSB_RHPORT0_MODE
- Chip_USB0_Init();
-
- // reset controller & set role
- hal_controller_reset(0);
-
- #if CFG_TUSB_RHPORT0_MODE & OPT_MODE_HOST
- LPC_USB0->USBMODE_H = LPC43XX_USBMODE_HOST | (LPC43XX_USBMODE_VBUS_HIGH << 5);
- #else // TODO OTG
- LPC_USB0->USBMODE_D = LPC43XX_USBMODE_DEVICE;
- LPC_USB0->OTGSC = (1<<3) | (1<<0) /*| (1<<16)| (1<<24)| (1<<25)| (1<<26)| (1<<27)| (1<<28)| (1<<29)| (1<<30)*/;
- #if CFG_TUD_FULLSPEED // TODO for easy testing
- LPC_USB0->PORTSC1_D |= (1<<24); // force full speed
- #endif
- #endif
-#endif
-
- // USB1
-#if CFG_TUSB_RHPORT1_MODE
- Chip_USB1_Init();
-
- hal_controller_reset(1);
-
- #if CFG_TUSB_RHPORT1_MODE & OPT_MODE_HOST
- LPC_USB1->USBMODE_H = LPC43XX_USBMODE_HOST | (LPC43XX_USBMODE_VBUS_HIGH << 5);
- #else // TODO OTG
- LPC_USB1->USBMODE_D = LPC43XX_USBMODE_DEVICE;
- #endif
-
- LPC_USB1->PORTSC1_D |= (1<<24); // TODO abstract, force rhport to fullspeed
-#endif
-
return true;
}