summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNathan Conrad <[email protected]>2019-09-09 16:14:38 -0400
committerNathan Conrad <[email protected]>2019-09-09 16:14:38 -0400
commitd1976a30b3929911a99667625ebc332ea0745c16 (patch)
treee2994e382a2a9bea8304a20a3b79205723c73ec6 /src
parent5ec59c2a30924e65a01b1130f0dc4ec6ef1ed954 (diff)
Update F3 BSP and create F070RB BSP. Both are untested (but compile).
Diffstat (limited to 'src')
-rw-r--r--src/portable/st/stm32_fsdev/dcd_stm32_fsdev.c33
-rw-r--r--src/portable/st/stm32_fsdev/dcd_stm32_fsdev_pvt_st.h31
2 files changed, 48 insertions, 16 deletions
diff --git a/src/portable/st/stm32_fsdev/dcd_stm32_fsdev.c b/src/portable/st/stm32_fsdev/dcd_stm32_fsdev.c
index 170a291e3..2411c1c37 100644
--- a/src/portable/st/stm32_fsdev/dcd_stm32_fsdev.c
+++ b/src/portable/st/stm32_fsdev/dcd_stm32_fsdev.c
@@ -99,9 +99,7 @@
#undef USE_HAL_DRIVER
#include "device/dcd.h"
-#include "stm32f0xx.h"
#include "portable/st/stm32_fsdev/dcd_stm32_fsdev_pvt_st.h"
-#include "uart_util.h"
/*****************************************************
@@ -120,7 +118,7 @@
#endif
#ifndef DCD_STM32_BTABLE_LENGTH
-# define DCD_STM32_BTABLE_LENGTH (DCD_STM32_BTABLE_LENGTH - DCD_STM32_BTABLE_BASE)
+# define DCD_STM32_BTABLE_LENGTH (PMA_LENGTH - DCD_STM32_BTABLE_BASE)
#endif
/***************************************************
@@ -131,7 +129,7 @@
# error Only 8 endpoints supported on the hardware
#endif
-#if ((BTABLE_BASE + BTABLE_LENGTH)>PMA_LENGTH)
+#if ((DCD_STM32_BTABLE_BASE + DCD_STM32_BTABLE_LENGTH)>PMA_LENGTH)
# error BTABLE does not fit in PMA RAM
#endif
@@ -157,10 +155,11 @@ static uint8_t newDADDR; // Used to set the new device address during the CTR IR
// EP Buffers assigned from end of memory location, to minimize their chance of crashing
// into the stack.
static uint16_t ep_buf_ptr;
-static void dcd_handle_bus_reset();
+static void dcd_handle_bus_reset(void);
static void dcd_write_packet_memory(uint16_t dst, const void *__restrict src, size_t wNBytes);
static void dcd_read_packet_memory(void *__restrict dst, uint16_t src, size_t wNBytes);
static void dcd_transmit_packet(xfer_ctl_t * xfer, uint16_t ep_ix);
+static uint16_t dcd_ep_ctr_handler(void);
void dcd_init (uint8_t rhport)
{
@@ -218,15 +217,35 @@ void dcd_init (uint8_t rhport)
void dcd_int_enable (uint8_t rhport)
{
(void)rhport;
+#if defined(STM32F0)
NVIC_SetPriority(USB_IRQn, 0);
NVIC_EnableIRQ(USB_IRQn);
+#elif defined(STM32F3)
+#warning need to check these since the F3 can have its USB interrupts remapped.
+ NVIC_SetPriority(USB_HP_CAN_TX_IRQn, 0);
+ NVIC_SetPriority(USB_LP_CAN_RX0_IRQn, 0);
+ NVIC_SetPriority(USBWakeUp_IRQn, 0);
+ NVIC_EnableIRQ(USB_HP_CAN_TX_IRQn);
+ NVIC_EnableIRQ(USB_LP_CAN_RX0_IRQn);
+ NVIC_EnableIRQ(USBWakeUp_IRQn);
+
+#endif
}
// Disable device interrupt
void dcd_int_disable(uint8_t rhport)
{
(void)rhport;
+#if defined(STM32F0)
NVIC_DisableIRQ(USB_IRQn);
+#elif defined(STM32F3)
+#warning need to check these since the F3 can have its USB interrupts remapped.
+ NVIC_DisableIRQ(USB_HP_CAN_TX_IRQn);
+ NVIC_DisableIRQ(USB_LP_CAN_RX0_IRQn);
+ NVIC_DisableIRQ(USBWakeUp_IRQn);
+#else
+#error Unknown arch in USB driver
+#endif
}
// Receive Set Address request, mcu port must also include status IN response
@@ -277,7 +296,7 @@ static const tusb_desc_endpoint_t ep0IN_desc =
#pragma GCC diagnostic pop
-static void dcd_handle_bus_reset()
+static void dcd_handle_bus_reset(void)
{
//__IO uint16_t * const epreg = &(EPREG(0));
USB->DADDR = 0u; // disable USB peripheral by clearing the EF flag
@@ -297,7 +316,7 @@ static void dcd_handle_bus_reset()
}
// FIXME: Defined to return uint16 so that ASSERT can be used, even though a return value is not needed.
-static uint16_t dcd_ep_ctr_handler()
+static uint16_t dcd_ep_ctr_handler(void)
{
uint16_t count=0U;
uint8_t EPindex;
diff --git a/src/portable/st/stm32_fsdev/dcd_stm32_fsdev_pvt_st.h b/src/portable/st/stm32_fsdev/dcd_stm32_fsdev_pvt_st.h
index 030635b8b..a6fccfd53 100644
--- a/src/portable/st/stm32_fsdev/dcd_stm32_fsdev_pvt_st.h
+++ b/src/portable/st/stm32_fsdev/dcd_stm32_fsdev_pvt_st.h
@@ -35,6 +35,21 @@
// This file contains source copied from ST's HAL, and thus should have their copyright statement.
+// PMA_LENGTH is PMA buffer size in bytes.
+
+#if defined(STM32F070xB) | defined(STM32F070x6)
+#include "stm32f0xx.h"
+#define PMA_LENGTH 1024
+#elif defined(STM32F303xB) | defined(STM32F303xC)
+#warning STM32F3 platform is untested.
+#include "stm32f3xx.h"
+#define PMA_LENGTH 512
+#else
+#error You are using an untested or unimplemented STM32 variant
+#endif
+
+
+
#ifndef PORTABLE_ST_STM32F0_DCD_STM32F0_FSDEV_PVT_ST_H_
#define PORTABLE_ST_STM32F0_DCD_STM32F0_FSDEV_PVT_ST_H_
@@ -217,16 +232,14 @@
#define EPREG(n) (((__IO uint16_t*)USB_BASE)[n*2])
-#define USB_ISTR_ALL_EVENTS (USB_ISTR_PMAOVR | USB_ISTR_ERR | USB_ISTR_WKUP | USB_ISTR_SUSP | \
- USB_ISTR_RESET | USB_ISTR_SOF | USB_ISTR_ESOF | USB_ISTR_L1REQ )
-
-
-// PMA_LENGTH is PMA buffer size in bytes.
-
-#if defined(STM32F070xB) | defined(STM32F070x6)
-#define PMA_LENGTH 1024
+#if defined(USB_ISTR_L1REQ)
+#define USB_ISTR_L1REQ_FORCED USB_ISTR_L1REQ
#else
-#error You are using an untested or unimplemented STM32 variant
+#define USB_ISTR_L1REQ_FORCED ((uint16_t)0x0000U)
#endif
+#define USB_ISTR_ALL_EVENTS (USB_ISTR_PMAOVR | USB_ISTR_ERR | USB_ISTR_WKUP | USB_ISTR_SUSP | \
+ USB_ISTR_RESET | USB_ISTR_SOF | USB_ISTR_ESOF | USB_ISTR_L1REQ_FORCED )
+
+
#endif /* PORTABLE_ST_STM32F0_DCD_STM32F0_FSDEV_PVT_ST_H_ */