summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkkitayam <[email protected]>2021-11-29 00:40:23 +0900
committerkkitayam <[email protected]>2021-11-29 00:40:23 +0900
commitb3dddc77eb4527372640e1712c9e248b60dd8869 (patch)
tree3360be2a237b13002bed24a9f515c473fdbba320
parentb50cf856b323c4948883a9834d289fe5dd7f67ff (diff)
Add initialization sequence as a HOST
-rw-r--r--hw/bsp/msp432e4/family.c49
1 files changed, 38 insertions, 11 deletions
diff --git a/hw/bsp/msp432e4/family.c b/hw/bsp/msp432e4/family.c
index 7114da693..262dc1d30 100644
--- a/hw/bsp/msp432e4/family.c
+++ b/hw/bsp/msp432e4/family.c
@@ -33,7 +33,12 @@
//--------------------------------------------------------------------+
void USB0_IRQHandler(void)
{
+#if TUSB_OPT_HOST_ENABLED
+ tuh_int_handler(0);
+#endif
+#if TUSB_OPT_DEVICE_ENABLED
tud_int_handler(0);
+#endif
}
//--------------------------------------------------------------------+
@@ -42,6 +47,7 @@ void USB0_IRQHandler(void)
void board_init(void)
{
+ unsigned bits;
/* Turn off power domains that unused peripherals belong to */
SYSCTL->PCCAN = 0u;
#ifdef __MCU_HAS_LCD0__
@@ -80,20 +86,23 @@ void board_init(void)
#endif
/* USR_LED1 ON1 */
- SYSCTL->RCGCGPIO |= TU_BIT(CLK_LED);
- while (!(SYSCTL->PRGPIO & TU_BIT(CLK_LED))) ;
+ bits = TU_BIT(CLK_LED);
+ SYSCTL->RCGCGPIO |= bits;
+ while (bits != (SYSCTL->RCGCGPIO & bits)) ;
GPIO_LED->DIR = TU_BIT(GPIO_LED_PIN);
GPIO_LED->DEN = TU_BIT(GPIO_LED_PIN);
/* USR_SW1 PJ0 */
- SYSCTL->RCGCGPIO |= TU_BIT(CLK_BUTTON);
- while (!(SYSCTL->PRGPIO & TU_BIT(CLK_BUTTON))) ;
+ bits = TU_BIT(CLK_BUTTON);
+ SYSCTL->RCGCGPIO |= bits;
+ while (bits != (SYSCTL->RCGCGPIO & bits)) ;
GPIO_BUTTON->PUR = TU_BIT(GPIO_BUTTON_PIN);
GPIO_BUTTON->DEN = TU_BIT(GPIO_BUTTON_PIN);
/* UART PA0,1 */
- SYSCTL->RCGCGPIO |= 1u << 0;
- while (!(SYSCTL->PRGPIO & (1u << 0))) ;
+ bits = TU_BIT(0);
+ SYSCTL->RCGCGPIO |= bits;
+ while (bits != (SYSCTL->RCGCGPIO & bits)) ;
GPIOA->AFSEL = 3u;
GPIOA->PCTL = 0x11u;
GPIOA->DEN = 3u;
@@ -107,11 +116,22 @@ void board_init(void)
UART0->CC = UART_CC_CS_PIOSC; /* Set the baud clock to PIOSC */
UART0->CTL = UART_CTL_RXE | UART_CTL_TXE | UART_CTL_UARTEN;
- /* USB PB1(VBUS) PL6,7(DP,DM) */
- SYSCTL->RCGCGPIO |= (1u << 1) | (1u << 10);
- while (((1u << 1) | (1u << 10)) != (SYSCTL->PRGPIO & ((1u << 1) | (1u << 10)))) ;
- GPIOB->AMSEL = 1u << 1;
- GPIOL->AMSEL = (1u << 6) | (1u << 7);
+ /* USB PB0(ID) PB1(VBUS) PL6,7(DP,DM) */
+ bits = TU_BIT(1) | TU_BIT(10);
+ SYSCTL->RCGCGPIO |= bits;
+ while (bits != (SYSCTL->RCGCGPIO & bits)) ;
+ GPIOB->AMSEL = TU_BIT(0) | TU_BIT(1);
+ GPIOL->AMSEL = TU_BIT(6) | TU_BIT(7);
+
+#if TUSB_OPT_HOST_ENABLED
+ /* USB PD6(EPEN) */
+ bits = TU_BIT(3);
+ SYSCTL->RCGCGPIO |= bits;
+ while (bits != (SYSCTL->RCGCGPIO & bits)) ;
+ GPIOD->AFSEL = TU_BIT(6);
+ GPIOD->PCTL = 0x05000000u;
+ GPIOD->DEN = TU_BIT(6);
+#endif
SYSCTL->RCGCUSB = 1u; /* Open the clock gate for SYSCLK */
while (!(SYSCTL->PRUSB & (1u << 0))) ;
@@ -124,6 +144,13 @@ void board_init(void)
USB0->CC = USB_CC_CLKEN | (3u << USB_CC_CLKDIV_S); /* 60MHz = 240MHz / 4 */
__DMB(); /* Wait for completion of opening of the clock gate */
+#if TUSB_OPT_HOST_ENABLED
+ USB0->GPCS = USB_GPCS_DEVMOD_OTG;
+ USB0->EPC = USB_EPC_EPENDE | USB_EPC_EPEN_HIGH;
+#endif
+#if TUSB_OPT_DEVICE_ENABLED
+ USB0->GPCS = USB_GPCS_DEVMOD_DEVVBUS;
+#endif
}
//--------------------------------------------------------------------+