Преглед на файлове

complete fsdev and synopsys usb otg ip dcd portinng

sakumisu преди 4 години
родител
ревизия
a8d919fe4d

+ 10 - 0
demo/stm32/stm32f103c8t6/Core/Src/main.c

@@ -67,6 +67,16 @@ int fputc(int ch, FILE *f)
     USART1->DR = ch;
     return ch;
 }
+
+void usb_dc_low_level_init(void)
+{
+    /* Peripheral clock enable */
+    __HAL_RCC_USB_CLK_ENABLE();
+    /* USB interrupt Init */
+    HAL_NVIC_SetPriority(USB_LP_CAN1_RX0_IRQn, 0, 0);
+    HAL_NVIC_EnableIRQ(USB_LP_CAN1_RX0_IRQn);
+
+}
 extern void usb_dc_init(void);
 /* USER CODE END 0 */
 

+ 8 - 20
demo/stm32/stm32f103c8t6/MDK-ARM/stm32f103c8t6.uvoptx

@@ -125,7 +125,7 @@
         <SetRegEntry>
           <Number>0</Number>
           <Key>ST-LINKIII-KEIL_SWO</Key>
-          <Name>-U38FF6E065254313254222343 -O2254 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP (ARM Core") -D00(1BA01477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8000 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL020000 -FP0($$Device:STM32F103C8$Flash\STM32F10x_128.FLM)</Name>
+          <Name>-U066EFF555453774987091527 -O2287 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("") -D00(00000000) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8000 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL020000 -FP0($$Device:STM32F103C8$Flash\STM32F10x_128.FLM)</Name>
         </SetRegEntry>
         <SetRegEntry>
           <Number>0</Number>
@@ -575,20 +575,8 @@
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
-      <PathWithFileName>..\..\..\..\port\stm32\usb_dc_nohal.c</PathWithFileName>
-      <FilenameWithoutPath>usb_dc_nohal.c</FilenameWithoutPath>
-      <RteFlg>0</RteFlg>
-      <bShared>0</bShared>
-    </File>
-    <File>
-      <GroupNumber>5</GroupNumber>
-      <FileNumber>28</FileNumber>
-      <FileType>1</FileType>
-      <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\fsdev\usb_dc_fsdev.c</PathWithFileName>
+      <FilenameWithoutPath>usb_dc_fsdev.c</FilenameWithoutPath>
       <RteFlg>0</RteFlg>
       <bShared>0</bShared>
     </File>
@@ -602,7 +590,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>29</FileNumber>
+      <FileNumber>28</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -614,7 +602,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>30</FileNumber>
+      <FileNumber>29</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -626,7 +614,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>31</FileNumber>
+      <FileNumber>30</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -638,7 +626,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>32</FileNumber>
+      <FileNumber>31</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -650,7 +638,7 @@
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>33</FileNumber>
+      <FileNumber>32</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>

+ 3 - 59
demo/stm32/stm32f103c8t6/MDK-ARM/stm32f103c8t6.uvprojx

@@ -338,7 +338,7 @@
             <v6Rtti>0</v6Rtti>
             <VariousControls>
               <MiscControls></MiscControls>
-              <Define>USE_HAL_DRIVER,STM32F103xB,STM32F1</Define>
+              <Define>USE_HAL_DRIVER,STM32F103xB</Define>
               <Undefine></Undefine>
               <IncludePath>../Core/Inc;../Drivers/STM32F1xx_HAL_Driver/Inc;../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy;../Drivers/CMSIS/Device/ST/STM32F1xx/Include;../Drivers/CMSIS/Include;..\..\..\..\common;..\..\..\..\core;..\..\..\..\class\cdc;..\..\..\..\class\msc;..\..\..\..\class\hid;..\example</IncludePath>
             </VariousControls>
@@ -535,65 +535,9 @@
               <FilePath>..\..\..\..\core\usbd_core.c</FilePath>
             </File>
             <File>
-              <FileName>usb_dc_nohal.c</FileName>
+              <FileName>usb_dc_fsdev.c</FileName>
               <FileType>1</FileType>
-              <FilePath>..\..\..\..\port\stm32\usb_dc_nohal.c</FilePath>
-            </File>
-            <File>
-              <FileName>usb_dc_hal.c</FileName>
-              <FileType>1</FileType>
-              <FilePath>..\..\..\..\port\stm32\usb_dc_hal.c</FilePath>
-              <FileOption>
-                <CommonProperty>
-                  <UseCPPCompiler>2</UseCPPCompiler>
-                  <RVCTCodeConst>0</RVCTCodeConst>
-                  <RVCTZI>0</RVCTZI>
-                  <RVCTOtherData>0</RVCTOtherData>
-                  <ModuleSelection>0</ModuleSelection>
-                  <IncludeInBuild>0</IncludeInBuild>
-                  <AlwaysBuild>2</AlwaysBuild>
-                  <GenerateAssemblyFile>2</GenerateAssemblyFile>
-                  <AssembleAssemblyFile>2</AssembleAssemblyFile>
-                  <PublicsOnly>2</PublicsOnly>
-                  <StopOnExitCode>11</StopOnExitCode>
-                  <CustomArgument></CustomArgument>
-                  <IncludeLibraryModules></IncludeLibraryModules>
-                  <ComprImg>1</ComprImg>
-                </CommonProperty>
-                <FileArmAds>
-                  <Cads>
-                    <interw>2</interw>
-                    <Optim>0</Optim>
-                    <oTime>2</oTime>
-                    <SplitLS>2</SplitLS>
-                    <OneElfS>2</OneElfS>
-                    <Strict>2</Strict>
-                    <EnumInt>2</EnumInt>
-                    <PlainCh>2</PlainCh>
-                    <Ropi>2</Ropi>
-                    <Rwpi>2</Rwpi>
-                    <wLevel>0</wLevel>
-                    <uThumb>2</uThumb>
-                    <uSurpInc>2</uSurpInc>
-                    <uC99>2</uC99>
-                    <uGnu>2</uGnu>
-                    <useXO>2</useXO>
-                    <v6Lang>0</v6Lang>
-                    <v6LangP>0</v6LangP>
-                    <vShortEn>2</vShortEn>
-                    <vShortWch>2</vShortWch>
-                    <v6Lto>2</v6Lto>
-                    <v6WtE>2</v6WtE>
-                    <v6Rtti>2</v6Rtti>
-                    <VariousControls>
-                      <MiscControls></MiscControls>
-                      <Define></Define>
-                      <Undefine></Undefine>
-                      <IncludePath></IncludePath>
-                    </VariousControls>
-                  </Cads>
-                </FileArmAds>
-              </FileOption>
+              <FilePath>..\..\..\..\port\fsdev\usb_dc_fsdev.c</FilePath>
             </File>
           </Files>
         </Group>

+ 8 - 8
demo/stm32/stm32h743vbt6/.mxproject

@@ -9,17 +9,17 @@ CDefines=USE_HAL_DRIVER;STM32H750xx;USE_HAL_DRIVER;USE_HAL_DRIVER;
 [PreviousGenFiles]
 AdvancedFolderStructure=true
 HeaderFileListSize=3
-HeaderFiles#0=C:/Users/lvjiazhen/Desktop/usb_stack/demo/stm32/stm32h743vbt6/Core/Inc/stm32h7xx_it.h
-HeaderFiles#1=C:/Users/lvjiazhen/Desktop/usb_stack/demo/stm32/stm32h743vbt6/Core/Inc/stm32h7xx_hal_conf.h
-HeaderFiles#2=C:/Users/lvjiazhen/Desktop/usb_stack/demo/stm32/stm32h743vbt6/Core/Inc/main.h
+HeaderFiles#0=C:/Users/lvjiazhen/Desktop/usb_stack/demo/stm32/stm32h743vbt7/Core/Inc/stm32h7xx_it.h
+HeaderFiles#1=C:/Users/lvjiazhen/Desktop/usb_stack/demo/stm32/stm32h743vbt7/Core/Inc/stm32h7xx_hal_conf.h
+HeaderFiles#2=C:/Users/lvjiazhen/Desktop/usb_stack/demo/stm32/stm32h743vbt7/Core/Inc/main.h
 HeaderFolderListSize=1
-HeaderPath#0=C:/Users/lvjiazhen/Desktop/usb_stack/demo/stm32/stm32h743vbt6/Core/Inc
+HeaderPath#0=C:/Users/lvjiazhen/Desktop/usb_stack/demo/stm32/stm32h743vbt7/Core/Inc
 HeaderFiles=;
 SourceFileListSize=3
-SourceFiles#0=C:/Users/lvjiazhen/Desktop/usb_stack/demo/stm32/stm32h743vbt6/Core/Src/stm32h7xx_it.c
-SourceFiles#1=C:/Users/lvjiazhen/Desktop/usb_stack/demo/stm32/stm32h743vbt6/Core/Src/stm32h7xx_hal_msp.c
-SourceFiles#2=C:/Users/lvjiazhen/Desktop/usb_stack/demo/stm32/stm32h743vbt6/Core/Src/main.c
+SourceFiles#0=C:/Users/lvjiazhen/Desktop/usb_stack/demo/stm32/stm32h743vbt7/Core/Src/stm32h7xx_it.c
+SourceFiles#1=C:/Users/lvjiazhen/Desktop/usb_stack/demo/stm32/stm32h743vbt7/Core/Src/stm32h7xx_hal_msp.c
+SourceFiles#2=C:/Users/lvjiazhen/Desktop/usb_stack/demo/stm32/stm32h743vbt7/Core/Src/main.c
 SourceFolderListSize=1
-SourcePath#0=C:/Users/lvjiazhen/Desktop/usb_stack/demo/stm32/stm32h743vbt6/Core/Src
+SourcePath#0=C:/Users/lvjiazhen/Desktop/usb_stack/demo/stm32/stm32h743vbt7/Core/Src
 SourceFiles=;
 

+ 1 - 3
demo/stm32/stm32h743vbt6/Core/Inc/stm32h7xx_it.h

@@ -56,9 +56,7 @@ void SVC_Handler(void);
 void DebugMon_Handler(void);
 void PendSV_Handler(void);
 void SysTick_Handler(void);
-void OTG_HS_EP1_OUT_IRQHandler(void);
-void OTG_HS_EP1_IN_IRQHandler(void);
-void OTG_HS_IRQHandler(void);
+void OTG_FS_IRQHandler(void);
 /* USER CODE BEGIN EFP */
 
 /* USER CODE END EFP */

+ 79 - 31
demo/stm32/stm32h743vbt6/Core/Src/main.c

@@ -44,7 +44,7 @@
 
 UART_HandleTypeDef huart1;
 
-PCD_HandleTypeDef hpcd_USB_OTG_HS;
+PCD_HandleTypeDef hpcd_USB_OTG_FS;
 
 /* USER CODE BEGIN PV */
 
@@ -53,8 +53,8 @@ PCD_HandleTypeDef hpcd_USB_OTG_HS;
 /* Private function prototypes -----------------------------------------------*/
 void SystemClock_Config(void);
 static void MX_GPIO_Init(void);
-static void MX_USB_OTG_HS_PCD_Init(void);
 static void MX_USART1_UART_Init(void);
+static void MX_USB_OTG_FS_PCD_Init(void);
 /* USER CODE BEGIN PFP */
 
 /* USER CODE END PFP */
@@ -70,7 +70,7 @@ int fputc(int ch, FILE *f)
 
 #define CDC_IN_EP  0x81
 #define CDC_OUT_EP 0x01
-#define CDC_INT_EP 0x82
+#define CDC_INT_EP 0x83
 
 #define USBD_VID           0xFFFF
 #define USBD_PID           0xFFFF
@@ -184,7 +184,50 @@ usbd_endpoint_t cdc_in_ep = {
     .ep_cb = usbd_cdc_acm_in
 };
 
+void usb_dc_low_level_init(void)
+{
+  GPIO_InitTypeDef GPIO_InitStruct = {0};
+  RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
+
+  /* USER CODE BEGIN USB_OTG_FS_MspInit 0 */
+
+  /* USER CODE END USB_OTG_FS_MspInit 0 */
+  /** Initializes the peripherals clock
+  */
+    PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USB;
+    PeriphClkInitStruct.UsbClockSelection = RCC_USBCLKSOURCE_HSI48;
+    if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
+    {
+      Error_Handler();
+    }
+  /** Enable USB Voltage detector
+  */
+    HAL_PWREx_EnableUSBVoltageDetector();
+
+    __HAL_RCC_GPIOA_CLK_ENABLE();
+    /**USB_OTG_FS GPIO Configuration
+    PA11     ------> USB_OTG_FS_DM
+    PA12     ------> USB_OTG_FS_DP
+    */
+    GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_12;
+    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+    GPIO_InitStruct.Pull = GPIO_NOPULL;
+    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+    GPIO_InitStruct.Alternate = GPIO_AF10_OTG1_FS;
+    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
+
+    /* Peripheral clock enable */
+    __HAL_RCC_USB_OTG_FS_CLK_ENABLE();
+    /* USB_OTG_FS interrupt Init */
+    HAL_NVIC_SetPriority(OTG_FS_IRQn, 0, 0);
+    HAL_NVIC_EnableIRQ(OTG_FS_IRQn);
+  /* USER CODE BEGIN USB_OTG_FS_MspInit 1 */
+
+  /* USER CODE END USB_OTG_FS_MspInit 1 */
+
+}
 extern void usb_dc_init(void);
+
 /* USER CODE END 0 */
 
 /**
@@ -215,17 +258,19 @@ int main(void)
 
   /* Initialize all configured peripherals */
   MX_GPIO_Init();
-  MX_USB_OTG_HS_PCD_Init();
   MX_USART1_UART_Init();
+  //MX_USB_OTG_FS_PCD_Init();
   /* USER CODE BEGIN 2 */
   usbd_desc_register(cdc_descriptor);
   usbd_cdc_add_acm_interface(&cdc_class, &cdc_cmd_intf);
   usbd_cdc_add_acm_interface(&cdc_class, &cdc_data_intf);
   usbd_interface_add_endpoint(&cdc_data_intf, &cdc_out_ep);
   usbd_interface_add_endpoint(&cdc_data_intf, &cdc_in_ep);
-
+  
   usb_dc_init();
-
+    
+  while(!usb_device_is_configured())
+  {}
   /* USER CODE END 2 */
 
   /* Infinite loop */
@@ -235,6 +280,11 @@ 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);
+           printf("start\r\n");
+    HAL_Delay(500);
+          printf("end\r\n");
   }
   /* USER CODE END 3 */
 }
@@ -344,39 +394,38 @@ static void MX_USART1_UART_Init(void)
 }
 
 /**
-  * @brief USB_OTG_HS Initialization Function
+  * @brief USB_OTG_FS Initialization Function
   * @param None
   * @retval None
   */
-static void MX_USB_OTG_HS_PCD_Init(void)
+static void MX_USB_OTG_FS_PCD_Init(void)
 {
 
-  /* USER CODE BEGIN USB_OTG_HS_Init 0 */
-
-  /* USER CODE END USB_OTG_HS_Init 0 */
-
-  /* USER CODE BEGIN USB_OTG_HS_Init 1 */
-
-  /* USER CODE END USB_OTG_HS_Init 1 */
-  hpcd_USB_OTG_HS.Instance = USB_OTG_HS;
-  hpcd_USB_OTG_HS.Init.dev_endpoints = 9;
-  hpcd_USB_OTG_HS.Init.speed = PCD_SPEED_FULL;
-  hpcd_USB_OTG_HS.Init.dma_enable = DISABLE;
-  hpcd_USB_OTG_HS.Init.phy_itface = USB_OTG_EMBEDDED_PHY;
-  hpcd_USB_OTG_HS.Init.Sof_enable = DISABLE;
-  hpcd_USB_OTG_HS.Init.low_power_enable = DISABLE;
-  hpcd_USB_OTG_HS.Init.lpm_enable = DISABLE;
-  hpcd_USB_OTG_HS.Init.battery_charging_enable = ENABLE;
-  hpcd_USB_OTG_HS.Init.vbus_sensing_enable = DISABLE;
-  hpcd_USB_OTG_HS.Init.use_dedicated_ep1 = DISABLE;
-  hpcd_USB_OTG_HS.Init.use_external_vbus = DISABLE;
-  if (HAL_PCD_Init(&hpcd_USB_OTG_HS) != HAL_OK)
+  /* USER CODE BEGIN USB_OTG_FS_Init 0 */
+
+  /* USER CODE END USB_OTG_FS_Init 0 */
+
+  /* USER CODE BEGIN USB_OTG_FS_Init 1 */
+
+  /* USER CODE END USB_OTG_FS_Init 1 */
+  hpcd_USB_OTG_FS.Instance = USB_OTG_FS;
+  hpcd_USB_OTG_FS.Init.dev_endpoints = 9;
+  hpcd_USB_OTG_FS.Init.speed = PCD_SPEED_FULL;
+  hpcd_USB_OTG_FS.Init.dma_enable = DISABLE;
+  hpcd_USB_OTG_FS.Init.phy_itface = PCD_PHY_EMBEDDED;
+  hpcd_USB_OTG_FS.Init.Sof_enable = DISABLE;
+  hpcd_USB_OTG_FS.Init.low_power_enable = DISABLE;
+  hpcd_USB_OTG_FS.Init.lpm_enable = DISABLE;
+  hpcd_USB_OTG_FS.Init.battery_charging_enable = DISABLE;
+  hpcd_USB_OTG_FS.Init.vbus_sensing_enable = DISABLE;
+  hpcd_USB_OTG_FS.Init.use_dedicated_ep1 = DISABLE;
+  if (HAL_PCD_Init(&hpcd_USB_OTG_FS) != HAL_OK)
   {
     Error_Handler();
   }
-  /* USER CODE BEGIN USB_OTG_HS_Init 2 */
+  /* USER CODE BEGIN USB_OTG_FS_Init 2 */
 
-  /* USER CODE END USB_OTG_HS_Init 2 */
+  /* USER CODE END USB_OTG_FS_Init 2 */
 
 }
 
@@ -390,7 +439,6 @@ static void MX_GPIO_Init(void)
 
   /* GPIO Ports Clock Enable */
   __HAL_RCC_GPIOH_CLK_ENABLE();
-  __HAL_RCC_GPIOB_CLK_ENABLE();
   __HAL_RCC_GPIOA_CLK_ENABLE();
 
 }

+ 29 - 35
demo/stm32/stm32h743vbt6/Core/Src/stm32h7xx_hal_msp.c

@@ -161,11 +161,11 @@ void HAL_PCD_MspInit(PCD_HandleTypeDef* hpcd)
 {
   GPIO_InitTypeDef GPIO_InitStruct = {0};
   RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
-  if(hpcd->Instance==USB_OTG_HS)
+  if(hpcd->Instance==USB_OTG_FS)
   {
-  /* USER CODE BEGIN USB_OTG_HS_MspInit 0 */
+  /* USER CODE BEGIN USB_OTG_FS_MspInit 0 */
 
-  /* USER CODE END USB_OTG_HS_MspInit 0 */
+  /* USER CODE END USB_OTG_FS_MspInit 0 */
   /** Initializes the peripherals clock
   */
     PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USB;
@@ -178,30 +178,26 @@ void HAL_PCD_MspInit(PCD_HandleTypeDef* hpcd)
   */
     HAL_PWREx_EnableUSBVoltageDetector();
 
-    __HAL_RCC_GPIOB_CLK_ENABLE();
-    /**USB_OTG_HS GPIO Configuration
-    PB14     ------> USB_OTG_HS_DM
-    PB15     ------> USB_OTG_HS_DP
+    __HAL_RCC_GPIOA_CLK_ENABLE();
+    /**USB_OTG_FS GPIO Configuration
+    PA11     ------> USB_OTG_FS_DM
+    PA12     ------> USB_OTG_FS_DP
     */
-    GPIO_InitStruct.Pin = GPIO_PIN_14|GPIO_PIN_15;
+    GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_12;
     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
     GPIO_InitStruct.Pull = GPIO_NOPULL;
     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
-    GPIO_InitStruct.Alternate = GPIO_AF12_OTG2_FS;
-    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
+    GPIO_InitStruct.Alternate = GPIO_AF10_OTG1_FS;
+    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
 
     /* Peripheral clock enable */
-    __HAL_RCC_USB_OTG_HS_CLK_ENABLE();
-    /* USB_OTG_HS interrupt Init */
-    HAL_NVIC_SetPriority(OTG_HS_EP1_OUT_IRQn, 0, 0);
-    HAL_NVIC_EnableIRQ(OTG_HS_EP1_OUT_IRQn);
-    HAL_NVIC_SetPriority(OTG_HS_EP1_IN_IRQn, 0, 0);
-    HAL_NVIC_EnableIRQ(OTG_HS_EP1_IN_IRQn);
-    HAL_NVIC_SetPriority(OTG_HS_IRQn, 0, 0);
-    HAL_NVIC_EnableIRQ(OTG_HS_IRQn);
-  /* USER CODE BEGIN USB_OTG_HS_MspInit 1 */
-
-  /* USER CODE END USB_OTG_HS_MspInit 1 */
+    __HAL_RCC_USB_OTG_FS_CLK_ENABLE();
+    /* USB_OTG_FS interrupt Init */
+    HAL_NVIC_SetPriority(OTG_FS_IRQn, 0, 0);
+    HAL_NVIC_EnableIRQ(OTG_FS_IRQn);
+  /* USER CODE BEGIN USB_OTG_FS_MspInit 1 */
+
+  /* USER CODE END USB_OTG_FS_MspInit 1 */
   }
 
 }
@@ -214,27 +210,25 @@ void HAL_PCD_MspInit(PCD_HandleTypeDef* hpcd)
 */
 void HAL_PCD_MspDeInit(PCD_HandleTypeDef* hpcd)
 {
-  if(hpcd->Instance==USB_OTG_HS)
+  if(hpcd->Instance==USB_OTG_FS)
   {
-  /* USER CODE BEGIN USB_OTG_HS_MspDeInit 0 */
+  /* USER CODE BEGIN USB_OTG_FS_MspDeInit 0 */
 
-  /* USER CODE END USB_OTG_HS_MspDeInit 0 */
+  /* USER CODE END USB_OTG_FS_MspDeInit 0 */
     /* Peripheral clock disable */
-    __HAL_RCC_USB_OTG_HS_CLK_DISABLE();
+    __HAL_RCC_USB_OTG_FS_CLK_DISABLE();
 
-    /**USB_OTG_HS GPIO Configuration
-    PB14     ------> USB_OTG_HS_DM
-    PB15     ------> USB_OTG_HS_DP
+    /**USB_OTG_FS GPIO Configuration
+    PA11     ------> USB_OTG_FS_DM
+    PA12     ------> USB_OTG_FS_DP
     */
-    HAL_GPIO_DeInit(GPIOB, GPIO_PIN_14|GPIO_PIN_15);
+    HAL_GPIO_DeInit(GPIOA, GPIO_PIN_11|GPIO_PIN_12);
 
-    /* USB_OTG_HS interrupt DeInit */
-    HAL_NVIC_DisableIRQ(OTG_HS_EP1_OUT_IRQn);
-    HAL_NVIC_DisableIRQ(OTG_HS_EP1_IN_IRQn);
-    HAL_NVIC_DisableIRQ(OTG_HS_IRQn);
-  /* USER CODE BEGIN USB_OTG_HS_MspDeInit 1 */
+    /* USB_OTG_FS interrupt DeInit */
+    HAL_NVIC_DisableIRQ(OTG_FS_IRQn);
+  /* USER CODE BEGIN USB_OTG_FS_MspDeInit 1 */
 
-  /* USER CODE END USB_OTG_HS_MspDeInit 1 */
+  /* USER CODE END USB_OTG_FS_MspDeInit 1 */
   }
 
 }

+ 12 - 41
demo/stm32/stm32h743vbt6/Core/Src/stm32h7xx_it.c

@@ -56,7 +56,7 @@
 /* USER CODE END 0 */
 
 /* External variables --------------------------------------------------------*/
-extern PCD_HandleTypeDef hpcd_USB_OTG_HS;
+extern PCD_HandleTypeDef hpcd_USB_OTG_FS;
 /* USER CODE BEGIN EV */
 
 /* USER CODE END EV */
@@ -73,9 +73,8 @@ void NMI_Handler(void)
 
   /* USER CODE END NonMaskableInt_IRQn 0 */
   /* USER CODE BEGIN NonMaskableInt_IRQn 1 */
-  while (1)
-  {
-  }
+    while (1) {
+    }
   /* USER CODE END NonMaskableInt_IRQn 1 */
 }
 
@@ -200,46 +199,18 @@ void SysTick_Handler(void)
 /******************************************************************************/
 
 /**
-  * @brief This function handles USB On The Go HS End Point 1 Out global interrupt.
+  * @brief This function handles USB On The Go FS global interrupt.
   */
-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 */
+//void OTG_FS_IRQHandler(void)
+//{
+//  /* USER CODE BEGIN OTG_FS_IRQn 0 */
 
-  /* 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 */
+//  /* USER CODE END OTG_FS_IRQn 0 */
+//  HAL_PCD_IRQHandler(&hpcd_USB_OTG_FS);
+//  /* USER CODE BEGIN OTG_FS_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 */
-}
-
-/**
-  * @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 1 */
-}
+//  /* USER CODE END OTG_FS_IRQn 1 */
+//}
 
 /* USER CODE BEGIN 1 */
 

+ 44 - 7
demo/stm32/stm32h743vbt6/MDK-ARM/stm32h743vbt6.uvoptx

@@ -117,6 +117,26 @@
         <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)(6017=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(6016=-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>UL2CM3</Key>
@@ -125,10 +145,27 @@
         <SetRegEntry>
           <Number>0</Number>
           <Key>ST-LINKIII-KEIL_SWO</Key>
-          <Name>-U-O142 -O2254 -S0 -C0 -N00("ARM CoreSight SW-DP") -D00(5BA02477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32H7x_128k.FLM -FS08000000 -FL020000 -FP0($$Device:STM32H750VBTx$CMSIS\Flash\STM32H7x_128k.FLM)</Name>
+          <Name>-U066EFF555453774987091527 -O2287 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP (ARM Core") -D00(6BA02477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32H7x_128k.FLM -FS08000000 -FL020000 -FP0($$Device:STM32H750VBTx$CMSIS\Flash\STM32H7x_128k.FLM)</Name>
         </SetRegEntry>
       </TargetDriverDllRegistry>
-      <Breakpoint/>
+      <Breakpoint>
+        <Bp>
+          <Number>0</Number>
+          <Type>0</Type>
+          <LineNumber>415</LineNumber>
+          <EnabledFlag>1</EnabledFlag>
+          <Address>134218740</Address>
+          <ByteObject>0</ByteObject>
+          <HtxType>0</HtxType>
+          <ManyObjects>0</ManyObjects>
+          <SizeOfObject>0</SizeOfObject>
+          <BreakByAccess>0</BreakByAccess>
+          <BreakIfRCount>1</BreakIfRCount>
+          <Filename>../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal.c</Filename>
+          <ExecCommand></ExecCommand>
+          <Expression>\\stm32h743vbt6\../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal.c\415</Expression>
+        </Bp>
+      </Breakpoint>
       <Tracepoint>
         <THDelay>0</THDelay>
       </Tracepoint>
@@ -173,7 +210,7 @@
       <pMultCmdsp></pMultCmdsp>
       <DebugDescription>
         <Enable>1</Enable>
-        <EnableFlashSeq>1</EnableFlashSeq>
+        <EnableFlashSeq>0</EnableFlashSeq>
         <EnableLog>0</EnableLog>
         <Protocol>2</Protocol>
         <DbgClock>10000000</DbgClock>
@@ -247,7 +284,7 @@
 
   <Group>
     <GroupName>Drivers/STM32H7xx_HAL_Driver</GroupName>
-    <tvExp>0</tvExp>
+    <tvExp>1</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>
@@ -255,7 +292,7 @@
       <GroupNumber>3</GroupNumber>
       <FileNumber>5</FileNumber>
       <FileType>1</FileType>
-      <tvExp>0</tvExp>
+      <tvExp>1</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
       <PathWithFileName>../Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_cortex.c</PathWithFileName>
@@ -586,8 +623,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>

+ 5 - 5
demo/stm32/stm32h743vbt6/MDK-ARM/stm32h743vbt6.uvprojx

@@ -190,7 +190,7 @@
             <hadIRAM2>1</hadIRAM2>
             <hadIROM2>0</hadIROM2>
             <StupSel>8</StupSel>
-            <useUlib>0</useUlib>
+            <useUlib>1</useUlib>
             <EndSel>0</EndSel>
             <uLtcg>0</uLtcg>
             <nSecure>0</nSecure>
@@ -338,9 +338,9 @@
             <v6Rtti>0</v6Rtti>
             <VariousControls>
               <MiscControls></MiscControls>
-              <Define>USE_HAL_DRIVER,STM32H750xx,STM32H7,CONFIG_USB_HS</Define>
+              <Define>USE_HAL_DRIVER,STM32H750xx,STM32H7</Define>
               <Undefine></Undefine>
-              <IncludePath>../Core/Inc; ../Drivers/STM32H7xx_HAL_Driver/Inc; ../Drivers/STM32H7xx_HAL_Driver/Inc/Legacy; ../Drivers/CMSIS/Device/ST/STM32H7xx/Include; ../Drivers/CMSIS/Include; ..\..\..\..\class\cdc; ..\..\..\..\common; ..\..\..\..\core; ..\..\..\..\class\winusb</IncludePath>
+              <IncludePath>../Core/Inc;   ../Drivers/STM32H7xx_HAL_Driver/Inc;   ../Drivers/STM32H7xx_HAL_Driver/Inc/Legacy;   ../Drivers/CMSIS/Device/ST/STM32H7xx/Include;   ../Drivers/CMSIS/Include;   ..\..\..\..\class\cdc;   ..\..\..\..\common;   ..\..\..\..\core;   ..\..\..\..\class\winusb</IncludePath>
             </VariousControls>
           </Cads>
           <Aads>
@@ -657,9 +657,9 @@
               <FilePath>..\..\..\..\core\usbd_core.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>

+ 13 - 15
demo/stm32/stm32h743vbt6/stm32h743vbt6.ioc

@@ -8,16 +8,16 @@ Mcu.IP1=NVIC
 Mcu.IP2=RCC
 Mcu.IP3=SYS
 Mcu.IP4=USART1
-Mcu.IP5=USB_OTG_HS
+Mcu.IP5=USB_OTG_FS
 Mcu.IPNb=6
 Mcu.Name=STM32H750VBTx
 Mcu.Package=LQFP100
 Mcu.Pin0=PH0-OSC_IN (PH0)
 Mcu.Pin1=PH1-OSC_OUT (PH1)
-Mcu.Pin2=PB14
-Mcu.Pin3=PB15
-Mcu.Pin4=PA9
-Mcu.Pin5=PA10
+Mcu.Pin2=PA9
+Mcu.Pin3=PA10
+Mcu.Pin4=PA11
+Mcu.Pin5=PA12
 Mcu.Pin6=VP_SYS_VS_Systick
 Mcu.PinsNb=7
 Mcu.ThirdPartyNb=0
@@ -31,9 +31,7 @@ NVIC.ForceEnableDMAVector=true
 NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false
 NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false
 NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false
-NVIC.OTG_HS_EP1_IN_IRQn=true\:0\:0\:false\:false\:true\:true\:true
-NVIC.OTG_HS_EP1_OUT_IRQn=true\:0\:0\:false\:false\:true\:true\:true
-NVIC.OTG_HS_IRQn=true\:0\:0\:false\:false\:true\:true\:true
+NVIC.OTG_FS_IRQn=true\:0\:0\:false\:false\:true\:true\:true
 NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false\:false
 NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4
 NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false
@@ -41,12 +39,12 @@ NVIC.SysTick_IRQn=true\:0\:0\:false\:false\:true\:false\:true
 NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false
 PA10.Mode=Asynchronous
 PA10.Signal=USART1_RX
+PA11.Mode=Device_Only
+PA11.Signal=USB_OTG_FS_DM
+PA12.Mode=Device_Only
+PA12.Signal=USB_OTG_FS_DP
 PA9.Mode=Asynchronous
 PA9.Signal=USART1_TX
-PB14.Mode=Device_Only_FS
-PB14.Signal=USB_OTG_HS_DM
-PB15.Mode=Device_Only_FS
-PB15.Signal=USB_OTG_HS_DP
 PH0-OSC_IN\ (PH0).Mode=HSE-External-Oscillator
 PH0-OSC_IN\ (PH0).Signal=RCC_OSC_IN
 PH1-OSC_OUT\ (PH1).Mode=HSE-External-Oscillator
@@ -79,7 +77,7 @@ ProjectManager.StackSize=0x400
 ProjectManager.TargetToolchain=MDK-ARM V5.27
 ProjectManager.ToolChainLocation=
 ProjectManager.UnderRoot=false
-ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_USB_OTG_HS_PCD_Init-USB_OTG_HS-false-HAL-true,4-MX_USART1_UART_Init-USART1-false-HAL-true,0-MX_CORTEX_M7_Init-CORTEX_M7-false-HAL-true
+ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_USART1_UART_Init-USART1-false-HAL-true,4-MX_USB_OTG_FS_PCD_Init-USB_OTG_FS-false-HAL-true,0-MX_CORTEX_M7_Init-CORTEX_M7-false-HAL-true
 RCC.ADCFreq_Value=400000000
 RCC.AHB12Freq_Value=200000000
 RCC.AHB4Freq_Value=200000000
@@ -162,8 +160,8 @@ RCC.VCOInput2Freq_Value=5000000
 RCC.VCOInput3Freq_Value=5000000
 USART1.IPParameters=VirtualMode-Asynchronous
 USART1.VirtualMode-Asynchronous=VM_ASYNC
-USB_OTG_HS.IPParameters=VirtualMode-Device_Only_FS
-USB_OTG_HS.VirtualMode-Device_Only_FS=Device_Only_FS
+USB_OTG_FS.IPParameters=VirtualMode
+USB_OTG_FS.VirtualMode=Device_Only
 VP_SYS_VS_Systick.Mode=SysTick
 VP_SYS_VS_Systick.Signal=SYS_VS_Systick
 board=custom

+ 31 - 2
port/fsdev/README.md

@@ -1,2 +1,31 @@
-# Note
-与 STM32 USB IP 同系列的使用该 port
+# Support Chip List
+
+## STM32
+
+- STM32F042x6、STM32F048xx、STM32F070x6、STM32F070xb、STM32F072xb、STM32F078xx
+- STM32F102x6、STM32F102xb、STM32F103x6、STM32F103xb、STM32F103xe、STM32F103xg
+- STM32F302x8、STM32F302xc、STM32F302xe、STM32F373xc
+- STM32g431xx、STM32g441xx、STM32g471xx、STM32g483xx、STM32g484xx、STM32gbk1cb
+- STM32l052xx、STM32l053xx、STM32l062xx、STM32l063xx、STM32l072xx、STM32l073xx、STM32l082xx、STM32l083xx
+- STM32l100xb、STM32l100xba、STM32l100xc、STM32l151xb、STM32l151xba、STM32l151xc、STM32l151xca、STM32l151xd、STM32l151xdx、STM32l151xe、STM32l152xb、STM32l152xba、STM32l152xc、STM32l152xa、STM32l152xd、STM32l152xdx、STM32l152xe、STM32l162xc、STM32l162xca、STM32l162xd、STM32l162xdx、STM32l162xe
+- STM32l412xx、STM32l422xx、STM32l432xx、STM32l433xx、STM32l442xx、STM32l452xx、STM32l462xx
+- STM32wb5mxx、STM32wb35xx、STM32wb55xx
+
+## AT32
+
+- AT32F403xx、AT32F407xx、AT32F413xx
+
+## APM32
+
+- APM32f10x
+
+## GD32
+
+- GD32F10X_MD、GD32F10X_HD、GD32F10X_XD
+- GD32F30X_HD、GD32F30X_XD
+- GD32F350
+- GD32F407
+
+## CH32
+
+- CH32F10x、CH32V10x

+ 16 - 2
port/fsdev/usb_dc_fsdev.c

@@ -13,6 +13,12 @@
 #define USB_RAM_SIZE 512
 #endif
 
+/* USB device FS */
+#define USB_BASE    (0x40005C00UL) /*!< USB_IP Peripheral Registers base address */
+#define USB_PMAADDR (0x40006000UL) /*!< USB_IP Packet Memory Area base address */
+
+#define USB ((USB_TypeDef *)USB_BASE)
+
 #define USB_BTABLE_SIZE (8 * USB_NUM_BIDIR_ENDPOINTS)
 
 static void USB_WritePMA(USB_TypeDef *USBx, uint8_t *pbUsrBuf, uint16_t wPMABufAddr, uint16_t wNBytes);
@@ -40,6 +46,14 @@ struct usb_dc_config_priv {
     uint32_t pma_offset;
 } usb_dc_cfg;
 
+__WEAK void usb_dc_low_level_init(void)
+{
+}
+
+__WEAK void usb_dc_low_level_deinit(void)
+{
+}
+
 int usb_dc_init(void)
 {
     memset(&usb_dc_cfg, 0, sizeof(struct usb_dc_config_priv));
@@ -49,7 +63,7 @@ int usb_dc_init(void)
 
     USB_TypeDef *USBx = usb_dc_cfg.Instance;
 
-    HAL_PCD_MspInit(&usb_dc_cfg);
+    usb_dc_low_level_init();
 
     /* Init Device */
     /* CNTR_FRES = 1 */
@@ -90,7 +104,7 @@ void usb_dc_deinit(void)
     /* switch-off device */
     USBx->CNTR = (uint16_t)(USB_CNTR_FRES | USB_CNTR_PDWN);
 
-    HAL_PCD_MspDeInit(&usb_dc_cfg);
+    usb_dc_low_level_deinit();
 }
 
 int usbd_set_address(const uint8_t addr)

+ 0 - 9
port/fsdev/usb_fsdev_regs.h

@@ -36,14 +36,6 @@ typedef struct
   __IO uint16_t RESERVEDC;            /*!< Reserved */
 } USB_TypeDef;
 
-#define PERIPH_BASE           0x40000000UL /*!< Peripheral base address in the alias region */
-#define APB1PERIPH_BASE       PERIPH_BASE
-/* USB device FS */
-#define USB_BASE              (APB1PERIPH_BASE + 0x00005C00UL) /*!< USB_IP Peripheral Registers base address */
-#define USB_PMAADDR           (APB1PERIPH_BASE + 0x00006000UL) /*!< USB_IP Packet Memory Area base address */
-
-#define USB                 ((USB_TypeDef *)USB_BASE)
-
 /******************************************************************************/
 /*                                                                            */
 /*                                   USB Device FS                            */
@@ -2212,7 +2204,6 @@ typedef struct
   * @{
   */
 #define USBD_FS_SPEED                          2U
-#define PCD_SPEED_FULL               USBD_FS_SPEED
 /**
   * @}
   */

+ 3 - 0
port/stm32/README.md

@@ -5,3 +5,6 @@
 - 如果使用的是 usb_dc_hal.c 则上条不需要
 - 推荐使用 nohal 版本,极简代码
 
+
+## 该目录下porting可以不再使用,选择 fsdev 或者 synopsys下的porting接口
+

+ 4 - 4
port/stm32/usb_dc_hal.c

@@ -26,10 +26,10 @@ extern PCD_HandleTypeDef hpcd_USB_OTG_HS;
 #ifndef USB_RAM_SIZE
 #define USB_RAM_SIZE 1280
 #endif
-extern PCD_HandleTypeDef hpcd_USB_OTG_HS;
-#define PCD_HANDLE &hpcd_USB_OTG_HS
-//extern PCD_HandleTypeDef hpcd_USB_OTG_FS;
-//#define PCD_HANDLE &hpcd_USB_OTG_FS
+//extern PCD_HandleTypeDef hpcd_USB_OTG_HS;
+//#define PCD_HANDLE &hpcd_USB_OTG_HS
+extern PCD_HandleTypeDef hpcd_USB_OTG_FS;
+#define PCD_HANDLE &hpcd_USB_OTG_FS
 #endif
 #endif
 

+ 24 - 2
port/synopsys/README.md

@@ -1,3 +1,25 @@
-# Note
+# Support Chip List
 
-使用 DesignWare USB OTG IP 的使用该 port
+## STM32
+
+- STM32F105xc、STM32F107xc
+- STM32F205xx、STM32F207xx、STM32F215xx、STM32F217xx
+- STM32F401xc、STM32F401xe、STM32F405xx、STM32F407xx、STM32F411xe、STM32F412cx、STM32F412rx、STM32F412vx、STM32F412zx、STM32F413xx、STM32F415xx、STM32F417xx、STM32F423xx、STM32F423xx、STM32F429xx、STM32F437xx、STM32F439xx、STM32F446xx、STM32F469xx、STM32F479xx
+- STM32F7xx
+- STM32H7xx
+- STM32L4xx
+- STM32MPxx
+
+## AT32
+
+- AT32F415xx
+
+## GD32
+
+- GD32F30X_CL
+- GD32F405、GD32F407
+- GD32F450
+
+## HC32
+
+- HC32F4A0

+ 709 - 0
port/synopsys/usb_dc_synopsys.c

@@ -0,0 +1,709 @@
+#include "usbd_core.h"
+#include "usb_synopsys_regs.h"
+
+/*!< USB registers base address */
+#define USB_OTG_HS_PERIPH_BASE 0x40040000UL
+#ifndef STM32H7
+#define USB_OTG_FS_PERIPH_BASE 0x50000000UL
+#else
+#define USB_OTG_FS_PERIPH_BASE 0x40080000UL
+#endif
+
+#define USB_OTG_FS ((USB_OTG_GlobalTypeDef *)USB_OTG_FS_PERIPH_BASE)
+#define USB_OTG_HS ((USB_OTG_GlobalTypeDef *)USB_OTG_HS_PERIPH_BASE)
+
+#if defined(CONFIG_USB_HS) || defined(CONFIG_USB_HS_IN_FULL)
+#ifndef USBD_IRQHandler
+#define USBD_IRQHandler OTG_HS_IRQHandler
+#endif
+
+#ifndef USB_RAM_SIZE
+#define USB_RAM_SIZE 4096
+#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
+#endif
+
+#endif
+
+#ifndef USB_NUM_BIDIR_ENDPOINTS
+#define USB_NUM_BIDIR_ENDPOINTS 6
+#endif
+
+#if defined(CONFIG_USB_HS) || defined(CONFIG_USB_HS_IN_FULL)
+/*FIFO sizes in bytes (total available memory for FIFOs is 4 kB)*/
+#ifndef CONFIG_USB_RX_FIFO_SIZE
+#define CONFIG_USB_RX_FIFO_SIZE (1024U)
+#endif
+#ifndef CONFIG_USB_TX0_FIFO_SIZE
+#define CONFIG_USB_TX0_FIFO_SIZE (64U)
+#endif
+#ifndef CONFIG_USB_TX1_FIFO_SIZE
+#define CONFIG_USB_TX1_FIFO_SIZE (1024U)
+#endif
+#ifndef CONFIG_USB_TX2_FIFO_SIZE
+#define CONFIG_USB_TX2_FIFO_SIZE (512U)
+#endif
+#ifndef CONFIG_USB_TX3_FIFO_SIZE
+#define CONFIG_USB_TX3_FIFO_SIZE (256U)
+#endif
+#ifndef CONFIG_USB_TX4_FIFO_SIZE
+#define CONFIG_USB_TX4_FIFO_SIZE (256U)
+#endif
+#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)
+#endif
+#ifndef CONFIG_USB_TX1_FIFO_SIZE
+#define CONFIG_USB_TX1_FIFO_SIZE (160U)
+#endif
+#ifndef CONFIG_USB_TX2_FIFO_SIZE
+#define CONFIG_USB_TX2_FIFO_SIZE (160U)
+#endif
+#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
+#define CONFIG_USB_TURNAROUND_TIME 9
+#endif
+
+/* Endpoint state */
+struct usb_dc_ep_state {
+    /** Endpoint max packet size */
+    uint16_t ep_mps;
+    /** Endpoint Transfer Type.
+     * May be Bulk, Interrupt, Control or Isochronous
+     */
+    uint8_t ep_type;
+    uint8_t ep_stalled; /** Endpoint stall flag */
+};
+
+/* Driver state */
+struct usb_dc_config_priv {
+    USB_OTG_GlobalTypeDef *Instance;                        /*!< Register base address */
+    struct usb_dc_ep_state in_ep[USB_NUM_BIDIR_ENDPOINTS];  /*!< IN endpoint parameters*/
+    struct usb_dc_ep_state out_ep[USB_NUM_BIDIR_ENDPOINTS]; /*!< OUT endpoint parameters */
+    volatile uint32_t grxstsp;
+} usb_dc_cfg;
+
+static int usb_flush_rxfifo(USB_OTG_GlobalTypeDef *USBx);
+static int usb_flush_txfifo(USB_OTG_GlobalTypeDef *USBx, uint32_t num);
+static void usb_set_txfifo(USB_OTG_GlobalTypeDef *USBx, uint8_t fifo, uint16_t size);
+
+__WEAK void usb_dc_low_level_init(void)
+{
+}
+
+__WEAK void usb_dc_low_level_deinit(void)
+{
+}
+
+int usb_dc_init(void)
+{
+    uint32_t USBx_BASE;
+    uint32_t count = 0U;
+
+    memset(&usb_dc_cfg, 0, sizeof(struct usb_dc_config_priv));
+
+#if defined(CONFIG_USB_HS) || defined(CONFIG_USB_HS_IN_FULL)
+    usb_dc_cfg.Instance = USB_OTG_HS;
+#else
+    usb_dc_cfg.Instance = USB_OTG_FS;
+#endif
+    USB_OTG_GlobalTypeDef *USBx = usb_dc_cfg.Instance;
+
+    usb_dc_low_level_init();
+
+    USBx_BASE = (uint32_t)USBx;
+
+    USBx_DEVICE->DCTL |= USB_OTG_DCTL_SDIS;
+
+    USBx->GAHBCFG &= ~USB_OTG_GAHBCFG_GINT;
+#if defined(CONFIG_USB_HS)
+    USBx->GCCFG &= ~(USB_OTG_GCCFG_PWRDWN);
+
+    /* Init The ULPI Interface */
+    USBx->GUSBCFG &= ~(USB_OTG_GUSBCFG_TSDPS | USB_OTG_GUSBCFG_ULPIFSLS | USB_OTG_GUSBCFG_PHYSEL);
+
+    /* Select vbus source */
+    USBx->GUSBCFG &= ~(USB_OTG_GUSBCFG_ULPIEVBUSD | USB_OTG_GUSBCFG_ULPIEVBUSI);
+
+    //USBx->GUSBCFG |= USB_OTG_GUSBCFG_ULPIEVBUSD;
+
+#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 */
+    /* Wait for AHB master IDLE state. */
+    do {
+        if (++count > 200000U) {
+            return -1;
+        }
+    } while ((USBx->GRSTCTL & USB_OTG_GRSTCTL_AHBIDL) == 0U);
+
+    /* Core Soft Reset */
+    count = 0U;
+    USBx->GRSTCTL |= USB_OTG_GRSTCTL_CSRST;
+
+    do {
+        if (++count > 200000U) {
+            return -1;
+        }
+    } while ((USBx->GRSTCTL & USB_OTG_GRSTCTL_CSRST) == USB_OTG_GRSTCTL_CSRST);
+
+    /* Force Device Mode*/
+    USBx->GUSBCFG |= USB_OTG_GUSBCFG_FDMOD;
+
+    USBx->GUSBCFG &= ~USB_OTG_GUSBCFG_TRDT;
+    USBx->GUSBCFG |= (uint32_t)((CONFIG_USB_TURNAROUND_TIME << 10) & USB_OTG_GUSBCFG_TRDT);
+
+    for (uint8_t i = 0U; i < 15U; i++) {
+        USBx->DIEPTXF[i] = 0U;
+    }
+
+    /* VBUS Sensing setup */
+    //  if (cfg.vbus_sensing_enable == 0U)
+    //  {
+    /* 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;
+    //  }
+    //
+
+    /* Restart the Phy Clock */
+    USBx_PCGCCTL = 0U;
+
+    /* Device mode configuration */
+    USBx_DEVICE->DCFG |= DCFG_FRAME_INTERVAL_80;
+#if defined(CONFIG_USB_HS)
+    /* Set Core speed to High speed mode */
+    USBx_DEVICE->DCFG |= USB_OTG_SPEED_HIGH;
+#else
+    USBx_DEVICE->DCFG |= USB_OTG_SPEED_FULL;
+#endif
+
+    usb_flush_txfifo(USBx, 0x10U);
+    usb_flush_rxfifo(USBx);
+
+    /* Clear all pending Device Interrupts */
+    USBx_DEVICE->DIEPMSK = 0U;
+    USBx_DEVICE->DOEPMSK = 0U;
+    USBx_DEVICE->DAINTMSK = 0U;
+
+    for (uint8_t i = 0U; i < USB_NUM_BIDIR_ENDPOINTS; i++) {
+        if ((USBx_INEP(i)->DIEPCTL & USB_OTG_DIEPCTL_EPENA) == USB_OTG_DIEPCTL_EPENA) {
+            if (i == 0U) {
+                USBx_INEP(i)->DIEPCTL = USB_OTG_DIEPCTL_SNAK;
+            } else {
+                USBx_INEP(i)->DIEPCTL = USB_OTG_DIEPCTL_EPDIS | USB_OTG_DIEPCTL_SNAK;
+            }
+        } else {
+            USBx_INEP(i)->DIEPCTL = 0U;
+        }
+
+        USBx_INEP(i)->DIEPTSIZ = 0U;
+        USBx_INEP(i)->DIEPINT = 0xFB7FU;
+    }
+    for (uint8_t i = 0U; i < USB_NUM_BIDIR_ENDPOINTS; i++) {
+        if ((USBx_OUTEP(i)->DOEPCTL & USB_OTG_DOEPCTL_EPENA) == USB_OTG_DOEPCTL_EPENA) {
+            if (i == 0U) {
+                USBx_OUTEP(i)->DOEPCTL = USB_OTG_DOEPCTL_SNAK;
+            } else {
+                USBx_OUTEP(i)->DOEPCTL = USB_OTG_DOEPCTL_EPDIS | USB_OTG_DOEPCTL_SNAK;
+            }
+        } else {
+            USBx_OUTEP(i)->DOEPCTL = 0U;
+        }
+
+        USBx_OUTEP(i)->DOEPTSIZ = 0U;
+        USBx_OUTEP(i)->DOEPINT = 0xFB7FU;
+    }
+
+    /* Disable all interrupts. */
+    USBx->GINTMSK = 0U;
+
+    /* Clear any pending interrupts */
+    USBx->GINTSTS = 0xBFFFFFFFU;
+
+    /* Enable interrupts matching to the Device mode ONLY */
+    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;
+
+    USBx->GRXFSIZ = (CONFIG_USB_RX_FIFO_SIZE / 4);
+
+    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);
+
+    USBx->GAHBCFG |= USB_OTG_GAHBCFG_GINT;
+    USBx_DEVICE->DCTL &= ~USB_OTG_DCTL_SDIS;
+
+    return 0;
+}
+
+void usb_dc_deinit(void)
+{
+    USB_OTG_GlobalTypeDef *USBx = usb_dc_cfg.Instance;
+    uint32_t USBx_BASE = (uint32_t)USBx;
+
+    usb_dc_low_level_deinit();
+}
+
+int usbd_set_address(const uint8_t addr)
+{
+    USB_OTG_GlobalTypeDef *USBx = usb_dc_cfg.Instance;
+    uint32_t USBx_BASE = (uint32_t)USBx;
+    USBx_DEVICE->DCFG &= ~(USB_OTG_DCFG_DAD);
+    USBx_DEVICE->DCFG |= ((uint32_t)addr << 4) & USB_OTG_DCFG_DAD;
+    return 0;
+}
+
+int usbd_ep_open(const struct usbd_endpoint_cfg *ep_cfg)
+{
+    USB_OTG_GlobalTypeDef *USBx = usb_dc_cfg.Instance;
+    uint32_t USBx_BASE = (uint32_t)USBx;
+    uint8_t ep_idx = USB_EP_GET_IDX(ep_cfg->ep_addr);
+
+    if (!ep_cfg) {
+        return -1;
+    }
+
+    if (USB_EP_DIR_IS_OUT(ep_cfg->ep_addr)) {
+        usb_dc_cfg.out_ep[ep_idx].ep_mps = ep_cfg->ep_mps;
+        usb_dc_cfg.out_ep[ep_idx].ep_type = ep_cfg->ep_type;
+
+        USBx_DEVICE->DAINTMSK |= USB_OTG_DAINTMSK_OEPM & (uint32_t)(1UL << (16 + ep_idx));
+
+        USBx_OUTEP(ep_idx)->DOEPCTL |= (ep_cfg->ep_mps & USB_OTG_DOEPCTL_MPSIZ) |
+                                       ((uint32_t)ep_cfg->ep_type << 18) |
+                                       USB_OTG_DIEPCTL_SD0PID_SEVNFRM |
+                                       USB_OTG_DOEPCTL_USBAEP;
+        /* EP enable */
+        USBx_OUTEP(ep_idx)->DOEPCTL |= (USB_OTG_DOEPCTL_CNAK | USB_OTG_DOEPCTL_EPENA);
+    } else {
+        usb_dc_cfg.in_ep[ep_idx].ep_mps = ep_cfg->ep_mps;
+        usb_dc_cfg.in_ep[ep_idx].ep_type = ep_cfg->ep_type;
+
+        USBx_DEVICE->DAINTMSK |= USB_OTG_DAINTMSK_IEPM & (uint32_t)(1UL << ep_idx);
+
+        USBx_INEP(ep_idx)->DIEPCTL |= (ep_cfg->ep_mps & USB_OTG_DIEPCTL_MPSIZ) |
+                                      ((uint32_t)ep_cfg->ep_type << 18) | (ep_idx << 22) |
+                                      USB_OTG_DIEPCTL_SD0PID_SEVNFRM |
+                                      USB_OTG_DIEPCTL_USBAEP;
+    }
+    return 0;
+}
+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)
+{
+    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)) {
+        USBx_OUTEP(ep_idx)->DOEPCTL |= USB_OTG_DOEPCTL_STALL;
+    } else {
+        USBx_INEP(ep_idx)->DIEPCTL |= USB_OTG_DIEPCTL_STALL;
+    }
+
+    return 0;
+}
+int usbd_ep_clear_stall(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)) {
+        USBx_OUTEP(ep_idx)->DOEPCTL &= ~USB_OTG_DOEPCTL_STALL;
+    } else {
+        USBx_INEP(ep_idx)->DIEPCTL &= ~USB_OTG_DIEPCTL_STALL;
+    }
+    return 0;
+}
+int usbd_ep_is_stalled(const uint8_t ep, uint8_t *stalled)
+{
+    if (USB_EP_DIR_IS_OUT(ep)) {
+    } else {
+    }
+    return 0;
+}
+
+int usbd_ep_write(const uint8_t ep, const uint8_t *data, uint32_t data_len, uint32_t *ret_bytes)
+{
+    USB_OTG_GlobalTypeDef *USBx = usb_dc_cfg.Instance;
+    uint32_t USBx_BASE = (uint32_t)USBx;
+    uint8_t ep_idx = USB_EP_GET_IDX(ep);
+    uint32_t len32b;
+
+    if (!data && data_len) {
+        return -1;
+    }
+
+    if (!data_len) {
+        USBx_INEP(ep_idx)->DIEPTSIZ &= ~(USB_OTG_DIEPTSIZ_PKTCNT);
+        USBx_INEP(ep_idx)->DIEPTSIZ &= ~(USB_OTG_DIEPTSIZ_XFRSIZ);
+        USBx_INEP(ep_idx)->DIEPTSIZ |= (USB_OTG_DIEPTSIZ_PKTCNT & (1U << 19));
+        /* EP enable, IN data in FIFO */
+        USBx_INEP(ep_idx)->DIEPCTL |= (USB_OTG_DIEPCTL_CNAK | USB_OTG_DIEPCTL_EPENA);
+
+        return 0;
+    }
+
+    if (data_len > usb_dc_cfg.in_ep[ep_idx].ep_mps) {
+        data_len = usb_dc_cfg.in_ep[ep_idx].ep_mps;
+    }
+
+    /* Program the transfer size and packet count
+      * as follows: xfersize = N * maxpacket +
+      * short_packet pktcnt = N + (short_packet
+      * exist ? 1 : 0)
+      */
+    USBx_INEP(ep_idx)->DIEPTSIZ &= ~(USB_OTG_DIEPTSIZ_PKTCNT);
+    USBx_INEP(ep_idx)->DIEPTSIZ &= ~(USB_OTG_DIEPTSIZ_XFRSIZ);
+    USBx_INEP(ep_idx)->DIEPTSIZ |= (USB_OTG_DIEPTSIZ_PKTCNT & (1U << 19));
+    //USBx_INEP(ep_idx)->DIEPTSIZ |= (USB_OTG_DIEPTSIZ_PKTCNT & (((data_len + usb_dc_cfg.in_ep[ep_idx].ep_mps - 1U) / usb_dc_cfg.in_ep[ep_idx].ep_mps) << 19));
+    USBx_INEP(ep_idx)->DIEPTSIZ |= (USB_OTG_DIEPTSIZ_XFRSIZ & data_len);
+    /* EP enable, IN data in FIFO */
+    USBx_INEP(ep_idx)->DIEPCTL |= (USB_OTG_DIEPCTL_CNAK | USB_OTG_DIEPCTL_EPENA);
+
+    if (usb_dc_cfg.in_ep[ep_idx].ep_type == EP_TYPE_ISOC) {
+        USBx_INEP(ep_idx)->DIEPTSIZ &= ~(USB_OTG_DIEPTSIZ_MULCNT);
+        USBx_INEP(ep_idx)->DIEPTSIZ |= (USB_OTG_DIEPTSIZ_MULCNT & (1U << 29));
+
+        if ((USBx_DEVICE->DSTS & (1U << 8)) == 0U) {
+            USBx_INEP(ep_idx)->DIEPCTL |= USB_OTG_DIEPCTL_SODDFRM;
+        } else {
+            USBx_INEP(ep_idx)->DIEPCTL |= USB_OTG_DIEPCTL_SD0PID_SEVNFRM;
+        }
+    }
+
+    len32b = (data_len + 3U) / 4U;
+
+    while (USBx_INEP(ep_idx)->DTXFSTS < len32b) {
+    }
+    for (uint8_t i = 0U; i < len32b; i++) {
+        USBx_DFIFO(ep_idx) = ((uint32_t *)data)[i];
+    }
+
+    if (ret_bytes) {
+        *ret_bytes = data_len;
+    }
+
+    return 0;
+}
+
+int usbd_ep_read(const uint8_t ep, uint8_t *data, uint32_t max_data_len, uint32_t *read_bytes)
+{
+    USB_OTG_GlobalTypeDef *USBx = usb_dc_cfg.Instance;
+    uint32_t USBx_BASE = (uint32_t)USBx;
+    uint8_t ep_idx = USB_EP_GET_IDX(ep);
+    uint32_t *pdest = (uint32_t *)data;
+    uint32_t len32b;
+    uint32_t read_count;
+    uint32_t pktcnt;
+    if (!data && max_data_len) {
+        return -1;
+    }
+
+    if (!max_data_len) {
+        if (ep_idx != 0) {
+            /* Program the transfer size and packet count as follows:
+            * pktcnt = N
+            * xfersize = N * maxpacket
+            */
+            pktcnt = (uint16_t)((max_data_len + usb_dc_cfg.out_ep[ep_idx].ep_mps - 1U) / usb_dc_cfg.out_ep[ep_idx].ep_mps);
+            USBx_OUTEP(ep_idx)->DOEPTSIZ &= ~(USB_OTG_DOEPTSIZ_PKTCNT);
+            USBx_OUTEP(ep_idx)->DOEPTSIZ &= ~(USB_OTG_DOEPTSIZ_XFRSIZ);
+            USBx_OUTEP(ep_idx)->DOEPTSIZ |= (USB_OTG_DOEPTSIZ_PKTCNT & (pktcnt << 19));
+            USBx_OUTEP(ep_idx)->DOEPTSIZ |= (USB_OTG_DOEPTSIZ_XFRSIZ & usb_dc_cfg.out_ep[ep_idx].ep_mps * pktcnt);
+            /* EP enable */
+            USBx_OUTEP(ep_idx)->DOEPCTL |= (USB_OTG_DOEPCTL_CNAK | USB_OTG_DOEPCTL_EPENA);
+        }
+
+        return 0;
+    }
+
+    if (max_data_len > usb_dc_cfg.out_ep[ep_idx].ep_mps) {
+        max_data_len = usb_dc_cfg.out_ep[ep_idx].ep_mps;
+    }
+
+    read_count = (usb_dc_cfg.grxstsp & USB_OTG_GRXSTSP_BCNT) >> 4;
+    read_count = MIN(read_count, max_data_len);
+
+    len32b = ((uint32_t)read_count + 3U) / 4U;
+
+    for (uint8_t i = 0U; i < len32b; i++) {
+        *pdest = USBx_DFIFO(0U);
+        pdest++;
+    }
+
+    if (read_bytes) {
+        *read_bytes = read_count;
+    }
+
+    usb_dc_cfg.grxstsp = 0;
+    return 0;
+}
+
+/**
+  * @brief  This function handles PCD interrupt request.
+  * @param  hpcd PCD handle
+  * @retval HAL status
+  */
+void USBD_IRQHandler(void)
+{
+    USB_OTG_GlobalTypeDef *USBx = usb_dc_cfg.Instance;
+    uint32_t gint_status, temp, epnum, ep_intr, epint;
+    uint32_t USBx_BASE = (uint32_t)USBx;
+    gint_status = USBx->GINTSTS;
+
+    if ((gint_status & 0x1U) == USB_OTG_MODE_DEVICE) {
+        if (gint_status == 0) {
+            return;
+        }
+        /* Handle RxQLevel Interrupt */
+        if (gint_status & USB_OTG_GINTSTS_RXFLVL) {
+            USB_MASK_INTERRUPT(USBx, USB_OTG_GINTSTS_RXFLVL);
+            temp = USBx->GRXSTSP;
+            usb_dc_cfg.grxstsp = temp;
+            epnum = temp & USB_OTG_GRXSTSP_EPNUM;
+            if (((temp & USB_OTG_GRXSTSP_PKTSTS) >> USB_OTG_GRXSTSP_PKTSTS_Pos) == STS_DATA_UPDT) {
+                if ((temp & USB_OTG_GRXSTSP_BCNT) != 0U) {
+                    if (epnum == 0) {
+                        usbd_event_notify_handler(USBD_EVENT_EP0_OUT_NOTIFY, NULL);
+                    } else {
+                        usbd_event_notify_handler(USBD_EVENT_EP_OUT_NOTIFY, (void *)(epnum | USB_EP_DIR_OUT));
+                    }
+                }
+            } else if (((temp & USB_OTG_GRXSTSP_PKTSTS) >> USB_OTG_GRXSTSP_PKTSTS_Pos) == STS_SETUP_UPDT) {
+                uint8_t len = (temp & USB_OTG_GRXSTSP_BCNT) >> 4;
+                usbd_event_notify_handler(USBD_EVENT_SETUP_NOTIFY, NULL);
+            } else {
+                /* ... */
+            }
+            USB_UNMASK_INTERRUPT(USBx, USB_OTG_GINTSTS_RXFLVL);
+        }
+
+        if (gint_status & USB_OTG_GINTSTS_OEPINT) {
+            epnum = 0;
+            /* Read in the device interrupt bits */
+            ep_intr = USBx_DEVICE->DAINT;
+            ep_intr &= USBx_DEVICE->DAINTMSK;
+            ep_intr >>= 16;
+
+            while (ep_intr != 0U) {
+                if ((ep_intr & 0x1U) != 0U) {
+                    epint = USBx_OUTEP((uint32_t)epnum)->DOEPINT;
+
+                    epint &= USBx_DEVICE->DOEPMSK;
+                    if ((epint & USB_OTG_DOEPINT_STUP) == USB_OTG_DOEPINT_STUP) {
+                        USBx_OUTEP(epnum)->DOEPINT = (USB_OTG_DOEPINT_STUP);
+
+                        USBx_OUTEP(epnum)->DOEPTSIZ = 1U << USB_OTG_DOEPTSIZ_PKTCNT_Pos |
+                                                      (USBx_OUTEP(epnum)->DOEPCTL & USB_OTG_DOEPCTL_MPSIZ) << USB_OTG_DOEPTSIZ_XFRSIZ_Pos;
+                        USBx_OUTEP(epnum)->DOEPCTL |= USB_OTG_DOEPCTL_EPENA | USB_OTG_DOEPCTL_CNAK;
+                    }
+                    if ((epint & USB_OTG_DOEPINT_XFRC) == USB_OTG_DOEPINT_XFRC) {
+                        USBx_OUTEP(epnum)->DOEPINT = (USB_OTG_DOEPINT_XFRC);
+
+                        if (epnum == 0) {
+                            USBx_OUTEP(epnum)->DOEPTSIZ = 1U << USB_OTG_DOEPTSIZ_PKTCNT_Pos |
+                                                          (USBx_OUTEP(epnum)->DOEPCTL & USB_OTG_DOEPCTL_MPSIZ) << USB_OTG_DOEPTSIZ_XFRSIZ_Pos;
+                            USBx_OUTEP(epnum)->DOEPCTL |= USB_OTG_DOEPCTL_EPENA | USB_OTG_DOEPCTL_CNAK;
+                        }
+                    }
+                }
+                ep_intr >>= 1U;
+                epnum++;
+            }
+        }
+        if (gint_status & USB_OTG_GINTSTS_IEPINT) {
+            epnum = 0U;
+            ep_intr = USBx_DEVICE->DAINT & 0xFFFF;
+            ep_intr &= USBx_DEVICE->DAINTMSK;
+            while (ep_intr != 0U) {
+                if ((ep_intr & 0x1U) != 0U) {
+                    epint = USBx_INEP((uint32_t)epnum)->DIEPINT;
+                    epint &= USBx_DEVICE->DIEPMSK;
+
+                    if ((epint & USB_OTG_DIEPINT_XFRC) == USB_OTG_DIEPINT_XFRC) {
+                        USBx_INEP(epnum)->DIEPINT = USB_OTG_DIEPINT_XFRC;
+                        if (epnum == 0) {
+                            usbd_event_notify_handler(USBD_EVENT_EP0_IN_NOTIFY, NULL);
+                        } else {
+                            usbd_event_notify_handler(USBD_EVENT_EP_IN_NOTIFY, (void *)(epnum | USB_EP_DIR_IN));
+                        }
+                    }
+                }
+                ep_intr >>= 1U;
+                epnum++;
+            }
+        }
+        if (gint_status & USB_OTG_GINTSTS_USBRST) {
+            USBx->GINTSTS |= USB_OTG_GINTSTS_USBRST;
+            USBx_DEVICE->DCTL &= ~USB_OTG_DCTL_RWUSIG;
+
+            usb_flush_txfifo(USBx, 0x10U);
+            usb_flush_rxfifo(USBx);
+            for (uint8_t i = 0U; i < USB_NUM_BIDIR_ENDPOINTS; i++) {
+                USBx_INEP(i)->DIEPINT = 0xFB7FU;
+                USBx_INEP(i)->DIEPCTL &= ~USB_OTG_DIEPCTL_STALL;
+                USBx_INEP(i)->DIEPCTL |= USB_OTG_DIEPCTL_SNAK;
+                USBx_OUTEP(i)->DOEPINT = 0xFB7FU;
+                USBx_OUTEP(i)->DOEPCTL &= ~USB_OTG_DOEPCTL_STALL;
+                USBx_OUTEP(i)->DOEPCTL |= USB_OTG_DOEPCTL_SNAK;
+            }
+            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);
+            USBx_OUTEP(0U)->DOEPTSIZ |= USB_OTG_DOEPTSIZ_STUPCNT;
+            USBx_OUTEP(0)->DOEPCTL |= USB_OTG_DOEPCTL_EPENA | USB_OTG_DOEPCTL_CNAK;
+
+            usbd_event_notify_handler(USBD_EVENT_RESET, NULL);
+        }
+        if (gint_status & USB_OTG_GINTSTS_ENUMDNE) {
+            USBx->GINTSTS |= USB_OTG_GINTSTS_ENUMDNE;
+            //uint8_t speed = USBx_DEVICE->DSTS & USB_OTG_DSTS_ENUMSPD;
+            /* Set the MPS of the IN EP0 to 64 bytes */
+            USBx_INEP(0U)->DIEPCTL &= ~USB_OTG_DIEPCTL_MPSIZ;
+
+            USBx_DEVICE->DCTL |= USB_OTG_DCTL_CGINAK;
+        }
+        if (gint_status & USB_OTG_GINTSTS_SOF) {
+            USBx->GINTSTS |= USB_OTG_GINTSTS_SOF;
+        }
+        if (gint_status & USB_OTG_GINTSTS_USBSUSP) {
+            USBx->GINTSTS |= USB_OTG_GINTSTS_USBSUSP;
+        }
+    }
+}
+
+static int usb_flush_rxfifo(USB_OTG_GlobalTypeDef *USBx)
+{
+    uint32_t count = 0;
+
+    USBx->GRSTCTL = USB_OTG_GRSTCTL_RXFFLSH;
+
+    do {
+        if (++count > 200000U) {
+            return -1;
+        }
+    } while ((USBx->GRSTCTL & USB_OTG_GRSTCTL_RXFFLSH) == USB_OTG_GRSTCTL_RXFFLSH);
+
+    return 0;
+}
+
+static int usb_flush_txfifo(USB_OTG_GlobalTypeDef *USBx, uint32_t num)
+{
+    uint32_t count = 0U;
+
+    USBx->GRSTCTL = (USB_OTG_GRSTCTL_TXFFLSH | (num << 6));
+
+    do {
+        if (++count > 200000U) {
+            return -1;
+        }
+    } while ((USBx->GRSTCTL & USB_OTG_GRSTCTL_TXFFLSH) == USB_OTG_GRSTCTL_TXFFLSH);
+
+    return 0;
+}
+
+static void usb_set_txfifo(USB_OTG_GlobalTypeDef *USBx, uint8_t fifo, uint16_t size)
+{
+    uint8_t i;
+    uint32_t Tx_Offset;
+
+    /*  TXn min size = 16 words. (n  : Transmit FIFO index)
+      When a TxFIFO is not used, the Configuration should be as follows:
+          case 1 :  n > m    and Txn is not used    (n,m  : Transmit FIFO indexes)
+         --> Txm can use the space allocated for Txn.
+         case2  :  n < m    and Txn is not used    (n,m  : Transmit FIFO indexes)
+         --> Txn should be configured with the minimum space of 16 words
+     The FIFO is used optimally when used TxFIFOs are allocated in the top
+         of the FIFO.Ex: use EP1 and EP2 as IN instead of EP1 and EP3 as IN ones.
+     When DMA is used 3n * FIFO locations should be reserved for internal DMA registers */
+
+    Tx_Offset = USBx->GRXFSIZ;
+
+    if (fifo == 0U) {
+        USBx->DIEPTXF0_HNPTXFSIZ = ((uint32_t)size << 16) | Tx_Offset;
+    } else {
+        Tx_Offset += (USBx->DIEPTXF0_HNPTXFSIZ) >> 16;
+        for (i = 0U; i < (fifo - 1U); i++) {
+            Tx_Offset += (USBx->DIEPTXF[i] >> 16);
+        }
+
+        /* Multiply Tx_Size by 2 to get higher performance */
+        USBx->DIEPTXF[fifo - 1U] = ((uint32_t)size << 16) | Tx_Offset;
+    }
+}

+ 191 - 57
port/synopsys/usb_synopsys_regs.h

@@ -7,7 +7,7 @@
   */
 typedef struct
 {
-  __IO uint32_t GOTGCTL;              /*!< USB_OTG Control and Status Register          000h */
+ __IO uint32_t GOTGCTL;               /*!< USB_OTG Control and Status Register          000h */
   __IO uint32_t GOTGINT;              /*!< USB_OTG Interrupt Register                   004h */
   __IO uint32_t GAHBCFG;              /*!< Core AHB Configuration Register              008h */
   __IO uint32_t GUSBCFG;              /*!< Core USB Configuration Register              00Ch */
@@ -22,9 +22,18 @@ typedef struct
   uint32_t Reserved30[2];             /*!< Reserved                                     030h */
   __IO uint32_t GCCFG;                /*!< General Purpose IO Register                  038h */
   __IO uint32_t CID;                  /*!< User ID Register                             03Ch */
-  uint32_t  Reserved40[48];           /*!< Reserved                                0x40-0xFF */
+  __IO uint32_t GSNPSID;              /* USB_OTG core ID                                040h*/
+  __IO uint32_t GHWCFG1;              /* User HW config1                                044h*/
+  __IO uint32_t GHWCFG2;              /* User HW config2                                048h*/
+  __IO uint32_t GHWCFG3;              /*!< User HW config3                              04Ch */
+  uint32_t  Reserved6;                /*!< Reserved                                     050h */
+  __IO uint32_t GLPMCFG;              /*!< LPM Register                                 054h */
+  __IO uint32_t GPWRDN;               /*!< Power Down Register                          058h */
+  __IO uint32_t GDFIFOCFG;            /*!< DFIFO Software Config Register               05Ch */
+   __IO uint32_t GADPCTL;             /*!< ADP Timer, Control and Status Register       60Ch */
+    uint32_t  Reserved43[39];         /*!< Reserved                                058h-0FFh */
   __IO uint32_t HPTXFSIZ;             /*!< Host Periodic Tx FIFO Size Reg               100h */
-  __IO uint32_t DIEPTXF[0x0F];        /*!< dev Periodic Transmit FIFO                        */
+  __IO uint32_t DIEPTXF[0x0F];        /*!< dev Periodic Transmit FIFO */
 } USB_OTG_GlobalTypeDef;
 
 /**
@@ -111,12 +120,18 @@ typedef struct
   uint32_t Reserved[2];           /*!< Reserved                                      */
 } USB_OTG_HostChannelTypeDef;
 
-/*!< USB registers base address */
-#define USB_OTG_HS_PERIPH_BASE               0x40040000UL
-#define USB_OTG_FS_PERIPH_BASE               0x50000000UL
-
-#define USB_OTG_FS          ((USB_OTG_GlobalTypeDef *) USB_OTG_FS_PERIPH_BASE)
-#define USB_OTG_HS          ((USB_OTG_GlobalTypeDef *) USB_OTG_HS_PERIPH_BASE)
+#define USB_OTG_GLOBAL_BASE                  0x000UL
+#define USB_OTG_DEVICE_BASE                  0x800UL
+#define USB_OTG_IN_ENDPOINT_BASE             0x900UL
+#define USB_OTG_OUT_ENDPOINT_BASE            0xB00UL
+#define USB_OTG_EP_REG_SIZE                  0x20UL
+#define USB_OTG_HOST_BASE                    0x400UL
+#define USB_OTG_HOST_PORT_BASE               0x440UL
+#define USB_OTG_HOST_CHANNEL_BASE            0x500UL
+#define USB_OTG_HOST_CHANNEL_SIZE            0x20UL
+#define USB_OTG_PCGCCTL_BASE                 0xE00UL
+#define USB_OTG_FIFO_BASE                    0x1000UL
+#define USB_OTG_FIFO_SIZE                    0x1000UL
 
 /******************************************************************************/
 /*                                                                            */
@@ -130,6 +145,24 @@ typedef struct
 #define USB_OTG_GOTGCTL_SRQ_Pos                  (1U)
 #define USB_OTG_GOTGCTL_SRQ_Msk                  (0x1UL << USB_OTG_GOTGCTL_SRQ_Pos) /*!< 0x00000002 */
 #define USB_OTG_GOTGCTL_SRQ                      USB_OTG_GOTGCTL_SRQ_Msk       /*!< Session request */
+#define USB_OTG_GOTGCTL_VBVALOEN_Pos             (2U)
+#define USB_OTG_GOTGCTL_VBVALOEN_Msk             (0x1UL << USB_OTG_GOTGCTL_VBVALOEN_Pos) /*!< 0x00000004 */
+#define USB_OTG_GOTGCTL_VBVALOEN                 USB_OTG_GOTGCTL_VBVALOEN_Msk  /*!< VBUS valid override enable */
+#define USB_OTG_GOTGCTL_VBVALOVAL_Pos            (3U)
+#define USB_OTG_GOTGCTL_VBVALOVAL_Msk            (0x1UL << USB_OTG_GOTGCTL_VBVALOVAL_Pos) /*!< 0x00000008 */
+#define USB_OTG_GOTGCTL_VBVALOVAL                USB_OTG_GOTGCTL_VBVALOVAL_Msk /*!< VBUS valid override value */
+#define USB_OTG_GOTGCTL_AVALOEN_Pos              (4U)
+#define USB_OTG_GOTGCTL_AVALOEN_Msk              (0x1UL << USB_OTG_GOTGCTL_AVALOEN_Pos) /*!< 0x00000010 */
+#define USB_OTG_GOTGCTL_AVALOEN                  USB_OTG_GOTGCTL_AVALOEN_Msk   /*!< A-peripheral session valid override enable */
+#define USB_OTG_GOTGCTL_AVALOVAL_Pos             (5U)
+#define USB_OTG_GOTGCTL_AVALOVAL_Msk             (0x1UL << USB_OTG_GOTGCTL_AVALOVAL_Pos) /*!< 0x00000020 */
+#define USB_OTG_GOTGCTL_AVALOVAL                 USB_OTG_GOTGCTL_AVALOVAL_Msk  /*!< A-peripheral session valid override value */
+#define USB_OTG_GOTGCTL_BVALOEN_Pos              (6U)
+#define USB_OTG_GOTGCTL_BVALOEN_Msk              (0x1UL << USB_OTG_GOTGCTL_BVALOEN_Pos) /*!< 0x00000040 */
+#define USB_OTG_GOTGCTL_BVALOEN                  USB_OTG_GOTGCTL_BVALOEN_Msk   /*!< B-peripheral session valid override enable */
+#define USB_OTG_GOTGCTL_BVALOVAL_Pos             (7U)
+#define USB_OTG_GOTGCTL_BVALOVAL_Msk             (0x1UL << USB_OTG_GOTGCTL_BVALOVAL_Pos) /*!< 0x00000080 */
+#define USB_OTG_GOTGCTL_BVALOVAL                 USB_OTG_GOTGCTL_BVALOVAL_Msk  /*!< B-peripheral session valid override value  */
 #define USB_OTG_GOTGCTL_HNGSCS_Pos               (8U)
 #define USB_OTG_GOTGCTL_HNGSCS_Msk               (0x1UL << USB_OTG_GOTGCTL_HNGSCS_Pos) /*!< 0x00000100 */
 #define USB_OTG_GOTGCTL_HNGSCS                   USB_OTG_GOTGCTL_HNGSCS_Msk    /*!< Host set HNP enable */
@@ -142,6 +175,9 @@ typedef struct
 #define USB_OTG_GOTGCTL_DHNPEN_Pos               (11U)
 #define USB_OTG_GOTGCTL_DHNPEN_Msk               (0x1UL << USB_OTG_GOTGCTL_DHNPEN_Pos) /*!< 0x00000800 */
 #define USB_OTG_GOTGCTL_DHNPEN                   USB_OTG_GOTGCTL_DHNPEN_Msk    /*!< Device HNP enabled */
+#define USB_OTG_GOTGCTL_EHEN_Pos                 (12U)
+#define USB_OTG_GOTGCTL_EHEN_Msk                 (0x1UL << USB_OTG_GOTGCTL_EHEN_Pos) /*!< 0x00001000 */
+#define USB_OTG_GOTGCTL_EHEN                     USB_OTG_GOTGCTL_EHEN_Msk      /*!< Embedded host enable */
 #define USB_OTG_GOTGCTL_CIDSTS_Pos               (16U)
 #define USB_OTG_GOTGCTL_CIDSTS_Msk               (0x1UL << USB_OTG_GOTGCTL_CIDSTS_Pos) /*!< 0x00010000 */
 #define USB_OTG_GOTGCTL_CIDSTS                   USB_OTG_GOTGCTL_CIDSTS_Msk    /*!< Connector ID status */
@@ -151,9 +187,12 @@ typedef struct
 #define USB_OTG_GOTGCTL_ASVLD_Pos                (18U)
 #define USB_OTG_GOTGCTL_ASVLD_Msk                (0x1UL << USB_OTG_GOTGCTL_ASVLD_Pos) /*!< 0x00040000 */
 #define USB_OTG_GOTGCTL_ASVLD                    USB_OTG_GOTGCTL_ASVLD_Msk     /*!< A-session valid  */
-#define USB_OTG_GOTGCTL_BSVLD_Pos                (19U)
-#define USB_OTG_GOTGCTL_BSVLD_Msk                (0x1UL << USB_OTG_GOTGCTL_BSVLD_Pos) /*!< 0x00080000 */
-#define USB_OTG_GOTGCTL_BSVLD                    USB_OTG_GOTGCTL_BSVLD_Msk     /*!< B-session valid */
+#define USB_OTG_GOTGCTL_BSESVLD_Pos              (19U)
+#define USB_OTG_GOTGCTL_BSESVLD_Msk              (0x1UL << USB_OTG_GOTGCTL_BSESVLD_Pos) /*!< 0x00080000 */
+#define USB_OTG_GOTGCTL_BSESVLD                  USB_OTG_GOTGCTL_BSESVLD_Msk   /*!< B-session valid */
+#define USB_OTG_GOTGCTL_OTGVER_Pos               (20U)
+#define USB_OTG_GOTGCTL_OTGVER_Msk               (0x1UL << USB_OTG_GOTGCTL_OTGVER_Pos) /*!< 0x00100000 */
+#define USB_OTG_GOTGCTL_OTGVER                   USB_OTG_GOTGCTL_OTGVER_Msk    /*!< OTG version  */
 
 /********************  Bit definition forUSB_OTG_HCFG register  ********************/
 
@@ -578,6 +617,9 @@ typedef struct
 #define USB_OTG_GINTSTS_DATAFSUSP_Pos            (22U)
 #define USB_OTG_GINTSTS_DATAFSUSP_Msk            (0x1UL << USB_OTG_GINTSTS_DATAFSUSP_Pos) /*!< 0x00400000 */
 #define USB_OTG_GINTSTS_DATAFSUSP                USB_OTG_GINTSTS_DATAFSUSP_Msk /*!< Data fetch suspended                           */
+#define USB_OTG_GINTSTS_RSTDET_Pos               (23U)
+#define USB_OTG_GINTSTS_RSTDET_Msk               (0x1UL << USB_OTG_GINTSTS_RSTDET_Pos) /*!< 0x00800000 */
+#define USB_OTG_GINTSTS_RSTDET                   USB_OTG_GINTSTS_RSTDET_Msk    /*!< Reset detected interrupt                       */
 #define USB_OTG_GINTSTS_HPRTINT_Pos              (24U)
 #define USB_OTG_GINTSTS_HPRTINT_Msk              (0x1UL << USB_OTG_GINTSTS_HPRTINT_Pos) /*!< 0x01000000 */
 #define USB_OTG_GINTSTS_HPRTINT                  USB_OTG_GINTSTS_HPRTINT_Msk   /*!< Host port interrupt                            */
@@ -587,6 +629,9 @@ typedef struct
 #define USB_OTG_GINTSTS_PTXFE_Pos                (26U)
 #define USB_OTG_GINTSTS_PTXFE_Msk                (0x1UL << USB_OTG_GINTSTS_PTXFE_Pos) /*!< 0x04000000 */
 #define USB_OTG_GINTSTS_PTXFE                    USB_OTG_GINTSTS_PTXFE_Msk     /*!< Periodic TxFIFO empty                          */
+#define USB_OTG_GINTSTS_LPMINT_Pos               (27U)
+#define USB_OTG_GINTSTS_LPMINT_Msk               (0x1UL << USB_OTG_GINTSTS_LPMINT_Pos) /*!< 0x08000000 */
+#define USB_OTG_GINTSTS_LPMINT                   USB_OTG_GINTSTS_LPMINT_Msk    /*!< LPM interrupt                                  */
 #define USB_OTG_GINTSTS_CIDSCHG_Pos              (28U)
 #define USB_OTG_GINTSTS_CIDSCHG_Msk              (0x1UL << USB_OTG_GINTSTS_CIDSCHG_Pos) /*!< 0x10000000 */
 #define USB_OTG_GINTSTS_CIDSCHG                  USB_OTG_GINTSTS_CIDSCHG_Msk   /*!< Connector ID status change                     */
@@ -658,6 +703,9 @@ typedef struct
 #define USB_OTG_GINTMSK_FSUSPM_Pos               (22U)
 #define USB_OTG_GINTMSK_FSUSPM_Msk               (0x1UL << USB_OTG_GINTMSK_FSUSPM_Pos) /*!< 0x00400000 */
 #define USB_OTG_GINTMSK_FSUSPM                   USB_OTG_GINTMSK_FSUSPM_Msk    /*!< Data fetch suspended mask                           */
+#define USB_OTG_GINTMSK_RSTDEM_Pos               (23U)
+#define USB_OTG_GINTMSK_RSTDEM_Msk               (0x1UL << USB_OTG_GINTMSK_RSTDEM_Pos) /*!< 0x00800000 */
+#define USB_OTG_GINTMSK_RSTDEM                   USB_OTG_GINTMSK_RSTDEM_Msk    /*!< Reset detected interrupt mask                      */
 #define USB_OTG_GINTMSK_PRTIM_Pos                (24U)
 #define USB_OTG_GINTMSK_PRTIM_Msk                (0x1UL << USB_OTG_GINTMSK_PRTIM_Pos) /*!< 0x01000000 */
 #define USB_OTG_GINTMSK_PRTIM                    USB_OTG_GINTMSK_PRTIM_Msk     /*!< Host port interrupt mask                            */
@@ -667,6 +715,9 @@ typedef struct
 #define USB_OTG_GINTMSK_PTXFEM_Pos               (26U)
 #define USB_OTG_GINTMSK_PTXFEM_Msk               (0x1UL << USB_OTG_GINTMSK_PTXFEM_Pos) /*!< 0x04000000 */
 #define USB_OTG_GINTMSK_PTXFEM                   USB_OTG_GINTMSK_PTXFEM_Msk    /*!< Periodic TxFIFO empty mask                          */
+#define USB_OTG_GINTMSK_LPMINTM_Pos              (27U)
+#define USB_OTG_GINTMSK_LPMINTM_Msk              (0x1UL << USB_OTG_GINTMSK_LPMINTM_Pos) /*!< 0x08000000 */
+#define USB_OTG_GINTMSK_LPMINTM                  USB_OTG_GINTMSK_LPMINTM_Msk   /*!< LPM interrupt Mask                                  */
 #define USB_OTG_GINTMSK_CIDSCHGM_Pos             (28U)
 #define USB_OTG_GINTMSK_CIDSCHGM_Msk             (0x1UL << USB_OTG_GINTMSK_CIDSCHGM_Pos) /*!< 0x10000000 */
 #define USB_OTG_GINTMSK_CIDSCHGM                 USB_OTG_GINTMSK_CIDSCHGM_Msk  /*!< Connector ID status change mask                     */
@@ -688,6 +739,48 @@ typedef struct
 #define USB_OTG_DAINT_OEPINT_Msk                 (0xFFFFUL << USB_OTG_DAINT_OEPINT_Pos) /*!< 0xFFFF0000 */
 #define USB_OTG_DAINT_OEPINT                     USB_OTG_DAINT_OEPINT_Msk      /*!< OUT endpoint interrupt bits */
 
+/********************  Bit definition for OTG register  ********************/
+#define USB_OTG_CHNUM_Pos                        (0U)
+#define USB_OTG_CHNUM_Msk                        (0xFUL << USB_OTG_CHNUM_Pos)   /*!< 0x0000000F */
+#define USB_OTG_CHNUM                            USB_OTG_CHNUM_Msk             /*!< Channel number */
+#define USB_OTG_CHNUM_0                          (0x1UL << USB_OTG_CHNUM_Pos)   /*!< 0x00000001 */
+#define USB_OTG_CHNUM_1                          (0x2UL << USB_OTG_CHNUM_Pos)   /*!< 0x00000002 */
+#define USB_OTG_CHNUM_2                          (0x4UL << USB_OTG_CHNUM_Pos)   /*!< 0x00000004 */
+#define USB_OTG_CHNUM_3                          (0x8UL << USB_OTG_CHNUM_Pos)   /*!< 0x00000008 */
+#define USB_OTG_BCNT_Pos                         (4U)
+#define USB_OTG_BCNT_Msk                         (0x7FFUL << USB_OTG_BCNT_Pos)  /*!< 0x00007FF0 */
+#define USB_OTG_BCNT                             USB_OTG_BCNT_Msk              /*!< Byte count */
+
+#define USB_OTG_DPID_Pos                         (15U)
+#define USB_OTG_DPID_Msk                         (0x3UL << USB_OTG_DPID_Pos)    /*!< 0x00018000 */
+#define USB_OTG_DPID                             USB_OTG_DPID_Msk              /*!< Data PID */
+#define USB_OTG_DPID_0                           (0x1UL << USB_OTG_DPID_Pos)    /*!< 0x00008000 */
+#define USB_OTG_DPID_1                           (0x2UL << USB_OTG_DPID_Pos)    /*!< 0x00010000 */
+
+#define USB_OTG_PKTSTS_Pos                       (17U)
+#define USB_OTG_PKTSTS_Msk                       (0xFUL << USB_OTG_PKTSTS_Pos)  /*!< 0x001E0000 */
+#define USB_OTG_PKTSTS                           USB_OTG_PKTSTS_Msk            /*!< Packet status */
+#define USB_OTG_PKTSTS_0                         (0x1UL << USB_OTG_PKTSTS_Pos)  /*!< 0x00020000 */
+#define USB_OTG_PKTSTS_1                         (0x2UL << USB_OTG_PKTSTS_Pos)  /*!< 0x00040000 */
+#define USB_OTG_PKTSTS_2                         (0x4UL << USB_OTG_PKTSTS_Pos)  /*!< 0x00080000 */
+#define USB_OTG_PKTSTS_3                         (0x8UL << USB_OTG_PKTSTS_Pos)  /*!< 0x00100000 */
+
+#define USB_OTG_EPNUM_Pos                        (0U)
+#define USB_OTG_EPNUM_Msk                        (0xFUL << USB_OTG_EPNUM_Pos)   /*!< 0x0000000F */
+#define USB_OTG_EPNUM                            USB_OTG_EPNUM_Msk             /*!< Endpoint number */
+#define USB_OTG_EPNUM_0                          (0x1UL << USB_OTG_EPNUM_Pos)   /*!< 0x00000001 */
+#define USB_OTG_EPNUM_1                          (0x2UL << USB_OTG_EPNUM_Pos)   /*!< 0x00000002 */
+#define USB_OTG_EPNUM_2                          (0x4UL << USB_OTG_EPNUM_Pos)   /*!< 0x00000004 */
+#define USB_OTG_EPNUM_3                          (0x8UL << USB_OTG_EPNUM_Pos)   /*!< 0x00000008 */
+
+#define USB_OTG_FRMNUM_Pos                       (21U)
+#define USB_OTG_FRMNUM_Msk                       (0xFUL << USB_OTG_FRMNUM_Pos)  /*!< 0x01E00000 */
+#define USB_OTG_FRMNUM                           USB_OTG_FRMNUM_Msk            /*!< Frame number */
+#define USB_OTG_FRMNUM_0                         (0x1UL << USB_OTG_FRMNUM_Pos)  /*!< 0x00200000 */
+#define USB_OTG_FRMNUM_1                         (0x2UL << USB_OTG_FRMNUM_Pos)  /*!< 0x00400000 */
+#define USB_OTG_FRMNUM_2                         (0x4UL << USB_OTG_FRMNUM_Pos)  /*!< 0x00800000 */
+#define USB_OTG_FRMNUM_3                         (0x8UL << USB_OTG_FRMNUM_Pos)  /*!< 0x01000000 */
+
 /********************  Bit definition for USB_OTG_HAINTMSK register  ********************/
 #define USB_OTG_HAINTMSK_HAINTM_Pos              (0U)
 #define USB_OTG_HAINTMSK_HAINTM_Msk              (0xFFFFUL << USB_OTG_HAINTMSK_HAINTM_Pos) /*!< 0x0000FFFF */
@@ -826,9 +919,37 @@ typedef struct
 #define USB_OTG_DEACHINT_OEP1INT                 USB_OTG_DEACHINT_OEP1INT_Msk  /*!< OUT endpoint 1 interrupt bit */
 
 /********************  Bit definition for USB_OTG_GCCFG register  ********************/
+#define USB_OTG_GCCFG_DCDET_Pos                  (0U)
+#define USB_OTG_GCCFG_DCDET_Msk                  (0x1UL << USB_OTG_GCCFG_DCDET_Pos) /*!< 0x00000001 */
+#define USB_OTG_GCCFG_DCDET                      USB_OTG_GCCFG_DCDET_Msk       /*!< Data contact detection (DCD) status */
+#define USB_OTG_GCCFG_PDET_Pos                   (1U)
+#define USB_OTG_GCCFG_PDET_Msk                   (0x1UL << USB_OTG_GCCFG_PDET_Pos) /*!< 0x00000002 */
+#define USB_OTG_GCCFG_PDET                       USB_OTG_GCCFG_PDET_Msk        /*!< Primary detection (PD) status */
+#define USB_OTG_GCCFG_SDET_Pos                   (2U)
+#define USB_OTG_GCCFG_SDET_Msk                   (0x1UL << USB_OTG_GCCFG_SDET_Pos) /*!< 0x00000004 */
+#define USB_OTG_GCCFG_SDET                       USB_OTG_GCCFG_SDET_Msk        /*!< Secondary detection (SD) status */
+#define USB_OTG_GCCFG_PS2DET_Pos                 (3U)
+#define USB_OTG_GCCFG_PS2DET_Msk                 (0x1UL << USB_OTG_GCCFG_PS2DET_Pos) /*!< 0x00000008 */
+#define USB_OTG_GCCFG_PS2DET                     USB_OTG_GCCFG_PS2DET_Msk      /*!< DM pull-up detection status */
 #define USB_OTG_GCCFG_PWRDWN_Pos                 (16U)
 #define USB_OTG_GCCFG_PWRDWN_Msk                 (0x1UL << USB_OTG_GCCFG_PWRDWN_Pos) /*!< 0x00010000 */
 #define USB_OTG_GCCFG_PWRDWN                     USB_OTG_GCCFG_PWRDWN_Msk      /*!< Power down */
+#define USB_OTG_GCCFG_BCDEN_Pos                  (17U)
+#define USB_OTG_GCCFG_BCDEN_Msk                  (0x1UL << USB_OTG_GCCFG_BCDEN_Pos) /*!< 0x00020000 */
+#define USB_OTG_GCCFG_BCDEN                      USB_OTG_GCCFG_BCDEN_Msk       /*!< Battery charging detector (BCD) enable */
+#define USB_OTG_GCCFG_DCDEN_Pos                  (18U)
+#define USB_OTG_GCCFG_DCDEN_Msk                  (0x1UL << USB_OTG_GCCFG_DCDEN_Pos) /*!< 0x00040000 */
+#define USB_OTG_GCCFG_DCDEN                      USB_OTG_GCCFG_DCDEN_Msk       /*!< Data contact detection (DCD) mode enable*/
+#define USB_OTG_GCCFG_PDEN_Pos                   (19U)
+#define USB_OTG_GCCFG_PDEN_Msk                   (0x1UL << USB_OTG_GCCFG_PDEN_Pos) /*!< 0x00080000 */
+#define USB_OTG_GCCFG_PDEN                       USB_OTG_GCCFG_PDEN_Msk        /*!< Primary detection (PD) mode enable*/
+#define USB_OTG_GCCFG_SDEN_Pos                   (20U)
+#define USB_OTG_GCCFG_SDEN_Msk                   (0x1UL << USB_OTG_GCCFG_SDEN_Pos) /*!< 0x00100000 */
+#define USB_OTG_GCCFG_SDEN                       USB_OTG_GCCFG_SDEN_Msk        /*!< Secondary detection (SD) mode enable */
+#define USB_OTG_GCCFG_VBDEN_Pos                  (21U)
+#define USB_OTG_GCCFG_VBDEN_Msk                  (0x1UL << USB_OTG_GCCFG_VBDEN_Pos) /*!< 0x00200000 */
+#define USB_OTG_GCCFG_VBDEN                      USB_OTG_GCCFG_VBDEN_Msk       /*!< Secondary detection (SD) mode enable */
+
 #define USB_OTG_GCCFG_I2CPADEN_Pos               (17U)
 #define USB_OTG_GCCFG_I2CPADEN_Msk               (0x1UL << USB_OTG_GCCFG_I2CPADEN_Pos) /*!< 0x00020000 */
 #define USB_OTG_GCCFG_I2CPADEN                   USB_OTG_GCCFG_I2CPADEN_Msk    /*!< Enable I2C bus connection for the external I2C PHY interface*/
@@ -845,6 +966,14 @@ typedef struct
 #define USB_OTG_GCCFG_NOVBUSSENS_Msk             (0x1UL << USB_OTG_GCCFG_NOVBUSSENS_Pos) /*!< 0x00200000 */
 #define USB_OTG_GCCFG_NOVBUSSENS                 USB_OTG_GCCFG_NOVBUSSENS_Msk  /*!< VBUS sensing disable option*/
 
+/********************  Bit definition forUSB_OTG_GPWRDN) register  ********************/
+#define USB_OTG_GPWRDN_ADPMEN_Pos                (0U)
+#define USB_OTG_GPWRDN_ADPMEN_Msk                (0x1UL << USB_OTG_GPWRDN_ADPMEN_Pos) /*!< 0x00000001 */
+#define USB_OTG_GPWRDN_ADPMEN                    USB_OTG_GPWRDN_ADPMEN_Msk     /*!< ADP module enable */
+#define USB_OTG_GPWRDN_ADPIF_Pos                 (23U)
+#define USB_OTG_GPWRDN_ADPIF_Msk                 (0x1UL << USB_OTG_GPWRDN_ADPIF_Pos) /*!< 0x00800000 */
+#define USB_OTG_GPWRDN_ADPIF                     USB_OTG_GPWRDN_ADPIF_Msk      /*!< ADP Interrupt flag */
+
 /********************  Bit definition forUSB_OTG_DEACHINTMSK register  ********************/
 #define USB_OTG_DEACHINTMSK_IEP1INTM_Pos         (1U)
 #define USB_OTG_DEACHINTMSK_IEP1INTM_Msk         (0x1UL << USB_OTG_DEACHINTMSK_IEP1INTM_Pos) /*!< 0x00000002 */
@@ -858,6 +987,53 @@ typedef struct
 #define USB_OTG_CID_PRODUCT_ID_Msk               (0xFFFFFFFFUL << USB_OTG_CID_PRODUCT_ID_Pos) /*!< 0xFFFFFFFF */
 #define USB_OTG_CID_PRODUCT_ID                   USB_OTG_CID_PRODUCT_ID_Msk    /*!< Product ID field */
 
+/********************  Bit definition for USB_OTG_GLPMCFG register  ********************/
+#define USB_OTG_GLPMCFG_LPMEN_Pos                (0U)
+#define USB_OTG_GLPMCFG_LPMEN_Msk                (0x1UL << USB_OTG_GLPMCFG_LPMEN_Pos) /*!< 0x00000001 */
+#define USB_OTG_GLPMCFG_LPMEN                    USB_OTG_GLPMCFG_LPMEN_Msk     /*!< LPM support enable                                     */
+#define USB_OTG_GLPMCFG_LPMACK_Pos               (1U)
+#define USB_OTG_GLPMCFG_LPMACK_Msk               (0x1UL << USB_OTG_GLPMCFG_LPMACK_Pos) /*!< 0x00000002 */
+#define USB_OTG_GLPMCFG_LPMACK                   USB_OTG_GLPMCFG_LPMACK_Msk    /*!< LPM Token acknowledge enable                           */
+#define USB_OTG_GLPMCFG_BESL_Pos                 (2U)
+#define USB_OTG_GLPMCFG_BESL_Msk                 (0xFUL << USB_OTG_GLPMCFG_BESL_Pos) /*!< 0x0000003C */
+#define USB_OTG_GLPMCFG_BESL                     USB_OTG_GLPMCFG_BESL_Msk      /*!< BESL value received with last ACKed LPM Token          */
+#define USB_OTG_GLPMCFG_REMWAKE_Pos              (6U)
+#define USB_OTG_GLPMCFG_REMWAKE_Msk              (0x1UL << USB_OTG_GLPMCFG_REMWAKE_Pos) /*!< 0x00000040 */
+#define USB_OTG_GLPMCFG_REMWAKE                  USB_OTG_GLPMCFG_REMWAKE_Msk   /*!< bRemoteWake value received with last ACKed LPM Token   */
+#define USB_OTG_GLPMCFG_L1SSEN_Pos               (7U)
+#define USB_OTG_GLPMCFG_L1SSEN_Msk               (0x1UL << USB_OTG_GLPMCFG_L1SSEN_Pos) /*!< 0x00000080 */
+#define USB_OTG_GLPMCFG_L1SSEN                   USB_OTG_GLPMCFG_L1SSEN_Msk    /*!< L1 shallow sleep enable                                */
+#define USB_OTG_GLPMCFG_BESLTHRS_Pos             (8U)
+#define USB_OTG_GLPMCFG_BESLTHRS_Msk             (0xFUL << USB_OTG_GLPMCFG_BESLTHRS_Pos) /*!< 0x00000F00 */
+#define USB_OTG_GLPMCFG_BESLTHRS                 USB_OTG_GLPMCFG_BESLTHRS_Msk  /*!< BESL threshold                                         */
+#define USB_OTG_GLPMCFG_L1DSEN_Pos               (12U)
+#define USB_OTG_GLPMCFG_L1DSEN_Msk               (0x1UL << USB_OTG_GLPMCFG_L1DSEN_Pos) /*!< 0x00001000 */
+#define USB_OTG_GLPMCFG_L1DSEN                   USB_OTG_GLPMCFG_L1DSEN_Msk    /*!< L1 deep sleep enable                                   */
+#define USB_OTG_GLPMCFG_LPMRSP_Pos               (13U)
+#define USB_OTG_GLPMCFG_LPMRSP_Msk               (0x3UL << USB_OTG_GLPMCFG_LPMRSP_Pos) /*!< 0x00006000 */
+#define USB_OTG_GLPMCFG_LPMRSP                   USB_OTG_GLPMCFG_LPMRSP_Msk    /*!< LPM response                                           */
+#define USB_OTG_GLPMCFG_SLPSTS_Pos               (15U)
+#define USB_OTG_GLPMCFG_SLPSTS_Msk               (0x1UL << USB_OTG_GLPMCFG_SLPSTS_Pos) /*!< 0x00008000 */
+#define USB_OTG_GLPMCFG_SLPSTS                   USB_OTG_GLPMCFG_SLPSTS_Msk    /*!< Port sleep status                                      */
+#define USB_OTG_GLPMCFG_L1RSMOK_Pos              (16U)
+#define USB_OTG_GLPMCFG_L1RSMOK_Msk              (0x1UL << USB_OTG_GLPMCFG_L1RSMOK_Pos) /*!< 0x00010000 */
+#define USB_OTG_GLPMCFG_L1RSMOK                  USB_OTG_GLPMCFG_L1RSMOK_Msk   /*!< Sleep State Resume OK                                  */
+#define USB_OTG_GLPMCFG_LPMCHIDX_Pos             (17U)
+#define USB_OTG_GLPMCFG_LPMCHIDX_Msk             (0xFUL << USB_OTG_GLPMCFG_LPMCHIDX_Pos) /*!< 0x001E0000 */
+#define USB_OTG_GLPMCFG_LPMCHIDX                 USB_OTG_GLPMCFG_LPMCHIDX_Msk  /*!< LPM Channel Index                                      */
+#define USB_OTG_GLPMCFG_LPMRCNT_Pos              (21U)
+#define USB_OTG_GLPMCFG_LPMRCNT_Msk              (0x7UL << USB_OTG_GLPMCFG_LPMRCNT_Pos) /*!< 0x00E00000 */
+#define USB_OTG_GLPMCFG_LPMRCNT                  USB_OTG_GLPMCFG_LPMRCNT_Msk   /*!< LPM retry count                                        */
+#define USB_OTG_GLPMCFG_SNDLPM_Pos               (24U)
+#define USB_OTG_GLPMCFG_SNDLPM_Msk               (0x1UL << USB_OTG_GLPMCFG_SNDLPM_Pos) /*!< 0x01000000 */
+#define USB_OTG_GLPMCFG_SNDLPM                   USB_OTG_GLPMCFG_SNDLPM_Msk    /*!< Send LPM transaction                                   */
+#define USB_OTG_GLPMCFG_LPMRCNTSTS_Pos           (25U)
+#define USB_OTG_GLPMCFG_LPMRCNTSTS_Msk           (0x7UL << USB_OTG_GLPMCFG_LPMRCNTSTS_Pos) /*!< 0x0E000000 */
+#define USB_OTG_GLPMCFG_LPMRCNTSTS               USB_OTG_GLPMCFG_LPMRCNTSTS_Msk /*!< LPM retry count status                                 */
+#define USB_OTG_GLPMCFG_ENBESL_Pos               (28U)
+#define USB_OTG_GLPMCFG_ENBESL_Msk               (0x1UL << USB_OTG_GLPMCFG_ENBESL_Pos) /*!< 0x10000000 */
+#define USB_OTG_GLPMCFG_ENBESL                   USB_OTG_GLPMCFG_ENBESL_Msk    /*!< Enable best effort service latency                     */
+
 /********************  Bit definition for USB_OTG_DIEPEACHMSK1 register  ********************/
 #define USB_OTG_DIEPEACHMSK1_XFRCM_Pos           (0U)
 #define USB_OTG_DIEPEACHMSK1_XFRCM_Msk           (0x1UL << USB_OTG_DIEPEACHMSK1_XFRCM_Pos) /*!< 0x00000001 */
@@ -1345,6 +1521,9 @@ typedef struct
 #define USB_OTG_DOEPINT_OUTPKTERR_Pos            (8U)
 #define USB_OTG_DOEPINT_OUTPKTERR_Msk            (0x1UL << USB_OTG_DOEPINT_OUTPKTERR_Pos) /*!< 0x00000100 */
 #define USB_OTG_DOEPINT_OUTPKTERR                USB_OTG_DOEPINT_OUTPKTERR_Msk   /*!< OUT packet error */
+#define USB_OTG_DOEPINT_BERR_Pos                 (12U)
+#define USB_OTG_DOEPINT_BERR_Msk                 (0x1UL << USB_OTG_DOEPINT_BERR_Pos) /*!< 0x00001000 */
+#define USB_OTG_DOEPINT_BERR                      USB_OTG_DOEPINT_BERR_Msk   /*!< Babble error interrupt */
 #define USB_OTG_DOEPINT_NAK_Pos                  (13U)
 #define USB_OTG_DOEPINT_NAK_Msk                  (0x1UL << USB_OTG_DOEPINT_NAK_Pos) /*!< 0x00002000 */
 #define USB_OTG_DOEPINT_NAK                      USB_OTG_DOEPINT_NAK_Msk   /*!< NAK Packet is transmitted by the device */
@@ -1380,51 +1559,6 @@ typedef struct
 #define USB_OTG_PCGCCTL_PHYSUSP_Msk              (0x1UL << USB_OTG_PCGCCTL_PHYSUSP_Pos) /*!< 0x00000010 */
 #define USB_OTG_PCGCCTL_PHYSUSP                  USB_OTG_PCGCCTL_PHYSUSP_Msk   /*!<Bit 1 */
 
-/* Legacy define */
-/********************  Bit definition for OTG register  ********************/
-#define USB_OTG_CHNUM_Pos                        (0U)
-#define USB_OTG_CHNUM_Msk                        (0xFUL << USB_OTG_CHNUM_Pos)   /*!< 0x0000000F */
-#define USB_OTG_CHNUM                            USB_OTG_CHNUM_Msk             /*!< Channel number */
-#define USB_OTG_CHNUM_0                          (0x1UL << USB_OTG_CHNUM_Pos)   /*!< 0x00000001 */
-#define USB_OTG_CHNUM_1                          (0x2UL << USB_OTG_CHNUM_Pos)   /*!< 0x00000002 */
-#define USB_OTG_CHNUM_2                          (0x4UL << USB_OTG_CHNUM_Pos)   /*!< 0x00000004 */
-#define USB_OTG_CHNUM_3                          (0x8UL << USB_OTG_CHNUM_Pos)   /*!< 0x00000008 */
-#define USB_OTG_BCNT_Pos                         (4U)
-#define USB_OTG_BCNT_Msk                         (0x7FFUL << USB_OTG_BCNT_Pos)  /*!< 0x00007FF0 */
-#define USB_OTG_BCNT                             USB_OTG_BCNT_Msk              /*!< Byte count */
-
-#define USB_OTG_DPID_Pos                         (15U)
-#define USB_OTG_DPID_Msk                         (0x3UL << USB_OTG_DPID_Pos)    /*!< 0x00018000 */
-#define USB_OTG_DPID                             USB_OTG_DPID_Msk              /*!< Data PID */
-#define USB_OTG_DPID_0                           (0x1UL << USB_OTG_DPID_Pos)    /*!< 0x00008000 */
-#define USB_OTG_DPID_1                           (0x2UL << USB_OTG_DPID_Pos)    /*!< 0x00010000 */
-
-#define USB_OTG_PKTSTS_Pos                       (17U)
-#define USB_OTG_PKTSTS_Msk                       (0xFUL << USB_OTG_PKTSTS_Pos)  /*!< 0x001E0000 */
-#define USB_OTG_PKTSTS                           USB_OTG_PKTSTS_Msk            /*!< Packet status */
-#define USB_OTG_PKTSTS_0                         (0x1UL << USB_OTG_PKTSTS_Pos)  /*!< 0x00020000 */
-#define USB_OTG_PKTSTS_1                         (0x2UL << USB_OTG_PKTSTS_Pos)  /*!< 0x00040000 */
-#define USB_OTG_PKTSTS_2                         (0x4UL << USB_OTG_PKTSTS_Pos)  /*!< 0x00080000 */
-#define USB_OTG_PKTSTS_3                         (0x8UL << USB_OTG_PKTSTS_Pos)  /*!< 0x00100000 */
-
-#define USB_OTG_EPNUM_Pos                        (0U)
-#define USB_OTG_EPNUM_Msk                        (0xFUL << USB_OTG_EPNUM_Pos)   /*!< 0x0000000F */
-#define USB_OTG_EPNUM                            USB_OTG_EPNUM_Msk             /*!< Endpoint number */
-#define USB_OTG_EPNUM_0                          (0x1UL << USB_OTG_EPNUM_Pos)   /*!< 0x00000001 */
-#define USB_OTG_EPNUM_1                          (0x2UL << USB_OTG_EPNUM_Pos)   /*!< 0x00000002 */
-#define USB_OTG_EPNUM_2                          (0x4UL << USB_OTG_EPNUM_Pos)   /*!< 0x00000004 */
-#define USB_OTG_EPNUM_3                          (0x8UL << USB_OTG_EPNUM_Pos)   /*!< 0x00000008 */
-
-#define USB_OTG_FRMNUM_Pos                       (21U)
-#define USB_OTG_FRMNUM_Msk                       (0xFUL << USB_OTG_FRMNUM_Pos)  /*!< 0x01E00000 */
-#define USB_OTG_FRMNUM                           USB_OTG_FRMNUM_Msk            /*!< Frame number */
-#define USB_OTG_FRMNUM_0                         (0x1UL << USB_OTG_FRMNUM_Pos)  /*!< 0x00200000 */
-#define USB_OTG_FRMNUM_1                         (0x2UL << USB_OTG_FRMNUM_Pos)  /*!< 0x00400000 */
-#define USB_OTG_FRMNUM_2                         (0x4UL << USB_OTG_FRMNUM_Pos)  /*!< 0x00800000 */
-#define USB_OTG_FRMNUM_3                         (0x8UL << USB_OTG_FRMNUM_Pos)  /*!< 0x01000000 */
-
-
-
 /** @defgroup USB_OTG_CORE VERSION ID
   * @{
   */