diff options
| author | William D. Jones <[email protected]> | 2019-01-11 19:53:24 -0500 |
|---|---|---|
| committer | William D. Jones <[email protected]> | 2019-01-11 19:53:24 -0500 |
| commit | 03cbd406cb16ff2da5b11775e0d34d7d53f5ea45 (patch) | |
| tree | cebd501c4c754c039c9d5f1e5028479ba54dab32 /src | |
| parent | 0f9fa5956f178fd1762a699409ac7be702fe70ab (diff) | |
dcd_stm32f4: Add USB init skeleton based on manual (does not enumerate).
Diffstat (limited to 'src')
| -rw-r--r-- | src/portable/stm/stm32f4/dcd_stm32f4.c | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/src/portable/stm/stm32f4/dcd_stm32f4.c b/src/portable/stm/stm32f4/dcd_stm32f4.c index 8aa95ac1d..b87ff6597 100644 --- a/src/portable/stm/stm32f4/dcd_stm32f4.c +++ b/src/portable/stm/stm32f4/dcd_stm32f4.c @@ -60,11 +60,25 @@ bool dcd_init (uint8_t rhport) { (void) rhport; - // USB->DEVICE.DESCADD.reg = (uint32_t) &sram_registers; - // USB->DEVICE.CTRLB.reg = USB_DEVICE_CTRLB_SPDCONF_FS; - // USB->DEVICE.CTRLA.reg = USB_CTRLA_MODE_DEVICE | USB_CTRLA_ENABLE | USB_CTRLA_RUNSTDBY; - // while (USB->DEVICE.SYNCBUSY.bit.ENABLE == 1) {} - // USB->DEVICE.INTENSET.reg = USB_DEVICE_INTENSET_SOF | USB_DEVICE_INTENSET_EORST; + // Programming model begins on page 1336 of Rev 17 of reference manual. + USB_OTG_FS->GAHBCFG |= USB_OTG_GAHBCFG_TXFELVL | USB_OTG_GAHBCFG_GINT; + + // No HNP/SRP (no OTG support), program timeout later, turnaround + // programmed for 18 MHz. + USB_OTG_FS->GUSBCFG |= (0x0C << USB_OTG_GUSBCFG_TRDT_Pos); + + // Required as part of core initialization. + USB_OTG_FS->GINTMSK |= USB_OTG_GINTMSK_OTGINT | USB_OTG_GINTMSK_MMISM; + + USB_OTG_DeviceTypeDef * dev = ((USB_OTG_DeviceTypeDef *) (USB_OTG_FS_PERIPH_BASE + USB_OTG_DEVICE_BASE)); + + // If USB host misbehaves during status portion of control xfer + // (non zero-length packet), send STALL back and discard. Full speed. + dev->DCFG |= USB_OTG_DCFG_NZLSOHSK | (3 << USB_OTG_DCFG_DSPD_Pos); + USB_OTG_FS->GINTMSK |= USB_OTG_GINTMSK_USBRST | USB_OTG_GINTMSK_ENUMDNEM | \ + USB_OTG_GINTMSK_ESUSPM | USB_OTG_GINTMSK_USBSUSPM | \ + USB_OTG_GINTMSK_SOFM; + USB_OTG_FS->GCCFG |= USB_OTG_GCCFG_VBUSBSEN; // Enable pullup. return true; } @@ -273,7 +287,7 @@ USB_TRFAIL0_TRFAIL_5, USB_TRFAIL0_TRFAIL_6, USB_TRFAIL0_TRFAIL_7, USB_TRFAIL1_PERR_0, USB_TRFAIL1_PERR_1, USB_TRFAIL1_PERR_2, USB_TRFAIL1_PERR_3, USB_TRFAIL1_PERR_4, USB_TRFAIL1_PERR_5, USB_TRFAIL1_PERR_6, USB_TRFAIL1_PERR_7, USB_UPRSM, USB_WAKEUP */ -void OTG_FS_Handler(void) { +void OTG_FS_IRQHandler(void) { // uint32_t int_status = USB->DEVICE.INTFLAG.reg; // // /*------------- Interrupt Processing -------------*/ |
