summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsakumisu <[email protected]>2021-12-12 15:21:00 +0800
committersakumisu <[email protected]>2021-12-12 15:21:39 +0800
commita8d919fe4d810907c9705e18b67e7867b2ad1085 (patch)
tree15a4616a2a5720ccdc6a4403fdbff1da5b39ae26
parent8bea70f997d1b3e261c3eed322671a96be460208 (diff)
complete fsdev and synopsys usb otg ip dcd portinng
-rw-r--r--demo/stm32/stm32f103c8t6/Core/Src/main.c10
-rw-r--r--demo/stm32/stm32f103c8t6/MDK-ARM/stm32f103c8t6.uvoptx28
-rw-r--r--demo/stm32/stm32f103c8t6/MDK-ARM/stm32f103c8t6.uvprojx62
-rw-r--r--demo/stm32/stm32h743vbt6/.mxproject16
-rw-r--r--demo/stm32/stm32h743vbt6/Core/Inc/stm32h7xx_it.h4
-rw-r--r--demo/stm32/stm32h743vbt6/Core/Src/main.c104
-rw-r--r--demo/stm32/stm32h743vbt6/Core/Src/stm32h7xx_hal_msp.c62
-rw-r--r--demo/stm32/stm32h743vbt6/Core/Src/stm32h7xx_it.c53
-rw-r--r--demo/stm32/stm32h743vbt6/MDK-ARM/stm32h743vbt6.uvoptx51
-rw-r--r--demo/stm32/stm32h743vbt6/MDK-ARM/stm32h743vbt6.uvprojx10
-rw-r--r--demo/stm32/stm32h743vbt6/stm32h743vbt6.ioc28
-rw-r--r--port/fsdev/README.md33
-rw-r--r--port/fsdev/usb_dc_fsdev.c18
-rw-r--r--port/fsdev/usb_fsdev_regs.h9
-rw-r--r--port/stm32/README.md3
-rw-r--r--port/stm32/usb_dc_hal.c8
-rw-r--r--port/synopsys/README.md26
-rw-r--r--port/synopsys/usb_dc_synopsys.c709
-rw-r--r--port/synopsys/usb_synopsys_regs.h248
19 files changed, 1186 insertions, 296 deletions
diff --git a/demo/stm32/stm32f103c8t6/Core/Src/main.c b/demo/stm32/stm32f103c8t6/Core/Src/main.c
index d534000c..6dfe4239 100644
--- a/demo/stm32/stm32f103c8t6/Core/Src/main.c
+++ b/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 */
diff --git a/demo/stm32/stm32f103c8t6/MDK-ARM/stm32f103c8t6.uvoptx b/demo/stm32/stm32f103c8t6/MDK-ARM/stm32f103c8t6.uvoptx
index 6ad5caa0..3f7820fc 100644
--- a/demo/stm32/stm32f103c8t6/MDK-ARM/stm32f103c8t6.uvoptx
+++ b/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>
diff --git a/demo/stm32/stm32f103c8t6/MDK-ARM/stm32f103c8t6.uvprojx b/demo/stm32/stm32f103c8t6/MDK-ARM/stm32f103c8t6.uvprojx
index 9f3cb73b..e2661427 100644
--- a/demo/stm32/stm32f103c8t6/MDK-ARM/stm32f103c8t6.uvprojx
+++ b/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>
diff --git a/demo/stm32/stm32h743vbt6/.mxproject b/demo/stm32/stm32h743vbt6/.mxproject
index 001782d5..086dfd31 100644
--- a/demo/stm32/stm32h743vbt6/.mxproject
+++ b/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=;
diff --git a/demo/stm32/stm32h743vbt6/Core/Inc/stm32h7xx_it.h b/demo/stm32/stm32h743vbt6/Core/Inc/stm32h7xx_it.h
index ad2061de..c228e5ab 100644
--- a/demo/stm32/stm32h743vbt6/Core/Inc/stm32h7xx_it.h
+++ b/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 */
diff --git a/demo/stm32/stm32h743vbt6/Core/Src/main.c b/demo/stm32/stm32h743vbt6/Core/Src/main.c
index e281890a..fc8f07f1 100644
--- a/demo/stm32/stm32h743vbt6/Core/Src/main.c
+++ b/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 BEGIN USB_OTG_FS_Init 0 */
- /* USER CODE END USB_OTG_HS_Init 0 */
+ /* USER CODE END USB_OTG_FS_Init 0 */
- /* USER CODE BEGIN USB_OTG_HS_Init 1 */
+ /* USER CODE BEGIN USB_OTG_FS_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 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();
}
diff --git a/demo/stm32/stm32h743vbt6/Core/Src/stm32h7xx_hal_msp.c b/demo/stm32/stm32h743vbt6/Core/Src/stm32h7xx_hal_msp.c
index 15dd7705..dd42cc9c 100644
--- a/demo/stm32/stm32h743vbt6/Core/Src/stm32h7xx_hal_msp.c
+++ b/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 */
+ __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_HS_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 */
}
}
diff --git a/demo/stm32/stm32h743vbt6/Core/Src/stm32h7xx_it.c b/demo/stm32/stm32h743vbt6/Core/Src/stm32h7xx_it.c
index 2672d38a..3f61dd9d 100644
--- a/demo/stm32/stm32h743vbt6/Core/Src/stm32h7xx_it.c
+++ b/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 */
diff --git a/demo/stm32/stm32h743vbt6/MDK-ARM/stm32h743vbt6.uvoptx b/demo/stm32/stm32h743vbt6/MDK-ARM/stm32h743vbt6.uvoptx
index 76cb6a6d..e68fb383 100644
--- a/demo/stm32/stm32h743vbt6/MDK-ARM/stm32h743vbt6.uvoptx
+++ b/demo/stm32/stm32h743vbt6/MDK-ARM/stm32h743vbt6.uvoptx
@@ -119,16 +119,53 @@
<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>
<Name>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32H7x_128k -FS08000000 -FL020000 -FP0($$Device:STM32H750VBTx$CMSIS\Flash\STM32H7x_128k.FLM))</Name>
</SetRegEntry>
<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>
diff --git a/demo/stm32/stm32h743vbt6/MDK-ARM/stm32h743vbt6.uvprojx b/demo/stm32/stm32h743vbt6/MDK-ARM/stm32h743vbt6.uvprojx
index 423eb316..9fd10bc4 100644
--- a/demo/stm32/stm32h743vbt6/MDK-ARM/stm32h743vbt6.uvprojx
+++ b/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>
diff --git a/demo/stm32/stm32h743vbt6/stm32h743vbt6.ioc b/demo/stm32/stm32h743vbt6/stm32h743vbt6.ioc
index 9c768b71..29a91ebc 100644
--- a/demo/stm32/stm32h743vbt6/stm32h743vbt6.ioc
+++ b/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
diff --git a/port/fsdev/README.md b/port/fsdev/README.md
index b2aeeee3..04f6ee2b 100644
--- a/port/fsdev/README.md
+++ b/port/fsdev/README.md
@@ -1,2 +1,31 @@
-# Note
-与 STM32 USB IP 同系列的使用该 port \ No newline at end of file
+# 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 \ No newline at end of file
diff --git a/port/fsdev/usb_dc_fsdev.c b/port/fsdev/usb_dc_fsdev.c
index ffdbc620..8d173b1d 100644
--- a/port/fsdev/usb_dc_fsdev.c
+++ b/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)
diff --git a/port/fsdev/usb_fsdev_regs.h b/port/fsdev/usb_fsdev_regs.h
index 3441dcbf..896a0fea 100644
--- a/port/fsdev/usb_fsdev_regs.h
+++ b/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
/**
* @}
*/
diff --git a/port/stm32/README.md b/port/stm32/README.md
index de66f44a..bf724d85 100644
--- a/port/stm32/README.md
+++ b/port/stm32/README.md
@@ -5,3 +5,6 @@
- 如果使用的是 usb_dc_hal.c 则上条不需要
- 推荐使用 nohal 版本,极简代码
+
+## 该目录下porting可以不再使用,选择 fsdev 或者 synopsys下的porting接口
+
diff --git a/port/stm32/usb_dc_hal.c b/port/stm32/usb_dc_hal.c
index ae818168..8f0dedfd 100644
--- a/port/stm32/usb_dc_hal.c
+++ b/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
diff --git a/port/synopsys/README.md b/port/synopsys/README.md
index 001102ae..d6e4aa56 100644
--- a/port/synopsys/README.md
+++ b/port/synopsys/README.md
@@ -1,3 +1,25 @@
-# Note
+# Support Chip List
-使用 DesignWare USB OTG IP 的使用该 port \ No newline at end of file
+## 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 \ No newline at end of file
diff --git a/port/synopsys/usb_dc_synopsys.c b/port/synopsys/usb_dc_synopsys.c
new file mode 100644
index 00000000..0768cc62
--- /dev/null
+++ b/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;
+ }
+}
diff --git a/port/synopsys/usb_synopsys_regs.h b/port/synopsys/usb_synopsys_regs.h
index 5dc679e2..28e34cec 100644
--- a/port/synopsys/usb_synopsys_regs.h
+++ b/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
* @{
*/