summaryrefslogtreecommitdiff
path: root/bsp/at32/at32f437-start
diff options
context:
space:
mode:
Diffstat (limited to 'bsp/at32/at32f437-start')
-rw-r--r--bsp/at32/at32f437-start/README.md5
-rw-r--r--bsp/at32/at32f437-start/SConstruct3
-rw-r--r--bsp/at32/at32f437-start/board/Kconfig35
-rw-r--r--bsp/at32/at32f437-start/board/inc/at32_msp.h1
-rw-r--r--bsp/at32/at32f437-start/board/src/at32_msp.c95
5 files changed, 139 insertions, 0 deletions
diff --git a/bsp/at32/at32f437-start/README.md b/bsp/at32/at32f437-start/README.md
index dabd8e801e..cd94426fbb 100644
--- a/bsp/at32/at32f437-start/README.md
+++ b/bsp/at32/at32f437-start/README.md
@@ -53,6 +53,7 @@ AT32F437-START板级包支持MDK4﹑MDK5﹑IAR开发环境和GCC编译器,以�
| FLASH | 支持 | |
| EMAC | 支持 | |
| SDRAM | 支持 | |
+| USB | 支持 | |
### IO在板级支持包中的映射情况
@@ -116,6 +117,10 @@ AT32F437-START板级包支持MDK4﹑MDK5﹑IAR开发环境和GCC编译器,以�
| PE10 | QSPI2_IO3 |
| PG13 | QSPI2_SCK |
| PG8 | QSPI2_CS |
+| PA11 | USB1_DM |
+| PA12 | USB1_DP |
+| PB14 | USB2_DM |
+| PB15 | USB2_DP |
## 使用说明
diff --git a/bsp/at32/at32f437-start/SConstruct b/bsp/at32/at32f437-start/SConstruct
index 08b2117a9b..06dc169672 100644
--- a/bsp/at32/at32f437-start/SConstruct
+++ b/bsp/at32/at32f437-start/SConstruct
@@ -52,6 +52,9 @@ rtconfig.BSP_LIBRARY_TYPE = at32_library
# include libraries
objs.extend(SConscript(os.path.join(libraries_path_prefix, at32_library, 'SConscript')))
+# include usb libraries
+objs.extend(SConscript(os.path.join(libraries_path_prefix, 'usbfs_library', 'SConscript')))
+
# include drivers
objs.extend(SConscript(os.path.join(libraries_path_prefix, 'rt_drivers', 'SConscript')))
diff --git a/bsp/at32/at32f437-start/board/Kconfig b/bsp/at32/at32f437-start/board/Kconfig
index ed7ceb3285..d4197775de 100644
--- a/bsp/at32/at32f437-start/board/Kconfig
+++ b/bsp/at32/at32f437-start/board/Kconfig
@@ -32,6 +32,41 @@ menu "On-chip Peripheral Drivers"
bool "Enable on-chip FLASH"
default n
+ menuconfig BSP_USING_USBFS
+ bool "Enable USB BUS"
+ default n
+ if BSP_USING_USBFS
+ menuconfig BSP_USING_USBFS1
+ bool "Enable USB BUS1"
+ default n
+ if BSP_USING_USBFS1
+ config BSP_USING_DEVICE_USBFS1
+ bool "Enable USB1 Deivce"
+ select RT_USING_USB_DEVICE
+ default n
+
+ config BSP_USING_HOST_USBFS1
+ bool "Enable USB1 Host"
+ select RT_USING_USB_HOST
+ default n
+ endif
+
+ menuconfig BSP_USING_USBFS2
+ bool "Enable USB BUS2"
+ default n
+ if BSP_USING_USBFS2
+ config BSP_USING_DEVICE_USBFS2
+ bool "Enable USB2 Deivce"
+ select RT_USING_USB_DEVICE
+ default n
+
+ config BSP_USING_HOST_USBFS2
+ bool "Enable USB2 Host"
+ select RT_USING_USB_HOST
+ default n
+ endif
+ endif
+
config BSP_USING_EMAC
bool "Enable Ethernet"
default n
diff --git a/bsp/at32/at32f437-start/board/inc/at32_msp.h b/bsp/at32/at32f437-start/board/inc/at32_msp.h
index ed63a788a3..0233cea424 100644
--- a/bsp/at32/at32f437-start/board/inc/at32_msp.h
+++ b/bsp/at32/at32f437-start/board/inc/at32_msp.h
@@ -22,5 +22,6 @@ void at32_msp_can_init(void *instance);
void at32_msp_qspi_init(void *instance);
void at32_msp_sdram_init(void *instance);
void at32_msp_emac_init(void *instance);
+void at32_msp_usb_init(void *instance);
#endif /* __AT32_MSP_H__ */
diff --git a/bsp/at32/at32f437-start/board/src/at32_msp.c b/bsp/at32/at32f437-start/board/src/at32_msp.c
index 171e0500f7..40b45db7dc 100644
--- a/bsp/at32/at32f437-start/board/src/at32_msp.c
+++ b/bsp/at32/at32f437-start/board/src/at32_msp.c
@@ -517,3 +517,98 @@ void at32_msp_sdram_init(void *instance)
}
#endif /* BSP_USING_SDRAM */
+
+#ifdef BSP_USING_USBFS
+void at32_msp_usb_init(void *instance)
+{
+ /* defalut usb clock from hick */
+ usb_clk48_s clk_s = USB_CLK_HICK;
+
+#if defined (BSP_USING_HOST_USBFS1) || defined (BSP_USING_DEVICE_USBFS1)
+ crm_periph_clock_enable(CRM_OTGFS1_PERIPH_CLOCK, TRUE);
+#endif
+
+#if defined (BSP_USING_HOST_USBFS2) || defined (BSP_USING_DEVICE_USBFS2)
+ crm_periph_clock_enable(CRM_OTGFS2_PERIPH_CLOCK, TRUE);
+#endif
+
+ if(clk_s == USB_CLK_HICK)
+ {
+ crm_usb_clock_source_select(CRM_USB_CLOCK_SOURCE_HICK);
+ /* enable the acc calibration ready interrupt */
+ crm_periph_clock_enable(CRM_ACC_PERIPH_CLOCK, TRUE);
+
+ /* update the c1\c2\c3 value */
+ acc_write_c1(7980);
+ acc_write_c2(8000);
+ acc_write_c3(8020);
+
+ /* open acc calibration */
+ acc_calibration_mode_enable(ACC_CAL_HICKTRIM, TRUE);
+ }
+ else
+ {
+ switch(system_core_clock)
+ {
+ /* 48MHz */
+ case 48000000:
+ crm_usb_clock_div_set(CRM_USB_DIV_1);
+ break;
+
+ /* 72MHz */
+ case 72000000:
+ crm_usb_clock_div_set(CRM_USB_DIV_1_5);
+ break;
+
+ /* 96MHz */
+ case 96000000:
+ crm_usb_clock_div_set(CRM_USB_DIV_2);
+ break;
+
+ /* 120MHz */
+ case 120000000:
+ crm_usb_clock_div_set(CRM_USB_DIV_2_5);
+ break;
+
+ /* 144MHz */
+ case 144000000:
+ crm_usb_clock_div_set(CRM_USB_DIV_3);
+ break;
+
+ /* 168MHz */
+ case 168000000:
+ crm_usb_clock_div_set(CRM_USB_DIV_3_5);
+ break;
+
+ /* 192MHz */
+ case 192000000:
+ crm_usb_clock_div_set(CRM_USB_DIV_4);
+ break;
+
+ /* 216MHz */
+ case 216000000:
+ crm_usb_clock_div_set(CRM_USB_DIV_4_5);
+ break;
+
+ /* 240MHz */
+ case 240000000:
+ crm_usb_clock_div_set(CRM_USB_DIV_5);
+ break;
+
+ /* 264MHz */
+ case 264000000:
+ crm_usb_clock_div_set(CRM_USB_DIV_5_5);
+ break;
+
+ /* 288MHz */
+ case 288000000:
+ crm_usb_clock_div_set(CRM_USB_DIV_6);
+ break;
+
+ default:
+ break;
+ }
+ }
+}
+
+#endif /* BSP_USING_USBFS */