diff options
| author | sakumisu <[email protected]> | 2022-01-10 22:12:54 +0800 |
|---|---|---|
| committer | sakumisu <[email protected]> | 2022-01-10 22:12:54 +0800 |
| commit | 6180db5d8a6767d3558cb05c74eea4fb72619db6 (patch) | |
| tree | c4a037cbba3f9e4f00966174fc64024b2896cb5f | |
| parent | abee382c887d00b1a0b93a504413e8aa47471dbf (diff) | |
update stm32f4 usb_dc with synopsys
| -rw-r--r-- | demo/stm32/stm32f429igt6/Core/Src/main.c | 54 | ||||
| -rw-r--r-- | demo/stm32/stm32f429igt6/Core/Src/stm32f4xx_it.c | 60 | ||||
| -rw-r--r-- | demo/stm32/stm32f429igt6/MDK-ARM/stm32f429igt6.uvoptx | 71 | ||||
| -rw-r--r-- | demo/stm32/stm32f429igt6/MDK-ARM/stm32f429igt6.uvprojx | 6 | ||||
| -rw-r--r-- | port/synopsys/usb_dc_synopsys.c | 104 |
5 files changed, 193 insertions, 102 deletions
diff --git a/demo/stm32/stm32f429igt6/Core/Src/main.c b/demo/stm32/stm32f429igt6/Core/Src/main.c index b1acbcb4..b3d269e9 100644 --- a/demo/stm32/stm32f429igt6/Core/Src/main.c +++ b/demo/stm32/stm32f429igt6/Core/Src/main.c @@ -62,7 +62,6 @@ static void MX_USART1_UART_Init(void); /* USER CODE BEGIN 0 */ int fputc(int ch, FILE *f) { - HAL_UART_Transmit(&huart1,(uint8_t*)&ch,1,1000); return ch; } @@ -163,7 +162,6 @@ void usbd_cdc_acm_out(uint8_t ep) uint8_t data[64]; uint32_t read_byte; usbd_ep_read(ep,data,64,&read_byte); - printf("out\r\n"); printf("read len:%d\r\n",read_byte); usbd_ep_read(ep,NULL,0,NULL); } @@ -183,7 +181,49 @@ usbd_endpoint_t cdc_in_ep = { .ep_cb = usbd_cdc_acm_in }; +void usb_dc_low_level_init(void) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + + /* USER CODE BEGIN USB_OTG_HS_MspInit 0 */ + + /* USER CODE END USB_OTG_HS_MspInit 0 */ + + __HAL_RCC_GPIOB_CLK_ENABLE(); + /**USB_OTG_HS GPIO Configuration + PB14 ------> USB_OTG_HS_DM + PB15 ------> USB_OTG_HS_DP + */ + GPIO_InitStruct.Pin = GPIO_PIN_14|GPIO_PIN_15; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF12_OTG_HS_FS; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + /* Peripheral clock enable */ + __HAL_RCC_USB_OTG_HS_CLK_ENABLE(); + /* USB_OTG_HS interrupt Init */ + HAL_NVIC_SetPriority(OTG_HS_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(OTG_HS_IRQn); +} + + extern void usb_dc_init(void); + +volatile uint8_t dtr_enable = 0; + +void usbd_cdc_acm_set_dtr(bool dtr) +{ + if(dtr) + { + dtr_enable = 1; + } + else + { + dtr_enable = 0; + } +} /* USER CODE END 0 */ /** @@ -214,7 +254,6 @@ int main(void) /* Initialize all configured peripherals */ MX_GPIO_Init(); - MX_USB_OTG_HS_PCD_Init(); MX_USART1_UART_Init(); /* USER CODE BEGIN 2 */ usbd_desc_register(cdc_descriptor); @@ -234,9 +273,12 @@ int main(void) /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ - uint8_t data_buffer[10] = { 0x31, 0x32, 0x33, 0x34, 0x35, 0x31, 0x32, 0x33, 0x34, 0x35 }; - usbd_ep_write(CDC_IN_EP, data_buffer, 10, NULL); - HAL_Delay(500); + if(dtr_enable) + { + uint8_t data_buffer[10] = { 0x31, 0x32, 0x33, 0x34, 0x35, 0x31, 0x32, 0x33, 0x34, 0x35 }; + usbd_ep_write(CDC_IN_EP, data_buffer, 10, NULL); + HAL_Delay(500); + } } /* USER CODE END 3 */ } diff --git a/demo/stm32/stm32f429igt6/Core/Src/stm32f4xx_it.c b/demo/stm32/stm32f429igt6/Core/Src/stm32f4xx_it.c index 3d0b17f6..ca7b3ce5 100644 --- a/demo/stm32/stm32f429igt6/Core/Src/stm32f4xx_it.c +++ b/demo/stm32/stm32f429igt6/Core/Src/stm32f4xx_it.c @@ -202,44 +202,44 @@ void SysTick_Handler(void) /** * @brief This function handles USB On The Go HS End Point 1 Out global interrupt. */ -void OTG_HS_EP1_OUT_IRQHandler(void) -{ - /* USER CODE BEGIN OTG_HS_EP1_OUT_IRQn 0 */ +//void OTG_HS_EP1_OUT_IRQHandler(void) +//{ +// /* USER CODE BEGIN OTG_HS_EP1_OUT_IRQn 0 */ - /* USER CODE END OTG_HS_EP1_OUT_IRQn 0 */ - HAL_PCD_IRQHandler(&hpcd_USB_OTG_HS); - /* USER CODE BEGIN OTG_HS_EP1_OUT_IRQn 1 */ +// /* USER CODE END OTG_HS_EP1_OUT_IRQn 0 */ +// HAL_PCD_IRQHandler(&hpcd_USB_OTG_HS); +// /* USER CODE BEGIN OTG_HS_EP1_OUT_IRQn 1 */ - /* USER CODE END OTG_HS_EP1_OUT_IRQn 1 */ -} +// /* USER CODE END OTG_HS_EP1_OUT_IRQn 1 */ +//} -/** - * @brief This function handles USB On The Go HS End Point 1 In global interrupt. - */ -void OTG_HS_EP1_IN_IRQHandler(void) -{ - /* USER CODE BEGIN OTG_HS_EP1_IN_IRQn 0 */ +///** +// * @brief This function handles USB On The Go HS End Point 1 In global interrupt. +// */ +//void OTG_HS_EP1_IN_IRQHandler(void) +//{ +// /* USER CODE BEGIN OTG_HS_EP1_IN_IRQn 0 */ - /* USER CODE END OTG_HS_EP1_IN_IRQn 0 */ - HAL_PCD_IRQHandler(&hpcd_USB_OTG_HS); - /* USER CODE BEGIN OTG_HS_EP1_IN_IRQn 1 */ +// /* USER CODE END OTG_HS_EP1_IN_IRQn 0 */ +// HAL_PCD_IRQHandler(&hpcd_USB_OTG_HS); +// /* USER CODE BEGIN OTG_HS_EP1_IN_IRQn 1 */ - /* USER CODE END OTG_HS_EP1_IN_IRQn 1 */ -} +// /* USER CODE END OTG_HS_EP1_IN_IRQn 1 */ +//} -/** - * @brief This function handles USB On The Go HS global interrupt. - */ -void OTG_HS_IRQHandler(void) -{ - /* USER CODE BEGIN OTG_HS_IRQn 0 */ +///** +// * @brief This function handles USB On The Go HS global interrupt. +// */ +//void OTG_HS_IRQHandler(void) +//{ +// /* USER CODE BEGIN OTG_HS_IRQn 0 */ - /* USER CODE END OTG_HS_IRQn 0 */ - HAL_PCD_IRQHandler(&hpcd_USB_OTG_HS); - /* USER CODE BEGIN OTG_HS_IRQn 1 */ +// /* USER CODE END OTG_HS_IRQn 0 */ +// HAL_PCD_IRQHandler(&hpcd_USB_OTG_HS); +// /* USER CODE BEGIN OTG_HS_IRQn 1 */ - /* USER CODE END OTG_HS_IRQn 1 */ -} +// /* USER CODE END OTG_HS_IRQn 1 */ +//} /* USER CODE BEGIN 1 */ diff --git a/demo/stm32/stm32f429igt6/MDK-ARM/stm32f429igt6.uvoptx b/demo/stm32/stm32f429igt6/MDK-ARM/stm32f429igt6.uvoptx index d072b739..9dd0194c 100644 --- a/demo/stm32/stm32f429igt6/MDK-ARM/stm32f429igt6.uvoptx +++ b/demo/stm32/stm32f429igt6/MDK-ARM/stm32f429igt6.uvoptx @@ -103,7 +103,7 @@ <bEvRecOn>1</bEvRecOn> <bSchkAxf>0</bSchkAxf> <bTchkAxf>0</bTchkAxf> - <nTsel>3</nTsel> + <nTsel>6</nTsel> <sDll></sDll> <sDllPa></sDllPa> <sDlgDll></sDlgDll> @@ -114,11 +114,31 @@ <tDlgDll></tDlgDll> <tDlgPa></tDlgPa> <tIfile></tIfile> - <pMon>BIN\CMSIS_AGDI.dll</pMon> + <pMon>STLink\ST-LINKIII-KEIL_SWO.dll</pMon> </DebugOpt> <TargetDriverDllRegistry> <SetRegEntry> <Number>0</Number> + <Key>ARMRTXEVENTFLAGS</Key> + <Name>-L70 -Z18 -C0 -M0 -T1</Name> + </SetRegEntry> + <SetRegEntry> + <Number>0</Number> + <Key>DLGTARM</Key> + <Name>(1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0)</Name> + </SetRegEntry> + <SetRegEntry> + <Number>0</Number> + <Key>ARMDBGFLAGS</Key> + <Name></Name> + </SetRegEntry> + <SetRegEntry> + <Number>0</Number> + <Key>DLGUARM</Key> + <Name>(105=-1,-1,-1,-1,0)</Name> + </SetRegEntry> + <SetRegEntry> + <Number>0</Number> <Key>CMSIS_AGDI</Key> <Name>-X"Fire CMSIS-DAP" -UFS-00001418 -O239 -S8 -C0 -P00000000 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32F429IGTx$CMSIS\Flash\STM32F4xx_1024.FLM)</Name> </SetRegEntry> @@ -130,10 +150,43 @@ <SetRegEntry> <Number>0</Number> <Key>ST-LINKIII-KEIL_SWO</Key> - <Name>-U-O142 -O2254 -S0 -C0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F4xx_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32F429IGTx$CMSIS\Flash\STM32F4xx_1024.FLM)</Name> + <Name>-U066EFF555453774987091527 -O2287 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP (ARM Core") -D00(2BA01477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F4xx_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32F429IGTx$CMSIS\Flash\STM32F4xx_1024.FLM)</Name> </SetRegEntry> </TargetDriverDllRegistry> - <Breakpoint/> + <Breakpoint> + <Bp> + <Number>0</Number> + <Type>0</Type> + <LineNumber>526</LineNumber> + <EnabledFlag>1</EnabledFlag> + <Address>0</Address> + <ByteObject>0</ByteObject> + <HtxType>0</HtxType> + <ManyObjects>0</ManyObjects> + <SizeOfObject>0</SizeOfObject> + <BreakByAccess>0</BreakByAccess> + <BreakIfRCount>0</BreakIfRCount> + <Filename>..\..\..\..\port\synopsys\usb_dc_synopsys.c</Filename> + <ExecCommand></ExecCommand> + <Expression></Expression> + </Bp> + <Bp> + <Number>1</Number> + <Type>0</Type> + <LineNumber>529</LineNumber> + <EnabledFlag>1</EnabledFlag> + <Address>0</Address> + <ByteObject>0</ByteObject> + <HtxType>0</HtxType> + <ManyObjects>0</ManyObjects> + <SizeOfObject>0</SizeOfObject> + <BreakByAccess>0</BreakByAccess> + <BreakIfRCount>0</BreakIfRCount> + <Filename>..\..\..\..\port\synopsys\usb_dc_synopsys.c</Filename> + <ExecCommand></ExecCommand> + <Expression></Expression> + </Bp> + </Breakpoint> <Tracepoint> <THDelay>0</THDelay> </Tracepoint> @@ -178,10 +231,10 @@ <pMultCmdsp></pMultCmdsp> <DebugDescription> <Enable>1</Enable> - <EnableFlashSeq>1</EnableFlashSeq> + <EnableFlashSeq>0</EnableFlashSeq> <EnableLog>0</EnableLog> <Protocol>2</Protocol> - <DbgClock>10000000</DbgClock> + <DbgClock>4000000</DbgClock> </DebugDescription> </TargetOption> </Target> @@ -476,7 +529,7 @@ <GroupNumber>3</GroupNumber> <FileNumber>23</FileNumber> <FileType>1</FileType> - <tvExp>0</tvExp> + <tvExp>1</tvExp> <tvExpOptDlg>0</tvExpOptDlg> <bDave2>0</bDave2> <PathWithFileName>../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c</PathWithFileName> @@ -543,8 +596,8 @@ <tvExp>0</tvExp> <tvExpOptDlg>0</tvExpOptDlg> <bDave2>0</bDave2> - <PathWithFileName>..\..\..\..\port\stm32\usb_dc_hal.c</PathWithFileName> - <FilenameWithoutPath>usb_dc_hal.c</FilenameWithoutPath> + <PathWithFileName>..\..\..\..\port\synopsys\usb_dc_synopsys.c</PathWithFileName> + <FilenameWithoutPath>usb_dc_synopsys.c</FilenameWithoutPath> <RteFlg>0</RteFlg> <bShared>0</bShared> </File> diff --git a/demo/stm32/stm32f429igt6/MDK-ARM/stm32f429igt6.uvprojx b/demo/stm32/stm32f429igt6/MDK-ARM/stm32f429igt6.uvprojx index c77dbe56..2a2bc2cf 100644 --- a/demo/stm32/stm32f429igt6/MDK-ARM/stm32f429igt6.uvprojx +++ b/demo/stm32/stm32f429igt6/MDK-ARM/stm32f429igt6.uvprojx @@ -338,7 +338,7 @@ <v6Rtti>0</v6Rtti> <VariousControls> <MiscControls></MiscControls> - <Define>USE_HAL_DRIVER,STM32F429xx,STM32F4</Define> + <Define>USE_HAL_DRIVER,STM32F429xx,CONFIG_USB_HS_IN_FULL</Define> <Undefine></Undefine> <IncludePath>../Core/Inc; ../Drivers/STM32F4xx_HAL_Driver/Inc; ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy; ../Drivers/CMSIS/Device/ST/STM32F4xx/Include; ../Drivers/CMSIS/Include; ..\..\..\..\class\cdc; ..\..\..\..\core; ..\..\..\..\common; ..\..\..\..\class\winusb</IncludePath> </VariousControls> @@ -586,9 +586,9 @@ <FilePath>..\..\..\..\class\cdc\usbd_cdc.c</FilePath> </File> <File> - <FileName>usb_dc_hal.c</FileName> + <FileName>usb_dc_synopsys.c</FileName> <FileType>1</FileType> - <FilePath>..\..\..\..\port\stm32\usb_dc_hal.c</FilePath> + <FilePath>..\..\..\..\port\synopsys\usb_dc_synopsys.c</FilePath> </File> </Files> </Group> diff --git a/port/synopsys/usb_dc_synopsys.c b/port/synopsys/usb_dc_synopsys.c index baaaad50..404f09fe 100644 --- a/port/synopsys/usb_dc_synopsys.c +++ b/port/synopsys/usb_dc_synopsys.c @@ -17,24 +17,27 @@ #define USBD_IRQHandler OTG_HS_IRQHandler #endif +#ifndef USB_NUM_BIDIR_ENDPOINTS +#define USB_NUM_BIDIR_ENDPOINTS 6 /* define with minimum value*/ +#endif + #ifndef USB_RAM_SIZE -#define USB_RAM_SIZE 4096 +#define USB_RAM_SIZE 4096 /* define with minimum value*/ #endif -#define USB_INSTANCE USB_OTG_HS #else #ifndef USBD_IRQHandler #define USBD_IRQHandler OTG_FS_IRQHandler #endif -#ifndef USB_RAM_SIZE -#define USB_RAM_SIZE 1280 +#ifndef USB_NUM_BIDIR_ENDPOINTS +#define USB_NUM_BIDIR_ENDPOINTS 4 /* define with minimum value*/ #endif +#ifndef USB_RAM_SIZE +#define USB_RAM_SIZE 1280 /* define with minimum value*/ #endif -#ifndef USB_NUM_BIDIR_ENDPOINTS -#define USB_NUM_BIDIR_ENDPOINTS 6 #endif #if defined(CONFIG_USB_HS) || defined(CONFIG_USB_HS_IN_FULL) @@ -60,25 +63,16 @@ #ifndef CONFIG_USB_TX5_FIFO_SIZE #define CONFIG_USB_TX5_FIFO_SIZE (256U) #endif -#ifndef CONFIG_USB_TX6_FIFO_SIZE -#define CONFIG_USB_TX6_FIFO_SIZE (256U) -#endif -#ifndef CONFIG_USB_TX7_FIFO_SIZE -#define CONFIG_USB_TX7_FIFO_SIZE (256U) -#endif -#ifndef CONFIG_USB_TX8_FIFO_SIZE -#define CONFIG_USB_TX8_FIFO_SIZE (192U) -#endif #else /*FIFO sizes in bytes (total available memory for FIFOs is 1.25kB)*/ #ifndef CONFIG_USB_RX_FIFO_SIZE #define CONFIG_USB_RX_FIFO_SIZE (640U) #endif #ifndef CONFIG_USB_TX0_FIFO_SIZE -#define CONFIG_USB_TX0_FIFO_SIZE (160U) +#define CONFIG_USB_TX0_FIFO_SIZE (64U) #endif #ifndef CONFIG_USB_TX1_FIFO_SIZE -#define CONFIG_USB_TX1_FIFO_SIZE (160U) +#define CONFIG_USB_TX1_FIFO_SIZE (256U) #endif #ifndef CONFIG_USB_TX2_FIFO_SIZE #define CONFIG_USB_TX2_FIFO_SIZE (160U) @@ -86,9 +80,6 @@ #ifndef CONFIG_USB_TX3_FIFO_SIZE #define CONFIG_USB_TX3_FIFO_SIZE (160U) #endif -#ifndef CONFIG_USB_TX4_FIFO_SIZE -#define CONFIG_USB_TX4_FIFO_SIZE (160U) -#endif #endif #ifndef CONFIG_USB_TURNAROUND_TIME @@ -161,16 +152,9 @@ int usb_dc_init(void) #else /* Select FS Embedded PHY */ USBx->GUSBCFG |= USB_OTG_GUSBCFG_PHYSEL; - // if (cfg.battery_charging_enable == 0U) - // { /* Activate the USB Transceiver */ USBx->GCCFG |= USB_OTG_GCCFG_PWRDWN; -// } -// else -// { -// /* Deactivate the USB Transceiver */ -// USBx->GCCFG &= ~(USB_OTG_GCCFG_PWRDWN); -// } + #endif /* Reset after a PHY select and set Host mode */ @@ -201,23 +185,18 @@ int usb_dc_init(void) USBx->DIEPTXF[i] = 0U; } - /* VBUS Sensing setup */ - // if (cfg.vbus_sensing_enable == 0U) - // { +#if 1 /* To fix vbus sensing disable*/ /* Deactivate VBUS Sensing B */ USBx->GCCFG &= ~USB_OTG_GCCFG_VBDEN; /* B-peripheral session valid override enable */ USBx->GOTGCTL |= USB_OTG_GOTGCTL_BVALOEN; USBx->GOTGCTL |= USB_OTG_GOTGCTL_BVALOVAL; - // } - // else - // { - // /* Enable HW VBUS sensing */ - // USBx->GCCFG |= USB_OTG_GCCFG_VBDEN; - // } - // - +#else + USBx->GCCFG |= USB_OTG_GCCFG_NOVBUSSENS; + USBx->GCCFG &= ~USB_OTG_GCCFG_VBUSBSEN; + USBx->GCCFG &= ~USB_OTG_GCCFG_VBUSASEN; +#endif /* Restart the Phy Clock */ USBx_PCGCCTL = 0U; @@ -226,6 +205,8 @@ int usb_dc_init(void) #if defined(CONFIG_USB_HS) /* Set Core speed to High speed mode */ USBx_DEVICE->DCFG |= USB_OTG_SPEED_HIGH; +#elif defined(CONFIG_USB_HS_IN_FULL) + USBx_DEVICE->DCFG |= USB_OTG_SPEED_HIGH_IN_FULL; #else USBx_DEVICE->DCFG |= USB_OTG_SPEED_FULL; #endif @@ -277,15 +258,27 @@ int usb_dc_init(void) USBx->GINTMSK |= USB_OTG_GINTMSK_USBSUSPM | USB_OTG_GINTMSK_USBRST | USB_OTG_GINTMSK_ENUMDNEM | USB_OTG_GINTMSK_OEPINT | USB_OTG_GINTMSK_IEPINT | USB_OTG_GINTMSK_RXFLVLM | USB_OTG_GINTMSK_WUIM; +#if 0 + USBx->GINTMSK |= USB_OTG_GINTMSK_SOFM; +#endif + USBx_DEVICE->DOEPMSK = USB_OTG_DOEPMSK_STUPM | USB_OTG_DOEPMSK_XFRCM; - USBx->GRXFSIZ = (CONFIG_USB_RX_FIFO_SIZE / 4); + USBx_DEVICE->DIEPMSK = USB_OTG_DIEPMSK_XFRCM; + USBx->GRXFSIZ = (CONFIG_USB_RX_FIFO_SIZE / 4); +#if defined(CONFIG_USB_HS) || defined(CONFIG_USB_HS_IN_FULL) usb_set_txfifo(USBx, 0, CONFIG_USB_TX0_FIFO_SIZE / 4); usb_set_txfifo(USBx, 1, CONFIG_USB_TX1_FIFO_SIZE / 4); usb_set_txfifo(USBx, 2, CONFIG_USB_TX2_FIFO_SIZE / 4); usb_set_txfifo(USBx, 3, CONFIG_USB_TX3_FIFO_SIZE / 4); usb_set_txfifo(USBx, 4, CONFIG_USB_TX4_FIFO_SIZE / 4); - + usb_set_txfifo(USBx, 5, CONFIG_USB_TX5_FIFO_SIZE / 4); +#else + usb_set_txfifo(USBx, 0, CONFIG_USB_TX0_FIFO_SIZE / 4); + usb_set_txfifo(USBx, 1, CONFIG_USB_TX1_FIFO_SIZE / 4); + usb_set_txfifo(USBx, 2, CONFIG_USB_TX2_FIFO_SIZE / 4); + usb_set_txfifo(USBx, 3, CONFIG_USB_TX3_FIFO_SIZE / 4); +#endif USBx->GAHBCFG |= USB_OTG_GAHBCFG_GINT; USBx_DEVICE->DCTL &= ~USB_OTG_DCTL_SDIS; @@ -298,6 +291,22 @@ void usb_dc_deinit(void) uint32_t USBx_BASE = (uint32_t)USBx; usb_dc_low_level_deinit(); + /* Clear Pending interrupt */ + for (uint8_t i = 0U; i < 15U; i++) { + USBx_INEP(i)->DIEPINT = 0xFB7FU; + USBx_OUTEP(i)->DOEPINT = 0xFB7FU; + } + + /* Clear interrupt masks */ + USBx_DEVICE->DIEPMSK = 0U; + USBx_DEVICE->DOEPMSK = 0U; + USBx_DEVICE->DAINTMSK = 0U; + + /* Flush the FIFO */ + usb_flush_txfifo(USBx, 0x10U); + usb_flush_rxfifo(USBx); + + USBx_DEVICE->DCTL |= USB_OTG_DCTL_SDIS; } int usbd_set_address(const uint8_t addr) @@ -346,13 +355,6 @@ int usbd_ep_open(const struct usbd_endpoint_cfg *ep_cfg) } int usbd_ep_close(const uint8_t ep) { - USB_OTG_GlobalTypeDef *USBx = usb_dc_cfg.Instance; - uint32_t USBx_BASE = (uint32_t)USBx; - uint8_t ep_idx = USB_EP_GET_IDX(ep); - - if (USB_EP_DIR_IS_OUT(ep)) { - } else { - } return 0; } int usbd_ep_set_stall(const uint8_t ep) @@ -617,12 +619,6 @@ void USBD_IRQHandler(void) } USBx_DEVICE->DAINTMSK |= 0x10001U; - USBx_DEVICE->DOEPMSK |= USB_OTG_DOEPMSK_STUPM | - USB_OTG_DOEPMSK_XFRCM; - - USBx_DEVICE->DIEPMSK |= USB_OTG_DIEPMSK_TOM | - USB_OTG_DIEPMSK_XFRCM; - USBx_OUTEP(0U)->DOEPTSIZ = 0U; USBx_OUTEP(0U)->DOEPTSIZ |= (USB_OTG_DOEPTSIZ_PKTCNT & (1U << 19)); USBx_OUTEP(0U)->DOEPTSIZ |= (3U * 8U); |
