diff --git a/AT32F415_periph_lib_V2.1.1.chm b/AT32F415_periph_lib_V2.1.2.chm similarity index 63% rename from AT32F415_periph_lib_V2.1.1.chm rename to AT32F415_periph_lib_V2.1.2.chm index a8f0eb0..916993d 100644 Binary files a/AT32F415_periph_lib_V2.1.1.chm and b/AT32F415_periph_lib_V2.1.2.chm differ diff --git a/document/ReleaseNotes_AT32F415_Firmware_Library.pdf b/document/ReleaseNotes_AT32F415_Firmware_Library.pdf index 1ed42fe..2cd21c3 100644 Binary files a/document/ReleaseNotes_AT32F415_Firmware_Library.pdf and b/document/ReleaseNotes_AT32F415_Firmware_Library.pdf differ diff --git a/libraries/cmsis/cm4/device_support/at32f415.h b/libraries/cmsis/cm4/device_support/at32f415.h index 9b9cb22..3bda16d 100644 --- a/libraries/cmsis/cm4/device_support/at32f415.h +++ b/libraries/cmsis/cm4/device_support/at32f415.h @@ -128,7 +128,7 @@ extern "C" { */ #define __AT32F415_LIBRARY_VERSION_MAJOR (0x02) /*!< [31:24] major version */ #define __AT32F415_LIBRARY_VERSION_MIDDLE (0x01) /*!< [23:16] middle version */ -#define __AT32F415_LIBRARY_VERSION_MINOR (0x01) /*!< [15:8] minor version */ +#define __AT32F415_LIBRARY_VERSION_MINOR (0x02) /*!< [15:8] minor version */ #define __AT32F415_LIBRARY_VERSION_RC (0x00) /*!< [7:0] release candidate */ #define __AT32F415_LIBRARY_VERSION ((__AT32F415_LIBRARY_VERSION_MAJOR << 24) | \ (__AT32F415_LIBRARY_VERSION_MIDDLE << 16) | \ @@ -226,7 +226,7 @@ typedef enum IRQn OTGFS1_IRQn = 67, /*!< otgfs1 global interrupt */ CMP1_IRQn = 70, /*!< comparator1 global interrupt */ CMP2_IRQn = 71, /*!< comparator2 global interrupt */ - DMA2_Channel6_7_IRQn = 75, /*!< dma2 channel 6 and channel 7 global interrupt */ + DMA2_Channel6_7_IRQn = 75 /*!< dma2 channel 6 and channel 7 global interrupt */ } IRQn_Type; diff --git a/libraries/cmsis/cm4/device_support/startup/gcc/startup_at32f415.s b/libraries/cmsis/cm4/device_support/startup/gcc/startup_at32f415.s index 82b631e..e7c7bef 100644 --- a/libraries/cmsis/cm4/device_support/startup/gcc/startup_at32f415.s +++ b/libraries/cmsis/cm4/device_support/startup/gcc/startup_at32f415.s @@ -132,8 +132,8 @@ g_pfnVectors: /* External Interrupts */ .word WWDT_IRQHandler /* Window Watchdog Timer */ .word PVM_IRQHandler /* PVM through EXINT Line detect */ - .word TAMPER_IRQHandler /* Tamper */ - .word ERTC_IRQHandler /* ERTC */ + .word TAMP_STAMP_IRQHandler /* Tamper and TimeStamps through the EXINT line */ + .word ERTC_WKUP_IRQHandler /* ERTC Wakeup through the EXINT line */ .word FLASH_IRQHandler /* Flash */ .word CRM_IRQHandler /* CRM */ .word EXINT0_IRQHandler /* EXINT Line 0 */ @@ -247,11 +247,11 @@ g_pfnVectors: .weak PVM_IRQHandler .thumb_set PVM_IRQHandler,Default_Handler - .weak TAMPER_IRQHandler - .thumb_set TAMPER_IRQHandler,Default_Handler + .weak TAMP_STAMP_IRQHandler + .thumb_set TAMP_STAMP_IRQHandler,Default_Handler - .weak ERTC_IRQHandler - .thumb_set ERTC_IRQHandler,Default_Handler + .weak ERTC_WKUP_IRQHandler + .thumb_set ERTC_WKUP_IRQHandler,Default_Handler .weak FLASH_IRQHandler .thumb_set FLASH_IRQHandler,Default_Handler diff --git a/libraries/cmsis/cm4/device_support/startup/iar/startup_at32f415.s b/libraries/cmsis/cm4/device_support/startup/iar/startup_at32f415.s index 80cecfd..b245fc8 100644 --- a/libraries/cmsis/cm4/device_support/startup/iar/startup_at32f415.s +++ b/libraries/cmsis/cm4/device_support/startup/iar/startup_at32f415.s @@ -44,8 +44,8 @@ __vector_table ; External Interrupts DCD WWDT_IRQHandler ; Window Watchdog Timer DCD PVM_IRQHandler ; PVM through EXINT Line detect - DCD TAMPER_IRQHandler ; Tamper - DCD ERTC_IRQHandler ; ERTC + DCD TAMP_STAMP_IRQHandler ; Tamper and TimeStamps through the EXINT line + DCD ERTC_WKUP_IRQHandler ; ERTC Wakeup through the EXINT line DCD FLASH_IRQHandler ; Flash DCD CRM_IRQHandler ; CRM DCD EXINT0_IRQHandler ; EXINT Line 0 @@ -188,15 +188,15 @@ WWDT_IRQHandler PVM_IRQHandler B PVM_IRQHandler - PUBWEAK TAMPER_IRQHandler + PUBWEAK TAMP_STAMP_IRQHandler SECTION .text:CODE:REORDER:NOROOT(1) -TAMPER_IRQHandler - B TAMPER_IRQHandler +TAMP_STAMP_IRQHandler + B TAMP_STAMP_IRQHandler - PUBWEAK ERTC_IRQHandler + PUBWEAK ERTC_WKUP_IRQHandler SECTION .text:CODE:REORDER:NOROOT(1) -ERTC_IRQHandler - B ERTC_IRQHandler +ERTC_WKUP_IRQHandler + B ERTC_WKUP_IRQHandler PUBWEAK FLASH_IRQHandler SECTION .text:CODE:REORDER:NOROOT(1) diff --git a/libraries/drivers/ReleaseNotes_AT32F415_Firmware_Library_Drivers.pdf b/libraries/drivers/ReleaseNotes_AT32F415_Firmware_Library_Drivers.pdf index 792237f..b59484b 100644 Binary files a/libraries/drivers/ReleaseNotes_AT32F415_Firmware_Library_Drivers.pdf and b/libraries/drivers/ReleaseNotes_AT32F415_Firmware_Library_Drivers.pdf differ diff --git a/libraries/drivers/inc/at32f415_crm.h b/libraries/drivers/inc/at32f415_crm.h index f8bcc4b..c29dc08 100644 --- a/libraries/drivers/inc/at32f415_crm.h +++ b/libraries/drivers/inc/at32f415_crm.h @@ -133,7 +133,7 @@ typedef enum CRM_I2C1_PERIPH_CLOCK = MAKE_VALUE(0x1C, 21), /*!< i2c1 periph clock */ CRM_I2C2_PERIPH_CLOCK = MAKE_VALUE(0x1C, 22), /*!< i2c2 periph clock */ CRM_CAN1_PERIPH_CLOCK = MAKE_VALUE(0x1C, 25), /*!< can1 periph clock */ - CRM_PWC_PERIPH_CLOCK = MAKE_VALUE(0x1C, 28), /*!< pwc periph clock */ + CRM_PWC_PERIPH_CLOCK = MAKE_VALUE(0x1C, 28) /*!< pwc periph clock */ } crm_periph_clock_type; @@ -174,7 +174,7 @@ typedef enum CRM_I2C1_PERIPH_RESET = MAKE_VALUE(0x10, 21), /*!< i2c1 periph reset */ CRM_I2C2_PERIPH_RESET = MAKE_VALUE(0x10, 22), /*!< i2c2 periph reset */ CRM_CAN1_PERIPH_RESET = MAKE_VALUE(0x10, 25), /*!< can1 periph reset */ - CRM_PWC_PERIPH_RESET = MAKE_VALUE(0x10, 28), /*!< pwc periph reset */ + CRM_PWC_PERIPH_RESET = MAKE_VALUE(0x10, 28) /*!< pwc periph reset */ } crm_periph_reset_type; @@ -268,7 +268,7 @@ typedef enum CRM_PLL_FREF_8M = 2, /*!< pll refrence clock between 7.8125 mhz and 8.33 mhz */ CRM_PLL_FREF_12M = 3, /*!< pll refrence clock between 8.33 mhz and 12.5 mhz */ CRM_PLL_FREF_16M = 4, /*!< pll refrence clock between 15.625 mhz and 20.83 mhz */ - CRM_PLL_FREF_25M = 5, /*!< pll refrence clock between 20.83 mhz and 31.255 mhz */ + CRM_PLL_FREF_25M = 5 /*!< pll refrence clock between 20.83 mhz and 31.255 mhz */ } crm_pll_fref_type; /** diff --git a/libraries/drivers/inc/at32f415_dma.h b/libraries/drivers/inc/at32f415_dma.h index 0391415..58a6d43 100644 --- a/libraries/drivers/inc/at32f415_dma.h +++ b/libraries/drivers/inc/at32f415_dma.h @@ -498,6 +498,7 @@ void dma_data_number_set(dma_channel_type* dmax_channely, uint16_t data_number); uint16_t dma_data_number_get(dma_channel_type* dmax_channely); void dma_interrupt_enable(dma_channel_type* dmax_channely, uint32_t dma_int, confirm_state new_state); flag_status dma_flag_get(uint32_t dmax_flag); +flag_status dma_interrupt_flag_get(uint32_t dmax_flag); void dma_flag_clear(uint32_t dmax_flag); diff --git a/libraries/drivers/src/at32f415_dma.c b/libraries/drivers/src/at32f415_dma.c index b91213f..585bcc4 100644 --- a/libraries/drivers/src/at32f415_dma.c +++ b/libraries/drivers/src/at32f415_dma.c @@ -271,6 +271,52 @@ void dma_flexible_config(dma_type* dma_x, uint8_t flex_channelx, dma_flexible_re } } +/** + * @brief get dma interrupt flag + * @param dmax_flag + * this parameter can be one of the following values: + * - DMA1_FDT1_FLAG - DMA1_HDT1_FLAG - DMA1_DTERR1_FLAG + * - DMA1_FDT2_FLAG - DMA1_HDT2_FLAG - DMA1_DTERR2_FLAG + * - DMA1_FDT3_FLAG - DMA1_HDT3_FLAG - DMA1_DTERR3_FLAG + * - DMA1_FDT4_FLAG - DMA1_HDT4_FLAG - DMA1_DTERR4_FLAG + * - DMA1_FDT5_FLAG - DMA1_HDT5_FLAG - DMA1_DTERR5_FLAG + * - DMA1_FDT6_FLAG - DMA1_HDT6_FLAG - DMA1_DTERR6_FLAG + * - DMA1_FDT7_FLAG - DMA1_HDT7_FLAG - DMA1_DTERR7_FLAG + * - DMA2_FDT1_FLAG - DMA2_HDT1_FLAG - DMA2_DTERR1_FLAG + * - DMA2_FDT2_FLAG - DMA2_HDT2_FLAG - DMA2_DTERR2_FLAG + * - DMA2_FDT3_FLAG - DMA2_HDT3_FLAG - DMA2_DTERR3_FLAG + * - DMA2_FDT4_FLAG - DMA2_HDT4_FLAG - DMA2_DTERR4_FLAG + * - DMA2_FDT5_FLAG - DMA2_HDT5_FLAG - DMA2_DTERR5_FLAG + * - DMA2_FDT6_FLAG - DMA2_HDT6_FLAG - DMA2_DTERR6_FLAG + * - DMA2_FDT7_FLAG - DMA2_HDT7_FLAG - DMA2_DTERR7_FLAG + * @retval state of dma flag + */ +flag_status dma_interrupt_flag_get(uint32_t dmax_flag) +{ + flag_status status = RESET; + uint32_t temp = 0; + + if(dmax_flag > 0x10000000) + { + temp = DMA2->sts; + } + else + { + temp = DMA1->sts; + } + + if ((temp & dmax_flag) != (uint16_t)RESET) + { + status = SET; + } + else + { + status = RESET; + } + + return status; +} + /** * @brief get dma flag * @param dmax_flag diff --git a/libraries/drivers/src/at32f415_exint.c b/libraries/drivers/src/at32f415_exint.c index 05df694..a124ca1 100644 --- a/libraries/drivers/src/at32f415_exint.c +++ b/libraries/drivers/src/at32f415_exint.c @@ -167,8 +167,10 @@ flag_status exint_flag_get(uint32_t exint_line) flag_status exint_interrupt_flag_get(uint32_t exint_line) { flag_status status = RESET; - uint32_t exint_flag =0; - exint_flag = EXINT->intsts & exint_line & EXINT->inten; + uint32_t exint_flag = 0; + exint_flag = EXINT->intsts & exint_line; + exint_flag = exint_flag & EXINT->inten; + if((exint_flag != (uint16_t)RESET)) { status = SET; diff --git a/libraries/drivers/src/at32f415_i2c.c b/libraries/drivers/src/at32f415_i2c.c index 8f3efb9..e05b9e5 100644 --- a/libraries/drivers/src/at32f415_i2c.c +++ b/libraries/drivers/src/at32f415_i2c.c @@ -632,7 +632,7 @@ flag_status i2c_interrupt_flag_get(i2c_type *i2c_x, uint32_t flag) break; case I2C_RDBF_FLAG: case I2C_TDBE_FLAG: - iten = i2c_x->ctrl2_bit.dataien & i2c_x->ctrl2_bit.evtien; + iten = i2c_x->ctrl2_bit.dataien && i2c_x->ctrl2_bit.evtien; break; case I2C_BUSERR_FLAG: case I2C_ARLOST_FLAG: diff --git a/middlewares/usb_drivers/inc/usb_std.h b/middlewares/usb_drivers/inc/usb_std.h index 6614e1e..b04dcde 100644 --- a/middlewares/usb_drivers/inc/usb_std.h +++ b/middlewares/usb_drivers/inc/usb_std.h @@ -105,6 +105,7 @@ extern "C" { #define USB_SERIAL_STRING 3 /*!< usb standard string type serial */ #define USB_CONFIG_STRING 4 /*!< usb standard string type config */ #define USB_INTERFACE_STRING 5 /*!< usb standard string type interface */ +#define USB_WINUSB_OS_STRING 0xEE /*!< usb microsoft os string */ /** * @brief usb configuration attributes @@ -119,6 +120,12 @@ extern "C" { #define USB_FEATURE_REMOTE_WAKEUP 1 /*!< usb standard feature selectors remote wakeup */ #define USB_FEATURE_TEST_MODE 2 /*!< usb standard feature selectors test mode */ +/** + * @brief usb winusb feature id + */ +#define USB_WINUSB_COMPAT_ID 0x04 /*!< usb winusb compat id os descriptor */ +#define USB_WINUSB_PROPERTIES_ID 0x05 /*!< usb winusb properties id os descriptor */ + /** * @brief usb device connect state */ diff --git a/middlewares/usb_drivers/inc/usbd_core.h b/middlewares/usb_drivers/inc/usbd_core.h index 2cb711c..f5253b7 100644 --- a/middlewares/usb_drivers/inc/usbd_core.h +++ b/middlewares/usb_drivers/inc/usbd_core.h @@ -87,6 +87,11 @@ typedef struct usbd_desc_t *(*get_device_serial_string)(void); /*!< get device serial callback */ usbd_desc_t *(*get_device_interface_string)(void); /*!< get device interface string callback */ usbd_desc_t *(*get_device_config_string)(void); /*!< get device device config callback */ +#if (USBD_SUPPORT_WINUSB == 1) + usbd_desc_t *(*get_device_winusb_os_string)(void); /*!< get winusb os string */ + usbd_desc_t *(*get_device_winusb_os_feature)(void); /*!< get winusb os feature */ + usbd_desc_t *(*get_device_winusb_os_property)(void); /*!< get winusb os property */ +#endif }usbd_desc_handler; /** diff --git a/middlewares/usb_drivers/src/usbd_sdr.c b/middlewares/usb_drivers/src/usbd_sdr.c index 89e858d..237f1d0 100644 --- a/middlewares/usb_drivers/src/usbd_sdr.c +++ b/middlewares/usb_drivers/src/usbd_sdr.c @@ -101,6 +101,20 @@ static usb_sts_type usbd_get_descriptor(usbd_core_type *udev) case USB_INTERFACE_STRING: desc = udev->desc_handler->get_device_interface_string(); break; + case USB_WINUSB_OS_STRING: +#if (USBD_SUPPORT_WINUSB == 1) + if(udev->desc_handler->get_device_winusb_os_string != NULL) + { + desc = udev->desc_handler->get_device_winusb_os_string(); + } + else + { + usbd_ctrl_unsupport(udev); + } +#else + usbd_ctrl_unsupport(udev); +#endif + break; default: udev->class_handler->setup_handler(udev, &udev->setup); return ret; @@ -244,6 +258,10 @@ static usb_sts_type usbd_set_feature(usbd_core_type *udev) udev->class_handler->setup_handler(udev, &udev->setup); usbd_ctrl_send_status(udev); } + else + { + usbd_ctrl_unsupport(udev); + } return ret; } diff --git a/middlewares/usbd_class/audio_hid/audio_hid_class.c b/middlewares/usbd_class/audio_hid/audio_hid_class.c index 18bfcb8..d60a2f3 100644 --- a/middlewares/usbd_class/audio_hid/audio_hid_class.c +++ b/middlewares/usbd_class/audio_hid/audio_hid_class.c @@ -277,13 +277,18 @@ static usb_sts_type class_hid_setup_handler(void *udev, usb_setup_type *setup) { len = MIN(USBD_AUHID_HID_SIZ_REPORT_DESC, setup->wLength); buf = (uint8_t *)g_usbd_audio_hid_report; + usbd_ctrl_send(pudev, (uint8_t *)buf, len); } else if(setup->wValue >> 8 == HID_DESCRIPTOR_TYPE) { len = MIN(9, setup->wLength); buf = (uint8_t *)g_audio_hid_usb_desc; + usbd_ctrl_send(pudev, (uint8_t *)buf, len); + } + else + { + usbd_ctrl_unsupport(pudev); } - usbd_ctrl_send(pudev, (uint8_t *)buf, len); break; case USB_STD_REQ_GET_INTERFACE: usbd_ctrl_send(pudev, (uint8_t *)&paudio_hid->alt_setting, 1); diff --git a/middlewares/usbd_class/composite_cdc_keyboard/cdc_keyboard_class.c b/middlewares/usbd_class/composite_cdc_keyboard/cdc_keyboard_class.c index 5381033..e19e270 100644 --- a/middlewares/usbd_class/composite_cdc_keyboard/cdc_keyboard_class.c +++ b/middlewares/usbd_class/composite_cdc_keyboard/cdc_keyboard_class.c @@ -415,13 +415,18 @@ static usb_sts_type keyboard_class_setup_handler(void *udev, usb_setup_type *set { len = MIN(USBD_VCPKYBRD_HID_SIZ_REPORT_DESC, setup->wLength); buf = (uint8_t *)g_usbd_vcpkybrd_hid_report; + usbd_ctrl_send(pudev, (uint8_t *)buf, len); } else if(setup->wValue >> 8 == HID_DESCRIPTOR_TYPE) { len = MIN(9, setup->wLength); buf = (uint8_t *)g_vcpkybrd_hid_usb_desc; + usbd_ctrl_send(pudev, (uint8_t *)buf, len); + } + else + { + usbd_ctrl_unsupport(pudev); } - usbd_ctrl_send(pudev, (uint8_t *)buf, len); break; case USB_STD_REQ_GET_INTERFACE: usbd_ctrl_send(pudev, (uint8_t *)&vcpkybrd->alt_setting, 1); diff --git a/middlewares/usbd_class/custom_hid/custom_hid_class.c b/middlewares/usbd_class/custom_hid/custom_hid_class.c index 4d9e974..766ed89 100644 --- a/middlewares/usbd_class/custom_hid/custom_hid_class.c +++ b/middlewares/usbd_class/custom_hid/custom_hid_class.c @@ -160,13 +160,18 @@ static usb_sts_type class_setup_handler(void *udev, usb_setup_type *setup) { len = MIN(USBD_CUSHID_SIZ_REPORT_DESC, setup->wLength); buf = (uint8_t *)g_usbd_custom_hid_report; + usbd_ctrl_send(pudev, (uint8_t *)buf, len); } else if(setup->wValue >> 8 == HID_DESCRIPTOR_TYPE) { len = MIN(9, setup->wLength); buf = (uint8_t *)g_custom_hid_usb_desc; + usbd_ctrl_send(pudev, (uint8_t *)buf, len); + } + else + { + usbd_ctrl_unsupport(pudev); } - usbd_ctrl_send(pudev, (uint8_t *)buf, len); break; case USB_STD_REQ_GET_INTERFACE: usbd_ctrl_send(pudev, (uint8_t *)&pcshid->alt_setting, 1); diff --git a/middlewares/usbd_class/hid_iap/hid_iap_class.c b/middlewares/usbd_class/hid_iap/hid_iap_class.c index 11615ae..1ca384d 100644 --- a/middlewares/usbd_class/hid_iap/hid_iap_class.c +++ b/middlewares/usbd_class/hid_iap/hid_iap_class.c @@ -157,13 +157,18 @@ static usb_sts_type class_setup_handler(void *udev, usb_setup_type *setup) { len = MIN(USBD_HIDIAP_SIZ_REPORT_DESC, setup->wLength); buf = (uint8_t *)g_usbd_hidiap_report; + usbd_ctrl_send(pudev, (uint8_t *)buf, len); } else if(setup->wValue >> 8 == HID_DESCRIPTOR_TYPE) { len = MIN(9, setup->wLength); buf = (uint8_t *)g_hidiap_usb_desc; + usbd_ctrl_send(pudev, (uint8_t *)buf, len); + } + else + { + usbd_ctrl_unsupport(pudev); } - usbd_ctrl_send(pudev, (uint8_t *)buf, len); break; case USB_STD_REQ_GET_INTERFACE: usbd_ctrl_send(pudev, (uint8_t *)&piap->alt_setting, 1); diff --git a/middlewares/usbd_class/keyboard/keyboard_class.c b/middlewares/usbd_class/keyboard/keyboard_class.c index edec82a..c923536 100644 --- a/middlewares/usbd_class/keyboard/keyboard_class.c +++ b/middlewares/usbd_class/keyboard/keyboard_class.c @@ -283,13 +283,18 @@ static usb_sts_type class_setup_handler(void *udev, usb_setup_type *setup) { len = MIN(USBD_KEYBOARD_SIZ_REPORT_DESC, setup->wLength); buf = (uint8_t *)g_usbd_keyboard_report; + usbd_ctrl_send(pudev, (uint8_t *)buf, len); } else if(setup->wValue >> 8 == HID_DESCRIPTOR_TYPE) { len = MIN(9, setup->wLength); buf = (uint8_t *)g_keyboard_usb_desc; + usbd_ctrl_send(pudev, (uint8_t *)buf, len); + } + else + { + usbd_ctrl_unsupport(pudev); } - usbd_ctrl_send(pudev, (uint8_t *)buf, len); break; case USB_STD_REQ_GET_INTERFACE: usbd_ctrl_send(pudev, (uint8_t *)&pkeyboard->alt_setting, 1); diff --git a/middlewares/usbd_class/mouse/mouse_class.c b/middlewares/usbd_class/mouse/mouse_class.c index 65e4dc0..ccf9df3 100644 --- a/middlewares/usbd_class/mouse/mouse_class.c +++ b/middlewares/usbd_class/mouse/mouse_class.c @@ -147,13 +147,18 @@ static usb_sts_type class_setup_handler(void *udev, usb_setup_type *setup) { len = MIN(USBD_MOUSE_SIZ_REPORT_DESC, setup->wLength); buf = (uint8_t *)g_usbd_mouse_report; + usbd_ctrl_send(pudev, (uint8_t *)buf, len); } else if(setup->wValue >> 8 == HID_DESCRIPTOR_TYPE) { len = MIN(9, setup->wLength); buf = (uint8_t *)g_mouse_usb_desc; + usbd_ctrl_send(pudev, (uint8_t *)buf, len); + } + else + { + usbd_ctrl_unsupport(pudev); } - usbd_ctrl_send(pudev, (uint8_t *)buf, len); break; case USB_STD_REQ_GET_INTERFACE: usbd_ctrl_send(pudev, (uint8_t *)&pmouse->alt_setting, 1); diff --git a/middlewares/usbd_class/winusb/winusb_class.c b/middlewares/usbd_class/winusb/winusb_class.c new file mode 100644 index 0000000..adfc91c --- /dev/null +++ b/middlewares/usbd_class/winusb/winusb_class.c @@ -0,0 +1,412 @@ +/** + ************************************************************************** + * @file winusb_class.c + * @brief usb winusb class type + ************************************************************************** + * Copyright notice & Disclaimer + * + * The software Board Support Package (BSP) that is made available to + * download from Artery official website is the copyrighted work of Artery. + * Artery authorizes customers to use, copy, and distribute the BSP + * software and its related documentation for the purpose of design and + * development in conjunction with Artery microcontrollers. Use of the + * software is governed by this copyright notice and the following disclaimer. + * + * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, + * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, + * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR + * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, + * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. + * + ************************************************************************** + */ +#include "usbd_core.h" +#include "winusb_class.h" +#include "winusb_desc.h" +#include "string.h" +#include "stdio.h" +#include "stdlib.h" + +/** @addtogroup AT32F415_middlewares_usbd_class + * @{ + */ + +/** @defgroup USB_winusb_class + * @brief usb device class win usb + * @{ + */ + +/** @defgroup USB_winusb_class_private_functions + * @{ + */ + +static usb_sts_type class_init_handler(void *udev); +static usb_sts_type class_clear_handler(void *udev); +static usb_sts_type class_setup_handler(void *udev, usb_setup_type *setup); +static usb_sts_type class_ept0_tx_handler(void *udev); +static usb_sts_type class_ept0_rx_handler(void *udev); +static usb_sts_type class_in_handler(void *udev, uint8_t ept_num); +static usb_sts_type class_out_handler(void *udev, uint8_t ept_num); +static usb_sts_type class_sof_handler(void *udev); +static usb_sts_type class_event_handler(void *udev, usbd_event_type event); +#if (USBD_SUPPORT_WINUSB == 1) +static usb_sts_type usbd_get_winusb_descriptor(usbd_core_type *udev); +#endif +static usb_sts_type winusb_struct_init(winusb_struct_type *p_winusb); + +/* winusb data struct */ +winusb_struct_type winusb_struct; + +/*winusb receive buffer define*/ +static uint32_t g_winusb_rx_buffer[16]; + +/* usb device class handler */ +usbd_class_handler winusb_class_handler = +{ + class_init_handler, + class_clear_handler, + class_setup_handler, + class_ept0_tx_handler, + class_ept0_rx_handler, + class_in_handler, + class_out_handler, + class_sof_handler, + class_event_handler, + &winusb_struct +}; +/** + * @brief initialize usb endpoint + * @param udev: to the structure of usbd_core_type + * @retval status of usb_sts_type + */ +static usb_sts_type class_init_handler(void *udev) +{ + usb_sts_type status = USB_OK; + usbd_core_type *pudev = (usbd_core_type *)udev; + winusb_struct_type *p_winusb = (winusb_struct_type *)pudev->class_handler->pdata; + + /* init winusb struct */ + winusb_struct_init(p_winusb); + + p_winusb->maxpacket = USBD_FS_WINUSB_MAXPACKET_SIZE; + + /* open out endpoint */ + usbd_ept_open(pudev, USBD_WINUSB_BULK_OUT_EPT, EPT_BULK_TYPE, USBD_WINUSB_OUT_MAXPACKET_SIZE); + + /* open in endpoint */ + usbd_ept_open(pudev, USBD_WINUSB_BULK_IN_EPT, EPT_BULK_TYPE, USBD_WINUSB_IN_MAXPACKET_SIZE); + + /* set out endpoint to receive status */ + usbd_ept_recv(pudev, USBD_WINUSB_BULK_OUT_EPT, p_winusb->g_rx_buff, USBD_WINUSB_OUT_MAXPACKET_SIZE); + + return status; +} + +/** + * @brief clear endpoint or other state + * @param udev: to the structure of usbd_core_type + * @retval status of usb_sts_type + */ +static usb_sts_type class_clear_handler(void *udev) +{ + usb_sts_type status = USB_OK; + usbd_core_type *pudev = (usbd_core_type *)udev; + + /* close in endpoint */ + usbd_ept_close(pudev, USBD_WINUSB_BULK_IN_EPT); + + /* close out endpoint */ + usbd_ept_close(pudev, USBD_WINUSB_BULK_OUT_EPT); + + return status; +} + +/** + * @brief usb device class setup request handler + * @param udev: to the structure of usbd_core_type + * @param setup: setup packet + * @retval status of usb_sts_type + */ +static usb_sts_type class_setup_handler(void *udev, usb_setup_type *setup) +{ + usb_sts_type status = USB_OK; + usbd_core_type *pudev = (usbd_core_type *)udev; + winusb_struct_type *p_winusb = (winusb_struct_type *)pudev->class_handler->pdata; + + switch(setup->bmRequestType & USB_REQ_TYPE_RESERVED) + { + /* class request */ + case USB_REQ_TYPE_CLASS: + usbd_ctrl_unsupport(pudev); + break; + /* standard request */ + case USB_REQ_TYPE_STANDARD: + switch(setup->bRequest) + { + case USB_STD_REQ_GET_DESCRIPTOR: + usbd_ctrl_unsupport(pudev); + break; + case USB_STD_REQ_GET_INTERFACE: + usbd_ctrl_send(pudev, (uint8_t *)&p_winusb->alt_setting, 1); + break; + case USB_STD_REQ_SET_INTERFACE: + p_winusb->alt_setting = setup->wValue; + break; + case USB_STD_REQ_CLEAR_FEATURE: + break; + case USB_STD_REQ_SET_FEATURE: + break; + default: + usbd_ctrl_unsupport(pudev); + break; + } + break; +#if (USBD_SUPPORT_WINUSB == 1) + case USB_REQ_TYPE_VENDOR: + if(setup->bRequest == WINUSB_BMS_VENDOR_CODE) + { + usbd_get_winusb_descriptor(pudev); + } + else + { + usbd_ctrl_unsupport(pudev); + } + break; +#endif + default: + usbd_ctrl_unsupport(pudev); + break; + } + return status; +} + +#if (USBD_SUPPORT_WINUSB == 1) +static usb_sts_type usbd_get_winusb_descriptor(usbd_core_type *udev) +{ + usb_sts_type ret = USB_OK; + uint16_t len = 0; + usbd_desc_t *desc = NULL; + uint8_t desc_type = udev->setup.wIndex; + + switch(desc_type) + { + case USB_WINUSB_COMPAT_ID: + desc = udev->desc_handler->get_device_winusb_os_feature(); + break; + case USB_WINUSB_PROPERTIES_ID: + desc = udev->desc_handler->get_device_winusb_os_property(); + break; + default: + usbd_ctrl_unsupport(udev); + return ret; + } + if(desc != NULL) + { + if((desc->length != 0) && (udev->setup.wLength != 0)) + { + len = MIN(desc->length , udev->setup.wLength); + usbd_ctrl_send(udev, desc->descriptor, len); + } + } + + return ret; +} +#endif + +/** + * @brief usb device endpoint 0 in status stage complete + * @param udev: to the structure of usbd_core_type + * @retval status of usb_sts_type + */ +static usb_sts_type class_ept0_tx_handler(void *udev) +{ + usb_sts_type status = USB_OK; + + /* ...user code... */ + + return status; +} + +/** + * @brief usb device endpoint 0 out status stage complete + * @param udev: usb device core handler type + * @retval status of usb_sts_type + */ +static usb_sts_type class_ept0_rx_handler(void *udev) +{ + usb_sts_type status = USB_OK; + return status; +} + +/** + * @brief usb device transmision complete handler + * @param udev: to the structure of usbd_core_type + * @param ept_num: endpoint number + * @retval status of usb_sts_type + */ +static usb_sts_type class_in_handler(void *udev, uint8_t ept_num) +{ + usbd_core_type *pudev = (usbd_core_type *)udev; + winusb_struct_type *p_winusb = (winusb_struct_type *)pudev->class_handler->pdata; + usb_sts_type status = USB_OK; + + /* ...user code... + trans next packet data + */ + usbd_flush_tx_fifo(pudev, ept_num); + p_winusb->g_tx_completed = 1; + + return status; +} + +/** + * @brief usb device endpoint receive data + * @param udev: to the structure of usbd_core_type + * @param ept_num: endpoint number + * @retval status of usb_sts_type + */ +static usb_sts_type class_out_handler(void *udev, uint8_t ept_num) +{ + usb_sts_type status = USB_OK; + usbd_core_type *pudev = (usbd_core_type *)udev; + winusb_struct_type *p_winusb = (winusb_struct_type *)pudev->class_handler->pdata; + + /* get endpoint receive data length */ + p_winusb->g_rxlen = usbd_get_recv_len(pudev, ept_num); + + /*set recv flag*/ + p_winusb->g_rx_completed = 1; + + return status; +} + +/** + * @brief usb device sof handler + * @param udev: to the structure of usbd_core_type + * @retval status of usb_sts_type + */ +static usb_sts_type class_sof_handler(void *udev) +{ + usb_sts_type status = USB_OK; + + /* ...user code... */ + + return status; +} + +/** + * @brief usb device event handler + * @param udev: to the structure of usbd_core_type + * @param event: usb device event + * @retval status of usb_sts_type + */ +static usb_sts_type class_event_handler(void *udev, usbd_event_type event) +{ + usb_sts_type status = USB_OK; + switch(event) + { + case USBD_RESET_EVENT: + + /* ...user code... */ + + break; + case USBD_SUSPEND_EVENT: + + /* ...user code... */ + + break; + case USBD_WAKEUP_EVENT: + /* ...user code... */ + + break; + case USBD_INISOINCOM_EVENT: + break; + case USBD_OUTISOINCOM_EVENT: + break; + + default: + break; + } + return status; +} + +/** + * @brief usb device winusb init + * @param p_winusb: to the structure of winusb_struct + * @retval status of usb_sts_type + */ +static usb_sts_type winusb_struct_init(winusb_struct_type *p_winusb) +{ + p_winusb->g_tx_completed = 1; + p_winusb->g_rx_completed = 0; + p_winusb->alt_setting = 0; + p_winusb->g_rx_buff = (uint8_t *)g_winusb_rx_buffer; + return USB_OK; +} + +/** + * @brief usb device class rx data process + * @param udev: to the structure of usbd_core_type + * @param recv_data: receive buffer + * @retval receive data len + */ +uint16_t usb_winusb_get_rxdata(void *udev, uint8_t *recv_data) +{ + uint16_t i_index = 0; + uint16_t tmp_len = 0; + usbd_core_type *pudev = (usbd_core_type *)udev; + winusb_struct_type *p_winusb = (winusb_struct_type *)pudev->class_handler->pdata; + + if(p_winusb->g_rx_completed == 0) + { + return 0; + } + p_winusb->g_rx_completed = 0; + tmp_len = p_winusb->g_rxlen; + for(i_index = 0; i_index < p_winusb->g_rxlen; i_index ++) + { + recv_data[i_index] = p_winusb->g_rx_buff[i_index]; + } + + usbd_ept_recv(pudev, USBD_WINUSB_BULK_OUT_EPT, p_winusb->g_rx_buff, p_winusb->maxpacket); + + return tmp_len; +} + +/** + * @brief usb device class send data + * @param udev: to the structure of usbd_core_type + * @param send_data: send data buffer + * @param len: send length + * @retval error status + */ +error_status usb_winusb_send_data(void *udev, uint8_t *send_data, uint16_t len) +{ + error_status status = SUCCESS; + usbd_core_type *pudev = (usbd_core_type *)udev; + winusb_struct_type *p_winusb = (winusb_struct_type *)pudev->class_handler->pdata; + if(p_winusb->g_tx_completed) + { + p_winusb->g_tx_completed = 0; + usbd_ept_send(pudev, USBD_WINUSB_BULK_IN_EPT, send_data, len); + } + else + { + status = ERROR; + } + return status; +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + diff --git a/middlewares/usbd_class/winusb/winusb_class.h b/middlewares/usbd_class/winusb/winusb_class.h new file mode 100644 index 0000000..a70b596 --- /dev/null +++ b/middlewares/usbd_class/winusb/winusb_class.h @@ -0,0 +1,115 @@ +/** + ************************************************************************** + * @file winusb_class.h + * @brief usb winusb class file + ************************************************************************** + * Copyright notice & Disclaimer + * + * The software Board Support Package (BSP) that is made available to + * download from Artery official website is the copyrighted work of Artery. + * Artery authorizes customers to use, copy, and distribute the BSP + * software and its related documentation for the purpose of design and + * development in conjunction with Artery microcontrollers. Use of the + * software is governed by this copyright notice and the following disclaimer. + * + * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, + * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, + * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR + * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, + * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. + * + ************************************************************************** + */ + + /* define to prevent recursive inclusion -------------------------------------*/ +#ifndef __WINUSB_CLASS_H +#define __WINUSB_CLASS_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "usb_std.h" +#include "usbd_core.h" + +/** @addtogroup AT32F415_middlewares_usbd_class + * @{ + */ + +/** @addtogroup USB_winusb_class + * @{ + */ + +/** @defgroup USB_winusb_class_definition + * @{ + */ + +/** + * @brief usb use endpoint define + */ +#define USBD_WINUSB_BULK_IN_EPT 0x81 +#define USBD_WINUSB_BULK_OUT_EPT 0x01 + +/** + * @brief usb in and out max packet size define + */ + +#define USBD_FS_WINUSB_MAXPACKET_SIZE 0x40 +#define USBD_WINUSB_IN_MAXPACKET_SIZE USBD_FS_WINUSB_MAXPACKET_SIZE +#define USBD_WINUSB_OUT_MAXPACKET_SIZE USBD_FS_WINUSB_MAXPACKET_SIZE + +#define WINUSB_BMS_VENDOR_CODE 0xA0 + +/** + * @} + */ + +/** @defgroup USB_winusb_class_exported_types + * @{ + */ + +/** + * @brief usb winusb class struct + */ +typedef struct +{ + uint32_t alt_setting; + uint8_t *g_rx_buff; + uint16_t g_len, g_rxlen; + __IO uint8_t g_tx_completed, g_rx_completed; + uint32_t maxpacket; +}winusb_struct_type; + + +/** + * @} + */ + +/** @defgroup USB_winusb_class_exported_functions + * @{ + */ +extern usbd_class_handler winusb_class_handler; +uint16_t usb_winusb_get_rxdata(void *udev, uint8_t *recv_data); +error_status usb_winusb_send_data(void *udev, uint8_t *send_data, uint16_t len); + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +#ifdef __cplusplus +} +#endif + +#endif + + + + diff --git a/middlewares/usbd_class/winusb/winusb_desc.c b/middlewares/usbd_class/winusb/winusb_desc.c new file mode 100644 index 0000000..acf22c9 --- /dev/null +++ b/middlewares/usbd_class/winusb/winusb_desc.c @@ -0,0 +1,527 @@ +/** + ************************************************************************** + * @file winusb_desc.c + * @brief usb winusb device descriptor + ************************************************************************** + * Copyright notice & Disclaimer + * + * The software Board Support Package (BSP) that is made available to + * download from Artery official website is the copyrighted work of Artery. + * Artery authorizes customers to use, copy, and distribute the BSP + * software and its related documentation for the purpose of design and + * development in conjunction with Artery microcontrollers. Use of the + * software is governed by this copyright notice and the following disclaimer. + * + * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, + * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, + * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR + * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, + * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. + * + ************************************************************************** + */ +#include "stdio.h" +#include "usb_std.h" +#include "usbd_sdr.h" +#include "usbd_core.h" +#include "winusb_desc.h" + +/** @addtogroup AT32F415_middlewares_usbd_class + * @{ + */ + +/** @defgroup USB_winusb_desc + * @brief usb device winusb descriptor + * @{ + */ + +/** @defgroup USB_winusb_desc_private_functions + * @{ + */ + +static usbd_desc_t *get_device_descriptor(void); +static usbd_desc_t *get_device_qualifier(void); +static usbd_desc_t *get_device_configuration(void); +static usbd_desc_t *get_device_other_speed(void); +static usbd_desc_t *get_device_lang_id(void); +static usbd_desc_t *get_device_manufacturer_string(void); +static usbd_desc_t *get_device_product_string(void); +static usbd_desc_t *get_device_serial_string(void); +static usbd_desc_t *get_device_interface_string(void); +static usbd_desc_t *get_device_config_string(void); + +static uint16_t usbd_unicode_convert(uint8_t *string, uint8_t *unicode_buf); +static void usbd_int_to_unicode (uint32_t value , uint8_t *pbuf , uint8_t len); +static void get_serial_num(void); + +#if (USBD_SUPPORT_WINUSB == 1) +static usbd_desc_t *get_device_winusb_os_string(void); +static usbd_desc_t *get_device_winusb_os_feature(void); +static usbd_desc_t *get_device_winusb_os_property(void); +#endif + +#if defined ( __ICCARM__ ) /* iar compiler */ + #pragma data_alignment=4 +#endif +ALIGNED_HEAD static uint8_t g_usbd_desc_buffer[256] ALIGNED_TAIL; + +/** + * @brief device descriptor handler structure + */ +usbd_desc_handler winusb_desc_handler = +{ + get_device_descriptor, + get_device_qualifier, + get_device_configuration, + get_device_other_speed, + get_device_lang_id, + get_device_manufacturer_string, + get_device_product_string, + get_device_serial_string, + get_device_interface_string, + get_device_config_string, +#if (USBD_SUPPORT_WINUSB == 1) + get_device_winusb_os_string, + get_device_winusb_os_feature, + get_device_winusb_os_property +#endif +}; + +/** + * @brief usb device standard descriptor + */ +#if defined ( __ICCARM__ ) /* iar compiler */ + #pragma data_alignment=4 +#endif +ALIGNED_HEAD static uint8_t g_usbd_descriptor[USB_DEVICE_DESC_LEN] ALIGNED_TAIL = +{ + USB_DEVICE_DESC_LEN, /* bLength */ + USB_DESCIPTOR_TYPE_DEVICE, /* bDescriptorType */ + 0x00, /* bcdUSB */ + 0x02, + 0x00, /* bDeviceClass */ + 0x00, /* bDeviceSubClass */ + 0x00, /* bDeviceProtocol */ + USB_MAX_EP0_SIZE, /* bMaxPacketSize */ + LBYTE(USBD_WINUSB_VENDOR_ID), /* idVendor */ + HBYTE(USBD_WINUSB_VENDOR_ID), /* idVendor */ + LBYTE(USBD_WINUSB_PRODUCT_ID), /* idProduct */ + HBYTE(USBD_WINUSB_PRODUCT_ID), /* idProduct */ + 0x00, /* bcdDevice rel. 2.00 */ + 0x02, + USB_MFC_STRING, /* Index of manufacturer string */ + USB_PRODUCT_STRING, /* Index of product string */ + USB_SERIAL_STRING, /* Index of serial number string */ + 1 /* bNumConfigurations */ +}; + +/** + * @brief usb configuration standard descriptor + */ +#if defined ( __ICCARM__ ) /* iar compiler */ + #pragma data_alignment=4 +#endif +ALIGNED_HEAD static uint8_t g_usbd_configuration[USBD_WINUSB_CONFIG_DESC_SIZE] ALIGNED_TAIL = +{ + USB_DEVICE_CFG_DESC_LEN, /* bLength: configuration descriptor size */ + USB_DESCIPTOR_TYPE_CONFIGURATION, /* bDescriptorType: configuration */ + LBYTE(USBD_WINUSB_CONFIG_DESC_SIZE), /* wTotalLength: bytes returned */ + HBYTE(USBD_WINUSB_CONFIG_DESC_SIZE), /* wTotalLength: bytes returned */ + 0x01, /* bNumInterfaces: 1 interface */ + 0x01, /* bConfigurationValue: configuration value */ + 0x00, /* iConfiguration: index of string descriptor describing + the configuration */ + 0xC0, /* bmAttributes: self powered */ + 0x32, /* MaxPower 100 mA: this current is used for detecting vbus */ + + USB_DEVICE_IF_DESC_LEN, /* bLength: interface descriptor size */ + USB_DESCIPTOR_TYPE_INTERFACE, /* bDescriptorType: interface descriptor type */ + 0x00, /* bInterfaceNumber: number of interface */ + 0x00, /* bAlternateSetting: alternate set */ + 0x02, /* bNumEndpoints: number of endpoints */ + 0xff, /* bInterfaceClass: Vendor specific*/ + 0x00, /* bInterfaceSubClass: subclass code */ + 0x00, /* bInterfaceProtocol: protocol code */ + 0x00, /* iInterface: index of string descriptor */ + + USB_DEVICE_EPT_LEN, /* bLength: size of endpoint descriptor in bytes */ + USB_DESCIPTOR_TYPE_ENDPOINT, /* bDescriptorType: endpoint descriptor type */ + USBD_WINUSB_BULK_OUT_EPT, /* bEndpointAddress: the address of endpoint on usb device described by this descriptor */ + USB_EPT_DESC_BULK, /* bmAttributes: endpoint attributes */ + LBYTE(USBD_WINUSB_OUT_MAXPACKET_SIZE), + HBYTE(USBD_WINUSB_OUT_MAXPACKET_SIZE), /* wMaxPacketSize: maximum packe size this endpoint */ + 0x00, /* bInterval: interval for polling endpoint for data transfers */ + + USB_DEVICE_EPT_LEN, /* bLength: size of endpoint descriptor in bytes */ + USB_DESCIPTOR_TYPE_ENDPOINT, /* bDescriptorType: endpoint descriptor type */ + USBD_WINUSB_BULK_IN_EPT, /* bEndpointAddress: the address of endpoint on usb device described by this descriptor */ + USB_EPT_DESC_BULK, /* bmAttributes: endpoint attributes */ + LBYTE(USBD_WINUSB_IN_MAXPACKET_SIZE), + HBYTE(USBD_WINUSB_IN_MAXPACKET_SIZE), /* wMaxPacketSize: maximum packe size this endpoint */ + 0x00, /* bInterval: interval for polling endpoint for data transfers */ +}; + +/** + * @brief usb string lang id + */ +#if defined ( __ICCARM__ ) /* iar compiler */ + #pragma data_alignment=4 +#endif +ALIGNED_HEAD static uint8_t g_string_lang_id[USBD_WINUSB_SIZ_STRING_LANGID] ALIGNED_TAIL = +{ + USBD_WINUSB_SIZ_STRING_LANGID, + USB_DESCIPTOR_TYPE_STRING, + 0x09, + 0x04, +}; + +/** + * @brief usb string serial + */ +#if defined ( __ICCARM__ ) /* iar compiler */ + #pragma data_alignment=4 +#endif +ALIGNED_HEAD static uint8_t g_string_serial[USBD_WINUSB_SIZ_STRING_SERIAL] ALIGNED_TAIL = +{ + USBD_WINUSB_SIZ_STRING_SERIAL, + USB_DESCIPTOR_TYPE_STRING, +}; + + +/* device descriptor */ +static usbd_desc_t device_descriptor = +{ + USB_DEVICE_DESC_LEN, + g_usbd_descriptor +}; + +/* config descriptor */ +static usbd_desc_t config_descriptor = +{ + USBD_WINUSB_CONFIG_DESC_SIZE, + g_usbd_configuration +}; + +/* langid descriptor */ +static usbd_desc_t langid_descriptor = +{ + USBD_WINUSB_SIZ_STRING_LANGID, + g_string_lang_id +}; + +/* serial descriptor */ +static usbd_desc_t serial_descriptor = +{ + USBD_WINUSB_SIZ_STRING_SERIAL, + g_string_serial +}; + +static usbd_desc_t vp_desc; + +/** + * @brief standard usb unicode convert + * @param string: source string + * @param unicode_buf: unicode buffer + * @retval length + */ +static uint16_t usbd_unicode_convert(uint8_t *string, uint8_t *unicode_buf) +{ + uint16_t str_len = 0, id_pos = 2; + uint8_t *tmp_str = string; + + while(*tmp_str != '\0') + { + str_len ++; + unicode_buf[id_pos ++] = *tmp_str ++; + unicode_buf[id_pos ++] = 0x00; + } + + str_len = str_len * 2 + 2; + unicode_buf[0] = (uint8_t)str_len; + unicode_buf[1] = USB_DESCIPTOR_TYPE_STRING; + + return str_len; +} + +/** + * @brief usb int convert to unicode + * @param value: int value + * @param pbus: unicode buffer + * @param len: length + * @retval none + */ +static void usbd_int_to_unicode (uint32_t value , uint8_t *pbuf , uint8_t len) +{ + uint8_t idx = 0; + + for( idx = 0 ; idx < len ; idx ++) + { + if( ((value >> 28)) < 0xA ) + { + pbuf[ 2 * idx] = (value >> 28) + '0'; + } + else + { + pbuf[2 * idx] = (value >> 28) + 'A' - 10; + } + + value = value << 4; + + pbuf[2 * idx + 1] = 0; + } +} + +/** + * @brief usb get serial number + * @param none + * @retval none + */ +static void get_serial_num(void) +{ + uint32_t serial0, serial1, serial2; + + serial0 = *(uint32_t*)MCU_ID1; + serial1 = *(uint32_t*)MCU_ID2; + serial2 = *(uint32_t*)MCU_ID3; + + serial0 += serial2; + + if (serial0 != 0) + { + usbd_int_to_unicode (serial0, &g_string_serial[2] ,8); + usbd_int_to_unicode (serial1, &g_string_serial[18] ,4); + } +} + +/** + * @brief get device descriptor + * @param none + * @retval usbd_desc + */ +static usbd_desc_t *get_device_descriptor(void) +{ + return &device_descriptor; +} + +/** + * @brief get device qualifier + * @param none + * @retval usbd_desc + */ +static usbd_desc_t * get_device_qualifier(void) +{ + return NULL; +} + +/** + * @brief get config descriptor + * @param none + * @retval usbd_desc + */ +static usbd_desc_t *get_device_configuration(void) +{ + return &config_descriptor; +} + + +/** + * @brief get other speed descriptor + * @param none + * @retval usbd_desc + */ +static usbd_desc_t *get_device_other_speed(void) +{ + return NULL; +} + +/** + * @brief get lang id descriptor + * @param none + * @retval usbd_desc + */ +static usbd_desc_t *get_device_lang_id(void) +{ + return &langid_descriptor; +} + + +/** + * @brief get manufacturer descriptor + * @param none + * @retval usbd_desc + */ +static usbd_desc_t *get_device_manufacturer_string(void) +{ + vp_desc.length = usbd_unicode_convert((uint8_t *)USBD_WINUSB_DESC_MANUFACTURER_STRING, g_usbd_desc_buffer); + vp_desc.descriptor = g_usbd_desc_buffer; + return &vp_desc; +} + +/** + * @brief get product descriptor + * @param none + * @retval usbd_desc + */ +static usbd_desc_t *get_device_product_string(void) +{ + vp_desc.length = usbd_unicode_convert((uint8_t *)USBD_WINUSB_DESC_PRODUCT_STRING, g_usbd_desc_buffer); + vp_desc.descriptor = g_usbd_desc_buffer; + return &vp_desc; +} + +/** + * @brief get serial descriptor + * @param none + * @retval usbd_desc + */ +static usbd_desc_t *get_device_serial_string(void) +{ + get_serial_num(); + return &serial_descriptor; +} + +/** + * @brief get interface descriptor + * @param none + * @retval usbd_desc + */ +static usbd_desc_t *get_device_interface_string(void) +{ + vp_desc.length = usbd_unicode_convert((uint8_t *)USBD_WINUSB_DESC_INTERFACE_STRING, g_usbd_desc_buffer); + vp_desc.descriptor = g_usbd_desc_buffer; + return &vp_desc; +} + +/** + * @brief get device config descriptor + * @param none + * @retval usbd_desc + */ +static usbd_desc_t *get_device_config_string(void) +{ + vp_desc.length = usbd_unicode_convert((uint8_t *)USBD_WINUSB_DESC_CONFIGURATION_STRING, g_usbd_desc_buffer); + vp_desc.descriptor = g_usbd_desc_buffer; + return &vp_desc; +} + +#if (USBD_SUPPORT_WINUSB == 1) + +#define USB_LEN_OS_FEATURE_DESC 0x28 +#define USB_LEN_OS_PROPERTY_DESC 0x8E + +/* os string descriptor fields */ +const uint8_t winusb_os_string[8] = { + 'M','S','F','T','1','0','0', + WINUSB_BMS_VENDOR_CODE, +}; + +#define U32TO8C(v) ((v & 0xFF), ((v >> 8) & 0xFF), ((v >> 16) & 0xFF), ((v >> 24) & 0xFF)) + +#if defined ( __ICCARM__ ) /* iar compiler */ + #pragma data_alignment=4 +#endif +ALIGNED_HEAD static uint8_t g_usbd_winusb_os_feature[USB_LEN_OS_FEATURE_DESC] ALIGNED_TAIL = +{ + USB_LEN_OS_FEATURE_DESC, 0x00, 0x00, 0x00, /*dwlength: 4 byte*/ + 0x00, 0x01, /* bcd version 1.0 */ + 0x04, 0x00, /* windex: extended compat ID descritor*/ + 0x01, /* bcount the number of custom property sections */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* reserved */ + /* function section */ + 0x00, /* first interface number */ + 0x00, /* reserved */ + 'W', 'I', 'N', 'U', 'S', 'B', 0x00, 0x00, /* 8 byte: the function compatible id */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,/* 8 byte: the function subcompatible id */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* reserved 6 bytes */ +}; + +#if defined ( __ICCARM__ ) /* iar compiler */ + #pragma data_alignment=4 +#endif +ALIGNED_HEAD static uint8_t g_usbd_winusb_os_property[USB_LEN_OS_PROPERTY_DESC] ALIGNED_TAIL = +{ + USB_LEN_OS_PROPERTY_DESC, 0x00, 0x00, 0x00,/* dwlength: 4 byte*/ + 0x00, 0x01, /* bcd version 1.0 */ + 0x05, 0x00, /* property descriptor index(5) */ + 0x01, 0x00, /* wcount: number of section (1) */ + + /* custom property section */ + 0x84, 0x00, 0x00, 0x00, /* dwsize: size of property section */ + 0x01, 0x00, 0x00, 0x00, /* property data type */ + 0x28, 0x00, /* property name length */ + /* property name: DeviceinterfaceGUID */ + 'D', 0x00, 'e', 0x00, 'v', 0x00, 'i', 0x00, 'c', 0x00, 'e', 0x00, + 'I', 0x00, 'n', 0x00, 't', 0x00, 'e', 0x00, 'r', 0x00, 'f', 0x00, + 'a', 0x00, 'c', 0x00, 'e', 0x00, 'G', 0x00, 'U', 0x00, 'I', 0x00, + 'D', 0x00, 0x00, 0x00, + + 0x4E, 0x00, 0x00, 0x00, /* property data length */ + /*property data: {13eb360b-bc1e-46cb-ac8b-ef3da47b4062} */ + '{', 0x00, '1', 0x00, '3', 0x00, 'E', 0x00, 'B', 0x00, '3', 0x00, + '6', 0x00, '0', 0x00, 'B', 0x00, '-', 0x00, 'B', 0x00, 'C', 0x00, + '1', 0x00, 'E', 0x00, '-', 0x00, '4', 0x00, '6', 0x00, 'C', 0x00, + 'B', 0x00, '-', 0x00, 'A', 0x00, 'C', 0x00, '8', 0x00, 'B', 0x00, + '-', 0x00, 'E', 0x00, 'F', 0x00, '3', 0x00, 'D', 0x00, 'A', 0x00, + '4', 0x00, '7', 0x00, 'B', 0x00, '4', 0x00, '0', 0x00, '6', 0x00, + '2', 0x00, '}', 0x00, 0x00, 0x00 +}; + +static usbd_desc_t winusb_os_feature_descriptor = +{ + USB_LEN_OS_FEATURE_DESC, + g_usbd_winusb_os_feature +}; + +static usbd_desc_t winusb_os_property_descriptor = +{ + USB_LEN_OS_PROPERTY_DESC, + g_usbd_winusb_os_property +}; + +/** + * @brief get winusb os sring + * @param none + * @retval usbd_desc + */ +static usbd_desc_t *get_device_winusb_os_string(void) +{ + vp_desc.length = usbd_unicode_convert((uint8_t *)winusb_os_string, g_usbd_desc_buffer); + vp_desc.descriptor = g_usbd_desc_buffer; + return &vp_desc; +} + +/** + * @brief get winusb os feature + * @param none + * @retval usbd_desc + */ +static usbd_desc_t *get_device_winusb_os_feature(void) +{ + return &winusb_os_feature_descriptor; +} + +/** + * @brief get winusb os property + * @param none + * @retval usbd_desc + */ +static usbd_desc_t *get_device_winusb_os_property(void) +{ + return &winusb_os_property_descriptor; +} + + +#endif + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ diff --git a/middlewares/usbd_class/winusb/winusb_desc.h b/middlewares/usbd_class/winusb/winusb_desc.h new file mode 100644 index 0000000..3f84e30 --- /dev/null +++ b/middlewares/usbd_class/winusb/winusb_desc.h @@ -0,0 +1,92 @@ +/** + ************************************************************************** + * @file winusb_desc.h + * @brief usb winusb descriptor header file + ************************************************************************** + * Copyright notice & Disclaimer + * + * The software Board Support Package (BSP) that is made available to + * download from Artery official website is the copyrighted work of Artery. + * Artery authorizes customers to use, copy, and distribute the BSP + * software and its related documentation for the purpose of design and + * development in conjunction with Artery microcontrollers. Use of the + * software is governed by this copyright notice and the following disclaimer. + * + * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, + * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, + * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR + * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, + * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. + * + ************************************************************************** + */ + +/* define to prevent recursive inclusion -------------------------------------*/ +#ifndef __WINUSB_DESC_H +#define __WINUSB_DESC_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "winusb_class.h" +#include "usbd_core.h" + +/** @addtogroup AT32F415_middlewares_usbd_class + * @{ + */ + +/** @addtogroup USB_winusb_desc + * @{ + */ + +/** @defgroup USB_winusb_desc_definition + * @{ + */ +/** + * @brief usb vendor id and product id define + */ +#define USBD_WINUSB_VENDOR_ID 0x2E3C +#define USBD_WINUSB_PRODUCT_ID 0x5780 + +/** + * @brief usb descriptor size define + */ +#define USBD_WINUSB_CONFIG_DESC_SIZE 32 +#define USBD_WINUSB_SIZ_STRING_LANGID 4 +#define USBD_WINUSB_SIZ_STRING_SERIAL 0x1A + +/** + * @brief usb string define(vendor, product configuration, interface) + */ +#define USBD_WINUSB_DESC_MANUFACTURER_STRING "Artery" +#define USBD_WINUSB_DESC_PRODUCT_STRING "AT32 WinUSB" +#define USBD_WINUSB_DESC_CONFIGURATION_STRING "WinUSB Config" +#define USBD_WINUSB_DESC_INTERFACE_STRING "WinUSB Interface" + +/** + * @brief usb mcu id address deine + */ +#define MCU_ID1 (0x1FFFF7E8) +#define MCU_ID2 (0x1FFFF7EC) +#define MCU_ID3 (0x1FFFF7F0) +/** + * @} + */ + +extern usbd_desc_handler winusb_desc_handler; + + +/** + * @} + */ + +/** + * @} + */ +#ifdef __cplusplus +} +#endif + +#endif diff --git a/project/at_start_f415/examples/adc/current_vref_value_check/mdk_v5/current_vref_value_check.uvprojx b/project/at_start_f415/examples/adc/current_vref_value_check/mdk_v5/current_vref_value_check.uvprojx index 768e9f2..b94d784 100644 --- a/project/at_start_f415/examples/adc/current_vref_value_check/mdk_v5/current_vref_value_check.uvprojx +++ b/project/at_start_f415/examples/adc/current_vref_value_check/mdk_v5/current_vref_value_check.uvprojx @@ -10,7 +10,7 @@ current_vref_value_check 0x4 ARM-ADS - 5060750::V5.06 update 6 (build 750)::ARMCC + 5060750::V5.06 update 6 (build 750)::.\ARMCC 0 diff --git a/project/at_start_f415/examples/adc/exint_trigger_partitioned/mdk_v5/exint_trigger_partitioned.uvprojx b/project/at_start_f415/examples/adc/exint_trigger_partitioned/mdk_v5/exint_trigger_partitioned.uvprojx index 3534e1f..2f77d45 100644 --- a/project/at_start_f415/examples/adc/exint_trigger_partitioned/mdk_v5/exint_trigger_partitioned.uvprojx +++ b/project/at_start_f415/examples/adc/exint_trigger_partitioned/mdk_v5/exint_trigger_partitioned.uvprojx @@ -10,7 +10,7 @@ exint_trigger_partitioned 0x4 ARM-ADS - 5060750::V5.06 update 6 (build 750)::ARMCC + 5060750::V5.06 update 6 (build 750)::.\ARMCC 0 diff --git a/project/at_start_f415/examples/adc/exint_trigger_partitioned/src/at32f415_int.c b/project/at_start_f415/examples/adc/exint_trigger_partitioned/src/at32f415_int.c index fc5ed6f..aff6257 100644 --- a/project/at_start_f415/examples/adc/exint_trigger_partitioned/src/at32f415_int.c +++ b/project/at_start_f415/examples/adc/exint_trigger_partitioned/src/at32f415_int.c @@ -142,7 +142,7 @@ void SysTick_Handler(void) */ void DMA1_Channel1_IRQHandler(void) { - if(dma_flag_get(DMA1_FDT1_FLAG) != RESET) + if(dma_interrupt_flag_get(DMA1_FDT1_FLAG) != RESET) { dma_flag_clear(DMA1_FDT1_FLAG); dma_trans_complete_flag = 1; @@ -156,7 +156,7 @@ void DMA1_Channel1_IRQHandler(void) */ void ADC1_IRQHandler(void) { - if(adc_flag_get(ADC1, ADC_PCCE_FLAG) != RESET) + if(adc_interrupt_flag_get(ADC1, ADC_PCCE_FLAG) != RESET) { adc_flag_clear(ADC1, ADC_PCCE_FLAG); if(preempt_trigger_count < 3) diff --git a/project/at_start_f415/examples/adc/internal_temperature_sensor/mdk_v5/internal_temperature_sensor.uvprojx b/project/at_start_f415/examples/adc/internal_temperature_sensor/mdk_v5/internal_temperature_sensor.uvprojx index 24fa915..3734073 100644 --- a/project/at_start_f415/examples/adc/internal_temperature_sensor/mdk_v5/internal_temperature_sensor.uvprojx +++ b/project/at_start_f415/examples/adc/internal_temperature_sensor/mdk_v5/internal_temperature_sensor.uvprojx @@ -10,7 +10,7 @@ internal_temperature_sensor 0x4 ARM-ADS - 5060750::V5.06 update 6 (build 750)::ARMCC + 5060750::V5.06 update 6 (build 750)::.\ARMCC 0 diff --git a/project/at_start_f415/examples/adc/repeat_conversion_loop_transfer/src/at32f415_int.c b/project/at_start_f415/examples/adc/repeat_conversion_loop_transfer/src/at32f415_int.c index b23e10c..698fed3 100644 --- a/project/at_start_f415/examples/adc/repeat_conversion_loop_transfer/src/at32f415_int.c +++ b/project/at_start_f415/examples/adc/repeat_conversion_loop_transfer/src/at32f415_int.c @@ -140,7 +140,7 @@ void SysTick_Handler(void) */ void DMA1_Channel1_IRQHandler(void) { - if(dma_flag_get(DMA1_FDT1_FLAG) != RESET) + if(dma_interrupt_flag_get(DMA1_FDT1_FLAG) != RESET) { dma_flag_clear(DMA1_FDT1_FLAG); dma_trans_complete_flag++; diff --git a/project/at_start_f415/examples/adc/software_trigger_repeat/src/at32f415_int.c b/project/at_start_f415/examples/adc/software_trigger_repeat/src/at32f415_int.c index 9042b6b..d9b8226 100644 --- a/project/at_start_f415/examples/adc/software_trigger_repeat/src/at32f415_int.c +++ b/project/at_start_f415/examples/adc/software_trigger_repeat/src/at32f415_int.c @@ -140,7 +140,7 @@ void SysTick_Handler(void) */ void DMA1_Channel1_IRQHandler(void) { - if(dma_flag_get(DMA1_FDT1_FLAG) != RESET) + if(dma_interrupt_flag_get(DMA1_FDT1_FLAG) != RESET) { dma_flag_clear(DMA1_FDT1_FLAG); dma_trans_complete_flag++; diff --git a/project/at_start_f415/examples/adc/tmr_trigger_automatic_preempted/mdk_v5/tmr_trigger_automatic_preempted.uvprojx b/project/at_start_f415/examples/adc/tmr_trigger_automatic_preempted/mdk_v5/tmr_trigger_automatic_preempted.uvprojx index c1edd25..e6c2458 100644 --- a/project/at_start_f415/examples/adc/tmr_trigger_automatic_preempted/mdk_v5/tmr_trigger_automatic_preempted.uvprojx +++ b/project/at_start_f415/examples/adc/tmr_trigger_automatic_preempted/mdk_v5/tmr_trigger_automatic_preempted.uvprojx @@ -10,7 +10,7 @@ tmr_trigger_automatic_preempted 0x4 ARM-ADS - 5060750::V5.06 update 6 (build 750)::ARMCC + 5060750::V5.06 update 6 (build 750)::.\ARMCC 0 diff --git a/project/at_start_f415/examples/adc/tmr_trigger_automatic_preempted/src/at32f415_int.c b/project/at_start_f415/examples/adc/tmr_trigger_automatic_preempted/src/at32f415_int.c index 6db6292..36802cf 100644 --- a/project/at_start_f415/examples/adc/tmr_trigger_automatic_preempted/src/at32f415_int.c +++ b/project/at_start_f415/examples/adc/tmr_trigger_automatic_preempted/src/at32f415_int.c @@ -143,7 +143,7 @@ void SysTick_Handler(void) */ void DMA1_Channel1_IRQHandler(void) { - if(dma_flag_get(DMA1_FDT1_FLAG) != RESET) + if(dma_interrupt_flag_get(DMA1_FDT1_FLAG) != RESET) { dma_flag_clear(DMA1_FDT1_FLAG); dma_trans_complete_flag = 1; @@ -157,7 +157,7 @@ void DMA1_Channel1_IRQHandler(void) */ void ADC1_IRQHandler(void) { - if(adc_flag_get(ADC1, ADC_PCCE_FLAG) != RESET) + if(adc_interrupt_flag_get(ADC1, ADC_PCCE_FLAG) != RESET) { adc_flag_clear(ADC1, ADC_PCCE_FLAG); if(preempt_conversion_count < 5) diff --git a/project/at_start_f415/examples/adc/voltage_monitoring/mdk_v5/voltage_monitoring.uvprojx b/project/at_start_f415/examples/adc/voltage_monitoring/mdk_v5/voltage_monitoring.uvprojx index 7fd3475..447e4c8 100644 --- a/project/at_start_f415/examples/adc/voltage_monitoring/mdk_v5/voltage_monitoring.uvprojx +++ b/project/at_start_f415/examples/adc/voltage_monitoring/mdk_v5/voltage_monitoring.uvprojx @@ -10,7 +10,7 @@ voltage_monitoring 0x4 ARM-ADS - 5060750::V5.06 update 6 (build 750)::ARMCC + 5060750::V5.06 update 6 (build 750)::.\ARMCC 0 diff --git a/project/at_start_f415/examples/adc/voltage_monitoring/src/at32f415_int.c b/project/at_start_f415/examples/adc/voltage_monitoring/src/at32f415_int.c index b4fcc45..f78c386 100644 --- a/project/at_start_f415/examples/adc/voltage_monitoring/src/at32f415_int.c +++ b/project/at_start_f415/examples/adc/voltage_monitoring/src/at32f415_int.c @@ -142,7 +142,7 @@ void SysTick_Handler(void) */ void ADC1_IRQHandler(void) { - if(adc_flag_get(ADC1, ADC_VMOR_FLAG) != RESET) + if(adc_interrupt_flag_get(ADC1, ADC_VMOR_FLAG) != RESET) { at32_led_toggle(LED3); adc_flag_clear(ADC1, ADC_VMOR_FLAG); diff --git a/project/at_start_f415/examples/can/communication_mode/src/main.c b/project/at_start_f415/examples/can/communication_mode/src/main.c index 3e2cbf1..7944dc1 100644 --- a/project/at_start_f415/examples/can/communication_mode/src/main.c +++ b/project/at_start_f415/examples/can/communication_mode/src/main.c @@ -108,7 +108,7 @@ static void can_configuration(void) nvic_irq_enable(CAN1_SE_IRQn, 0x00, 0x00); nvic_irq_enable(CAN1_RX0_IRQn, 0x00, 0x00); can_interrupt_enable(CAN1, CAN_RF0MIEN_INT, TRUE); - + /* error interrupt enable */ can_interrupt_enable(CAN1, CAN_ETRIEN_INT, TRUE); can_interrupt_enable(CAN1, CAN_EOIEN_INT, TRUE); @@ -148,7 +148,7 @@ static void can_transmit_data(void) void CAN1_RX0_IRQHandler(void) { can_rx_message_type rx_message_struct; - if(can_flag_get(CAN1,CAN_RF0MN_FLAG) != RESET) + if(can_interrupt_flag_get(CAN1,CAN_RF0MN_FLAG) != RESET) { can_message_receive(CAN1, CAN_RX_FIFO0, &rx_message_struct); if(rx_message_struct.standard_id == 0x400) @@ -166,7 +166,7 @@ void CAN1_RX0_IRQHandler(void) void CAN1_SE_IRQHandler(void) { __IO uint32_t err_index = 0; - if(can_flag_get(CAN1,CAN_ETR_FLAG) != RESET) + if(can_interrupt_flag_get(CAN1,CAN_ETR_FLAG) != RESET) { err_index = CAN1->ests & 0x70; can_flag_clear(CAN1, CAN_ETR_FLAG); diff --git a/project/at_start_f415/examples/can/filter/src/main.c b/project/at_start_f415/examples/can/filter/src/main.c index 47540dd..7284a6c 100644 --- a/project/at_start_f415/examples/can/filter/src/main.c +++ b/project/at_start_f415/examples/can/filter/src/main.c @@ -133,7 +133,7 @@ static void can_configuration(void) nvic_irq_enable(CAN1_SE_IRQn, 0x00, 0x00); nvic_irq_enable(CAN1_RX0_IRQn, 0x00, 0x00); can_interrupt_enable(CAN1, CAN_RF0MIEN_INT, TRUE); - + /* error interrupt enable */ can_interrupt_enable(CAN1, CAN_ETRIEN_INT, TRUE); can_interrupt_enable(CAN1, CAN_EOIEN_INT, TRUE); @@ -260,7 +260,7 @@ static void can_transmit_data(void) void CAN1_RX0_IRQHandler(void) { can_rx_message_type rx_message_struct; - if(can_flag_get(CAN1,CAN_RF0MN_FLAG) != RESET) + if(can_interrupt_flag_get(CAN1,CAN_RF0MN_FLAG) != RESET) { if(test_result == 4) { @@ -288,7 +288,7 @@ void CAN1_RX0_IRQHandler(void) void CAN1_SE_IRQHandler(void) { __IO uint32_t err_index = 0; - if(can_flag_get(CAN1,CAN_ETR_FLAG) != RESET) + if(can_interrupt_flag_get(CAN1,CAN_ETR_FLAG) != RESET) { err_index = CAN1->ests & 0x70; can_flag_clear(CAN1, CAN_ETR_FLAG); diff --git a/project/at_start_f415/examples/can/loopback_mode/src/main.c b/project/at_start_f415/examples/can/loopback_mode/src/main.c index 7b30d01..13aec56 100644 --- a/project/at_start_f415/examples/can/loopback_mode/src/main.c +++ b/project/at_start_f415/examples/can/loopback_mode/src/main.c @@ -108,7 +108,7 @@ static void can_configuration(void) nvic_irq_enable(CAN1_SE_IRQn, 0x00, 0x00); nvic_irq_enable(CAN1_RX0_IRQn, 0x00, 0x00); can_interrupt_enable(CAN1, CAN_RF0MIEN_INT, TRUE); - + /* error interrupt enable */ can_interrupt_enable(CAN1, CAN_ETRIEN_INT, TRUE); can_interrupt_enable(CAN1, CAN_EOIEN_INT, TRUE); @@ -148,7 +148,7 @@ static void can_transmit_data(void) void CAN1_RX0_IRQHandler(void) { can_rx_message_type rx_message_struct; - if(can_flag_get(CAN1,CAN_RF0MN_FLAG) != RESET) + if(can_interrupt_flag_get(CAN1,CAN_RF0MN_FLAG) != RESET) { can_message_receive(CAN1, CAN_RX_FIFO0, &rx_message_struct); if(rx_message_struct.standard_id == 0x400) @@ -164,7 +164,7 @@ void CAN1_RX0_IRQHandler(void) void CAN1_SE_IRQHandler(void) { __IO uint32_t err_index = 0; - if(can_flag_get(CAN1,CAN_ETR_FLAG) != RESET) + if(can_interrupt_flag_get(CAN1,CAN_ETR_FLAG) != RESET) { err_index = CAN1->ests & 0x70; can_flag_clear(CAN1, CAN_ETR_FLAG); diff --git a/project/at_start_f415/examples/cmp/deep_sleep_mode/src/at32f415_int.c b/project/at_start_f415/examples/cmp/deep_sleep_mode/src/at32f415_int.c index 46face9..3adb4d9 100644 --- a/project/at_start_f415/examples/cmp/deep_sleep_mode/src/at32f415_int.c +++ b/project/at_start_f415/examples/cmp/deep_sleep_mode/src/at32f415_int.c @@ -138,7 +138,7 @@ void SysTick_Handler(void) void CMP1_IRQHandler(void) { - if(exint_flag_get(EXINT_LINE_19) != RESET) + if(exint_interrupt_flag_get(EXINT_LINE_19) != RESET) { /* clear exint21 flag */ exint_flag_clear(EXINT_LINE_19); diff --git a/project/at_start_f415/examples/cortex_m4/systick_interrupt/src/main.c b/project/at_start_f415/examples/cortex_m4/systick_interrupt/src/main.c index 9195e00..673e768 100644 --- a/project/at_start_f415/examples/cortex_m4/systick_interrupt/src/main.c +++ b/project/at_start_f415/examples/cortex_m4/systick_interrupt/src/main.c @@ -55,6 +55,26 @@ void systick_handler(void) } } +/** + * @brief config systick and enable interrupt. + * @param none + * @retval none + */ +static uint32_t systick_interrupt_config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); + SysTick->VAL = 0UL; + SysTick->CTRL |= SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; + return (0UL); +} + /** * @brief main function. * @param none @@ -68,7 +88,7 @@ int main(void) systick_clock_source_config(SYSTICK_CLOCK_SOURCE_AHBCLK_NODIV); /* config systick reload value and enable interrupt */ - SysTick_Config(MS_TICK); + systick_interrupt_config(MS_TICK); /* configure led */ at32_led_init(LED2); diff --git a/project/at_start_f415/examples/debug/tmr1/src/main.c b/project/at_start_f415/examples/debug/tmr1/src/main.c index b296e6f..7292648 100644 --- a/project/at_start_f415/examples/debug/tmr1/src/main.c +++ b/project/at_start_f415/examples/debug/tmr1/src/main.c @@ -44,7 +44,7 @@ uint16_t counter = 0; */ void TMR1_OVF_TMR10_IRQHandler(void) { - if(tmr_flag_get(TMR1, TMR_OVF_FLAG) != RESET) + if(tmr_interrupt_flag_get(TMR1, TMR_OVF_FLAG) != RESET) { /* add user code... */ at32_led_toggle(LED3); diff --git a/project/at_start_f415/examples/dma/data_to_gpio_flexible/src/main.c b/project/at_start_f415/examples/dma/data_to_gpio_flexible/src/main.c index 1ab58d4..c4bb8e0 100644 --- a/project/at_start_f415/examples/dma/data_to_gpio_flexible/src/main.c +++ b/project/at_start_f415/examples/dma/data_to_gpio_flexible/src/main.c @@ -47,7 +47,7 @@ uint16_t src_buffer[BUFFER_SIZE] = {0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x00 */ void DMA2_Channel1_IRQHandler(void) { - if(dma_flag_get(DMA2_FDT1_FLAG) != RESET) + if(dma_interrupt_flag_get(DMA2_FDT1_FLAG) != RESET) { /* turn led2/led3/led4 on */ at32_led_on(LED2); diff --git a/project/at_start_f415/examples/dma/flash_to_sram/src/main.c b/project/at_start_f415/examples/dma/flash_to_sram/src/main.c index 55f5fe3..e6a830d 100644 --- a/project/at_start_f415/examples/dma/flash_to_sram/src/main.c +++ b/project/at_start_f415/examples/dma/flash_to_sram/src/main.c @@ -59,7 +59,7 @@ error_status buffer_compare(const uint32_t* pbuffer, uint32_t* pbuffer1, uint16_ */ void DMA1_Channel1_IRQHandler(void) { - if(dma_flag_get(DMA1_FDT1_FLAG) != RESET) + if(dma_interrupt_flag_get(DMA1_FDT1_FLAG) != RESET) { data_counter_end = 0; dma_flag_clear(DMA1_FDT1_FLAG); @@ -157,4 +157,3 @@ int main(void) /** * @} */ - diff --git a/project/at_start_f415/examples/ertc/calendar/src/at32f415_int.c b/project/at_start_f415/examples/ertc/calendar/src/at32f415_int.c index b806a1b..8dae9c3 100644 --- a/project/at_start_f415/examples/ertc/calendar/src/at32f415_int.c +++ b/project/at_start_f415/examples/ertc/calendar/src/at32f415_int.c @@ -140,7 +140,7 @@ void SysTick_Handler(void) */ void ERTCAlarm_IRQHandler(void) { - if(ertc_flag_get(ERTC_ALAF_FLAG) != RESET) + if(ertc_interrupt_flag_get(ERTC_ALAF_FLAG) != RESET) { /* display the alarm */ ertc_alarm_show(); diff --git a/project/at_start_f415/examples/ertc/lick_calibration/src/at32f415_int.c b/project/at_start_f415/examples/ertc/lick_calibration/src/at32f415_int.c index f184ebf..aa534fb 100644 --- a/project/at_start_f415/examples/ertc/lick_calibration/src/at32f415_int.c +++ b/project/at_start_f415/examples/ertc/lick_calibration/src/at32f415_int.c @@ -143,7 +143,7 @@ void SysTick_Handler(void) */ void TMR5_GLOBAL_IRQHandler(void) { - if (tmr_flag_get(TMR5, TMR_C4_FLAG) != RESET) + if (tmr_interrupt_flag_get(TMR5, TMR_C4_FLAG) != RESET) { /* get the input capture value */ tmp_c4[capture_number++] = tmr_channel_value_get(TMR5, TMR_SELECT_CHANNEL_4); diff --git a/project/at_start_f415/examples/ertc/tamper/src/at32f415_int.c b/project/at_start_f415/examples/ertc/tamper/src/at32f415_int.c index 7963381..2f6cc16 100644 --- a/project/at_start_f415/examples/ertc/tamper/src/at32f415_int.c +++ b/project/at_start_f415/examples/ertc/tamper/src/at32f415_int.c @@ -141,7 +141,7 @@ void SysTick_Handler(void) */ void TAMP_STAMP_IRQHandler(void) { - if(ertc_flag_get(ERTC_TP1F_FLAG) != RESET) + if(ertc_interrupt_flag_get(ERTC_TP1F_FLAG) != RESET) { /* check if ertc backup data registers are cleared */ if(is_bpr_reg_reset() == 0) diff --git a/project/at_start_f415/examples/ertc/time_stamp/src/at32f415_int.c b/project/at_start_f415/examples/ertc/time_stamp/src/at32f415_int.c index 681ca7a..7e217f5 100644 --- a/project/at_start_f415/examples/ertc/time_stamp/src/at32f415_int.c +++ b/project/at_start_f415/examples/ertc/time_stamp/src/at32f415_int.c @@ -142,7 +142,7 @@ void SysTick_Handler(void) */ void TAMP_STAMP_IRQHandler(void) { - if(ertc_flag_get(ERTC_TSF_FLAG)) + if(ertc_interrupt_flag_get(ERTC_TSF_FLAG)) { /* display the timestamp */ ertc_timestamp_show(); diff --git a/project/at_start_f415/examples/ertc/wakeup_timer/src/at32f415_int.c b/project/at_start_f415/examples/ertc/wakeup_timer/src/at32f415_int.c index a17bfa4..5946347 100644 --- a/project/at_start_f415/examples/ertc/wakeup_timer/src/at32f415_int.c +++ b/project/at_start_f415/examples/ertc/wakeup_timer/src/at32f415_int.c @@ -141,7 +141,7 @@ void SysTick_Handler(void) */ void ERTC_WKUP_IRQHandler(void) { - if(ertc_flag_get(ERTC_WATF_FLAG) != RESET) + if(ertc_interrupt_flag_get(ERTC_WATF_FLAG) != RESET) { printf("wakeup\r\n"); diff --git a/project/at_start_f415/examples/exint/exint_config/src/main.c b/project/at_start_f415/examples/exint/exint_config/src/main.c index f03908c..72c3c8b 100644 --- a/project/at_start_f415/examples/exint/exint_config/src/main.c +++ b/project/at_start_f415/examples/exint/exint_config/src/main.c @@ -93,7 +93,7 @@ void exint_line0_config(void) */ void EXINT0_IRQHandler(void) { - if(exint_flag_get(EXINT_LINE_0) != RESET) + if(exint_interrupt_flag_get(EXINT_LINE_0) != RESET) { at32_led_toggle(LED2); at32_led_toggle(LED3); diff --git a/project/at_start_f415/examples/exint/exint_software_trigger/src/main.c b/project/at_start_f415/examples/exint/exint_software_trigger/src/main.c index e64ac76..f38fcc0 100644 --- a/project/at_start_f415/examples/exint/exint_software_trigger/src/main.c +++ b/project/at_start_f415/examples/exint/exint_software_trigger/src/main.c @@ -88,7 +88,7 @@ static void tmr1_config(void) */ void TMR1_OVF_TMR10_IRQHandler(void) { - if(tmr_flag_get(TMR1,TMR_OVF_FLAG) != RESET) + if(tmr_interrupt_flag_get(TMR1,TMR_OVF_FLAG) != RESET) { at32_led_toggle(LED2); exint_software_interrupt_event_generate(EXINT_LINE_4); @@ -103,7 +103,7 @@ void TMR1_OVF_TMR10_IRQHandler(void) */ void EXINT4_IRQHandler(void) { - if(exint_flag_get(EXINT_LINE_4) != RESET) + if(exint_interrupt_flag_get(EXINT_LINE_4) != RESET) { at32_led_toggle(LED3); at32_led_toggle(LED4); diff --git a/project/at_start_f415/examples/i2s/halfduplex_interrupt/src/at32f415_int.c b/project/at_start_f415/examples/i2s/halfduplex_interrupt/src/at32f415_int.c index 3950c43..d5153a4 100644 --- a/project/at_start_f415/examples/i2s/halfduplex_interrupt/src/at32f415_int.c +++ b/project/at_start_f415/examples/i2s/halfduplex_interrupt/src/at32f415_int.c @@ -143,7 +143,7 @@ void SysTick_Handler(void) */ void SPI2_IRQHandler(void) { - if(spi_i2s_flag_get(SPI2, SPI_I2S_RDBF_FLAG) != RESET) + if(spi_i2s_interrupt_flag_get(SPI2, SPI_I2S_RDBF_FLAG) != RESET) { i2s2_buffer_rx[rx_index++] = spi_i2s_data_receive(SPI2); } @@ -156,7 +156,7 @@ void SysTick_Handler(void) */ void SPI1_IRQHandler(void) { - if(spi_i2s_flag_get(SPI1, SPI_I2S_TDBE_FLAG) != RESET) + if(spi_i2s_interrupt_flag_get(SPI1, SPI_I2S_TDBE_FLAG) != RESET) { spi_i2s_data_transmit(SPI1, i2s1_buffer_tx[tx_index++]); if(tx_index == 32) diff --git a/project/at_start_f415/examples/pwc/deepsleep_ertc_alarm/mdk_v5/deepsleep_ertc_alarm.uvprojx b/project/at_start_f415/examples/pwc/deepsleep_ertc_alarm/mdk_v5/deepsleep_ertc_alarm.uvprojx index 0deebd4..b34cfce 100644 --- a/project/at_start_f415/examples/pwc/deepsleep_ertc_alarm/mdk_v5/deepsleep_ertc_alarm.uvprojx +++ b/project/at_start_f415/examples/pwc/deepsleep_ertc_alarm/mdk_v5/deepsleep_ertc_alarm.uvprojx @@ -10,7 +10,7 @@ deepsleep_ertc_alarm 0x4 ARM-ADS - 5060750::V5.06 update 6 (build 750)::ARMCC + 5060750::V5.06 update 6 (build 750)::.\ARMCC 0 diff --git a/project/at_start_f415/examples/pwc/deepsleep_ertc_alarm/src/at32f415_int.c b/project/at_start_f415/examples/pwc/deepsleep_ertc_alarm/src/at32f415_int.c index 4793a15..43285dc 100644 --- a/project/at_start_f415/examples/pwc/deepsleep_ertc_alarm/src/at32f415_int.c +++ b/project/at_start_f415/examples/pwc/deepsleep_ertc_alarm/src/at32f415_int.c @@ -140,7 +140,7 @@ void SysTick_Handler(void) */ void ERTCAlarm_IRQHandler(void) { - if(ertc_flag_get(ERTC_ALAF_FLAG) != RESET) + if(ertc_interrupt_flag_get(ERTC_ALAF_FLAG) != RESET) { /* clear ertc alarm flag */ ertc_flag_clear(ERTC_ALAF_FLAG); diff --git a/project/at_start_f415/examples/pwc/deepsleep_ertc_tamper/mdk_v5/deepsleep_ertc_tamper.uvprojx b/project/at_start_f415/examples/pwc/deepsleep_ertc_tamper/mdk_v5/deepsleep_ertc_tamper.uvprojx index 98dc043..a7e15ba 100644 --- a/project/at_start_f415/examples/pwc/deepsleep_ertc_tamper/mdk_v5/deepsleep_ertc_tamper.uvprojx +++ b/project/at_start_f415/examples/pwc/deepsleep_ertc_tamper/mdk_v5/deepsleep_ertc_tamper.uvprojx @@ -10,7 +10,7 @@ deepsleep_ertc_tamper 0x4 ARM-ADS - 5060750::V5.06 update 6 (build 750)::ARMCC + 5060750::V5.06 update 6 (build 750)::.\ARMCC 0 diff --git a/project/at_start_f415/examples/pwc/deepsleep_ertc_tamper/src/at32f415_int.c b/project/at_start_f415/examples/pwc/deepsleep_ertc_tamper/src/at32f415_int.c index fad1f25..bd01df8 100644 --- a/project/at_start_f415/examples/pwc/deepsleep_ertc_tamper/src/at32f415_int.c +++ b/project/at_start_f415/examples/pwc/deepsleep_ertc_tamper/src/at32f415_int.c @@ -140,7 +140,7 @@ void SysTick_Handler(void) */ void TAMP_STAMP_IRQHandler(void) { - if(ertc_flag_get(ERTC_TP1F_FLAG) != RESET) + if(ertc_interrupt_flag_get(ERTC_TP1F_FLAG) != RESET) { /* clear ertc alarm flag */ ertc_flag_clear(ERTC_TP1F_FLAG); diff --git a/project/at_start_f415/examples/pwc/power_voltage_monitor/mdk_v5/power_voltage_monitor.uvprojx b/project/at_start_f415/examples/pwc/power_voltage_monitor/mdk_v5/power_voltage_monitor.uvprojx index 0b23cf0..a6738dc 100644 --- a/project/at_start_f415/examples/pwc/power_voltage_monitor/mdk_v5/power_voltage_monitor.uvprojx +++ b/project/at_start_f415/examples/pwc/power_voltage_monitor/mdk_v5/power_voltage_monitor.uvprojx @@ -10,7 +10,7 @@ power_voltage_monitor 0x4 ARM-ADS - 5060750::V5.06 update 6 (build 750)::ARMCC + 5060750::V5.06 update 6 (build 750)::.\ARMCC 0 diff --git a/project/at_start_f415/examples/pwc/power_voltage_monitor/src/at32f415_int.c b/project/at_start_f415/examples/pwc/power_voltage_monitor/src/at32f415_int.c index 256cb9c..afd81b7 100644 --- a/project/at_start_f415/examples/pwc/power_voltage_monitor/src/at32f415_int.c +++ b/project/at_start_f415/examples/pwc/power_voltage_monitor/src/at32f415_int.c @@ -140,7 +140,7 @@ void SysTick_Handler(void) */ void PVM_IRQHandler(void) { - if(exint_flag_get(EXINT_LINE_16) != RESET) + if(exint_interrupt_flag_get(EXINT_LINE_16) != RESET) { /* clear exint line flag */ exint_flag_clear(EXINT_LINE_16); diff --git a/project/at_start_f415/examples/pwc/sleep_tmr2/mdk_v5/sleep_tmr2.uvprojx b/project/at_start_f415/examples/pwc/sleep_tmr2/mdk_v5/sleep_tmr2.uvprojx index 583917a..15b03a4 100644 --- a/project/at_start_f415/examples/pwc/sleep_tmr2/mdk_v5/sleep_tmr2.uvprojx +++ b/project/at_start_f415/examples/pwc/sleep_tmr2/mdk_v5/sleep_tmr2.uvprojx @@ -10,7 +10,7 @@ sleep_tmr2 0x4 ARM-ADS - 5060750::V5.06 update 6 (build 750)::ARMCC + 5060750::V5.06 update 6 (build 750)::.\ARMCC 0 diff --git a/project/at_start_f415/examples/pwc/sleep_tmr2/src/at32f415_int.c b/project/at_start_f415/examples/pwc/sleep_tmr2/src/at32f415_int.c index 07c87eb..f2e6007 100644 --- a/project/at_start_f415/examples/pwc/sleep_tmr2/src/at32f415_int.c +++ b/project/at_start_f415/examples/pwc/sleep_tmr2/src/at32f415_int.c @@ -139,7 +139,7 @@ void SysTick_Handler(void) */ void TMR2_GLOBAL_IRQHandler(void) { - if(tmr_flag_get(TMR2, TMR_OVF_FLAG) != RESET) + if(tmr_interrupt_flag_get(TMR2, TMR_OVF_FLAG) != RESET) { /* clear timer 2 ovf flag */ tmr_flag_clear(TMR2, TMR_OVF_FLAG); diff --git a/project/at_start_f415/examples/pwc/sleep_usart1/mdk_v5/sleep_usart1.uvprojx b/project/at_start_f415/examples/pwc/sleep_usart1/mdk_v5/sleep_usart1.uvprojx index 489fcb5..92a8a5b 100644 --- a/project/at_start_f415/examples/pwc/sleep_usart1/mdk_v5/sleep_usart1.uvprojx +++ b/project/at_start_f415/examples/pwc/sleep_usart1/mdk_v5/sleep_usart1.uvprojx @@ -10,7 +10,7 @@ sleep_usart1 0x4 ARM-ADS - 5060750::V5.06 update 6 (build 750)::ARMCC + 5060750::V5.06 update 6 (build 750)::.\ARMCC 0 diff --git a/project/at_start_f415/examples/pwc/sleep_usart1/src/at32f415_int.c b/project/at_start_f415/examples/pwc/sleep_usart1/src/at32f415_int.c index 5e7d8f8..97124cd 100644 --- a/project/at_start_f415/examples/pwc/sleep_usart1/src/at32f415_int.c +++ b/project/at_start_f415/examples/pwc/sleep_usart1/src/at32f415_int.c @@ -141,7 +141,7 @@ void SysTick_Handler(void) */ void USART1_IRQHandler(void) { - if(usart_flag_get(USART1, USART_RDBF_FLAG) != RESET) + if(usart_interrupt_flag_get(USART1, USART_RDBF_FLAG) != RESET) { /* clear rdbf flag */ usart1_index = usart_data_receive(USART1); diff --git a/project/at_start_f415/examples/pwc/standby_ertc_alarm/mdk_v5/standby_ertc_alarm.uvprojx b/project/at_start_f415/examples/pwc/standby_ertc_alarm/mdk_v5/standby_ertc_alarm.uvprojx index 1da0657..ba036ac 100644 --- a/project/at_start_f415/examples/pwc/standby_ertc_alarm/mdk_v5/standby_ertc_alarm.uvprojx +++ b/project/at_start_f415/examples/pwc/standby_ertc_alarm/mdk_v5/standby_ertc_alarm.uvprojx @@ -10,7 +10,7 @@ standby_ertc_alarm 0x4 ARM-ADS - 5060750::V5.06 update 6 (build 750)::ARMCC + 5060750::V5.06 update 6 (build 750)::.\ARMCC 0 diff --git a/project/at_start_f415/examples/sdio/sd_mmc_card/src/at32_sdio.c b/project/at_start_f415/examples/sdio/sd_mmc_card/src/at32_sdio.c index 2571360..a10f45b 100644 --- a/project/at_start_f415/examples/sdio/sd_mmc_card/src/at32_sdio.c +++ b/project/at_start_f415/examples/sdio/sd_mmc_card/src/at32_sdio.c @@ -1779,7 +1779,7 @@ void SDIO2_IRQHandler(void) */ sd_error_status_type sd_irq_service(void) { - if(sdio_flag_get(SDIOx, SDIO_DTCMPL_FLAG) != RESET) + if(sdio_interrupt_flag_get(SDIOx, SDIO_DTCMPL_FLAG) != RESET) { if(stop_flag == 1) { @@ -1804,7 +1804,7 @@ sd_error_status_type sd_irq_service(void) return transfer_error; } - if(sdio_flag_get(SDIOx, SDIO_DTFAIL_FLAG) != RESET) + if(sdio_interrupt_flag_get(SDIOx, SDIO_DTFAIL_FLAG) != RESET) { /* clear flag */ sdio_flag_clear(SDIOx, SDIO_DTFAIL_FLAG); @@ -1813,7 +1813,7 @@ sd_error_status_type sd_irq_service(void) return transfer_error; } - if(sdio_flag_get(SDIOx, SDIO_DTTIMEOUT_FLAG) != RESET) + if(sdio_interrupt_flag_get(SDIOx, SDIO_DTTIMEOUT_FLAG) != RESET) { /* clear flag */ sdio_flag_clear(SDIOx, SDIO_DTTIMEOUT_FLAG); @@ -1822,7 +1822,7 @@ sd_error_status_type sd_irq_service(void) return transfer_error; } - if(sdio_flag_get(SDIOx, SDIO_RXERRO_FLAG) != RESET) + if(sdio_interrupt_flag_get(SDIOx, SDIO_RXERRO_FLAG) != RESET) { /* clear flag */ sdio_flag_clear(SDIOx, SDIO_RXERRO_FLAG); @@ -1831,7 +1831,7 @@ sd_error_status_type sd_irq_service(void) return(SD_RX_OVERRUN); } - if(sdio_flag_get(SDIOx, SDIO_TXERRU_FLAG) != RESET) + if(sdio_interrupt_flag_get(SDIOx, SDIO_TXERRU_FLAG) != RESET) { /* clear flag */ sdio_flag_clear(SDIOx, SDIO_TXERRU_FLAG); @@ -1840,7 +1840,7 @@ sd_error_status_type sd_irq_service(void) return(SD_TX_UNDERRUN); } - if(sdio_flag_get(SDIOx, SDIO_SBITERR_FLAG) != RESET) + if(sdio_interrupt_flag_get(SDIOx, SDIO_SBITERR_FLAG) != RESET) { /* clear flag */ sdio_flag_clear(SDIOx, SDIO_SBITERR_FLAG); diff --git a/project/at_start_f415/examples/sdio/sdio_fatfs/src/at32_sdio.c b/project/at_start_f415/examples/sdio/sdio_fatfs/src/at32_sdio.c index 3d7b2ad..df6c931 100644 --- a/project/at_start_f415/examples/sdio/sdio_fatfs/src/at32_sdio.c +++ b/project/at_start_f415/examples/sdio/sdio_fatfs/src/at32_sdio.c @@ -100,11 +100,11 @@ sd_error_status_type sd_init(void) sdio_reset(SDIOx); /* power on */ status = sd_power_on(); - + if(status == SD_OK) break; } - + if(status == SD_OK) { /* sdio card initialize */ @@ -288,7 +288,7 @@ sd_error_status_type sd_power_on(void) while((!valid_voltage) && (count < SD_MAX_VOLT_TRIAL)) { delay_ms(10); - + /* send cmd55 before acmd41 */ sdio_command_init_struct.argument = 0x00; sdio_command_init_struct.cmd_index = SD_CMD_APP_CMD; @@ -355,7 +355,7 @@ sd_error_status_type sd_power_on(void) while((!valid_voltage) && (count < SD_MAX_VOLT_TRIAL)) { delay_ms(10); - + sdio_command_init_struct.argument = SD_VOLTAGE_WINDOW_MMC; sdio_command_init_struct.cmd_index = SD_CMD_SEND_OP_COND; sdio_command_init_struct.rsp_type = SDIO_RESPONSE_SHORT; @@ -1786,7 +1786,7 @@ void SDIO2_IRQHandler(void) */ sd_error_status_type sd_irq_service(void) { - if(sdio_flag_get(SDIOx, SDIO_DTCMPL_FLAG) != RESET) + if(sdio_interrupt_flag_get(SDIOx, SDIO_DTCMPL_FLAG) != RESET) { if(stop_flag == 1) { @@ -1811,7 +1811,7 @@ sd_error_status_type sd_irq_service(void) return transfer_error; } - if(sdio_flag_get(SDIOx, SDIO_DTFAIL_FLAG) != RESET) + if(sdio_interrupt_flag_get(SDIOx, SDIO_DTFAIL_FLAG) != RESET) { /* clear flag */ sdio_flag_clear(SDIOx, SDIO_DTFAIL_FLAG); @@ -1820,7 +1820,7 @@ sd_error_status_type sd_irq_service(void) return transfer_error; } - if(sdio_flag_get(SDIOx, SDIO_DTTIMEOUT_FLAG) != RESET) + if(sdio_interrupt_flag_get(SDIOx, SDIO_DTTIMEOUT_FLAG) != RESET) { /* clear flag */ sdio_flag_clear(SDIOx, SDIO_DTTIMEOUT_FLAG); @@ -1829,7 +1829,7 @@ sd_error_status_type sd_irq_service(void) return transfer_error; } - if(sdio_flag_get(SDIOx, SDIO_RXERRO_FLAG) != RESET) + if(sdio_interrupt_flag_get(SDIOx, SDIO_RXERRO_FLAG) != RESET) { /* clear flag */ sdio_flag_clear(SDIOx, SDIO_RXERRO_FLAG); @@ -1838,7 +1838,7 @@ sd_error_status_type sd_irq_service(void) return(SD_RX_OVERRUN); } - if(sdio_flag_get(SDIOx, SDIO_TXERRU_FLAG) != RESET) + if(sdio_interrupt_flag_get(SDIOx, SDIO_TXERRU_FLAG) != RESET) { /* clear flag */ sdio_flag_clear(SDIOx, SDIO_TXERRU_FLAG); @@ -1847,7 +1847,7 @@ sd_error_status_type sd_irq_service(void) return(SD_TX_UNDERRUN); } - if(sdio_flag_get(SDIOx, SDIO_SBITERR_FLAG) != RESET) + if(sdio_interrupt_flag_get(SDIOx, SDIO_SBITERR_FLAG) != RESET) { /* clear flag */ sdio_flag_clear(SDIOx, SDIO_SBITERR_FLAG); diff --git a/project/at_start_f415/examples/spi/halfduplex_interrupt/src/at32f415_int.c b/project/at_start_f415/examples/spi/halfduplex_interrupt/src/at32f415_int.c index 990e310..c51ddb2 100644 --- a/project/at_start_f415/examples/spi/halfduplex_interrupt/src/at32f415_int.c +++ b/project/at_start_f415/examples/spi/halfduplex_interrupt/src/at32f415_int.c @@ -145,7 +145,7 @@ void SysTick_Handler(void) */ void SPI1_IRQHandler(void) { - if(spi_i2s_flag_get(SPI1, SPI_I2S_TDBE_FLAG) != RESET) + if(spi_i2s_interrupt_flag_get(SPI1, SPI_I2S_TDBE_FLAG) != RESET) { spi_i2s_data_transmit(SPI1, spi1_tx_buffer[tx_index++]); if(tx_index == BUFFERSIZE) @@ -162,7 +162,7 @@ void SysTick_Handler(void) */ void SPI2_IRQHandler(void) { - if(spi_i2s_flag_get(SPI2, SPI_I2S_RDBF_FLAG) != RESET) + if(spi_i2s_interrupt_flag_get(SPI2, SPI_I2S_RDBF_FLAG) != RESET) { spi2_rx_buffer[rx_index++] = spi_i2s_data_receive(SPI2); } diff --git a/project/at_start_f415/examples/spi/halfduplex_transceiver_switch/mdk_v5/halfduplex_transceiver_switch.uvprojx b/project/at_start_f415/examples/spi/halfduplex_transceiver_switch/mdk_v5/halfduplex_transceiver_switch.uvprojx index 35505c1..274d7f2 100644 --- a/project/at_start_f415/examples/spi/halfduplex_transceiver_switch/mdk_v5/halfduplex_transceiver_switch.uvprojx +++ b/project/at_start_f415/examples/spi/halfduplex_transceiver_switch/mdk_v5/halfduplex_transceiver_switch.uvprojx @@ -10,7 +10,7 @@ halfduplex_transceiver_switch 0x4 ARM-ADS - 5060750::V5.06 update 6 (build 750)::ARMCC + 5060750::V5.06 update 6 (build 750)::.\ARMCC 0 diff --git a/project/at_start_f415/examples/spi/halfduplex_transceiver_switch/readme.txt b/project/at_start_f415/examples/spi/halfduplex_transceiver_switch/readme.txt index 26a24ee..050f607 100644 --- a/project/at_start_f415/examples/spi/halfduplex_transceiver_switch/readme.txt +++ b/project/at_start_f415/examples/spi/halfduplex_transceiver_switch/readme.txt @@ -13,4 +13,5 @@ pb13(sck) <---> pa5(sck) pb14(miso) <---> pa7(mosi) - for more detailed information. please refer to the application note document AN0102. \ No newline at end of file + for more detailed information. please refer to the application note document AN0102. + diff --git a/project/at_start_f415/examples/spi/halfduplex_transceiver_switch/src/at32f415_int.c b/project/at_start_f415/examples/spi/halfduplex_transceiver_switch/src/at32f415_int.c index c035862..53eced2 100644 --- a/project/at_start_f415/examples/spi/halfduplex_transceiver_switch/src/at32f415_int.c +++ b/project/at_start_f415/examples/spi/halfduplex_transceiver_switch/src/at32f415_int.c @@ -147,28 +147,22 @@ void SysTick_Handler(void) */ void SPI1_IRQHandler(void) { - if(SPI1->ctrl2_bit.tdbeie != RESET) + if(spi_i2s_interrupt_flag_get(SPI1, SPI_I2S_TDBE_FLAG) != RESET) { - if(spi_i2s_flag_get(SPI1, SPI_I2S_TDBE_FLAG) != RESET) + spi_i2s_data_transmit(SPI1, spi1_tx_buffer[tx_index++]); + if(tx_index == BUFFERSIZE) { - spi_i2s_data_transmit(SPI1, spi1_tx_buffer[tx_index++]); - if(tx_index == BUFFERSIZE) - { - spi_i2s_interrupt_enable(SPI1, SPI_I2S_TDBE_INT, FALSE); - } + spi_i2s_interrupt_enable(SPI1, SPI_I2S_TDBE_INT, FALSE); } } - if(SPI1->ctrl2_bit.rdbfie != RESET) + if(spi_i2s_interrupt_flag_get(SPI1, SPI_I2S_RDBF_FLAG) != RESET) { - if(spi_i2s_flag_get(SPI1, SPI_I2S_RDBF_FLAG) != RESET) + spi_enable(SPI1, FALSE); + spi1_rx_buffer[rx_index++] = spi_i2s_data_receive(SPI1); + spi_enable(SPI1, TRUE); + if(rx_index == BUFFERSIZE) { - spi_enable(SPI1, FALSE); - spi1_rx_buffer[rx_index++] = spi_i2s_data_receive(SPI1); - spi_enable(SPI1, TRUE); - if(rx_index == BUFFERSIZE) - { - spi_i2s_interrupt_enable(SPI1, SPI_I2S_RDBF_INT, FALSE); - } + spi_i2s_interrupt_enable(SPI1, SPI_I2S_RDBF_INT, FALSE); } } } @@ -180,23 +174,17 @@ void SysTick_Handler(void) */ void SPI2_IRQHandler(void) { - if(SPI2->ctrl2_bit.tdbeie != RESET) + if(spi_i2s_interrupt_flag_get(SPI2, SPI_I2S_TDBE_FLAG) != RESET) { - if(spi_i2s_flag_get(SPI2, SPI_I2S_TDBE_FLAG) != RESET) + spi_i2s_data_transmit(SPI2, spi2_tx_buffer[tx_index++]); + if(tx_index == BUFFERSIZE) { - spi_i2s_data_transmit(SPI2, spi2_tx_buffer[tx_index++]); - if(tx_index == BUFFERSIZE) - { - spi_i2s_interrupt_enable(SPI2, SPI_I2S_TDBE_INT, FALSE); - } + spi_i2s_interrupt_enable(SPI2, SPI_I2S_TDBE_INT, FALSE); } } - if(SPI2->ctrl2_bit.rdbfie != RESET) + if(spi_i2s_interrupt_flag_get(SPI2, SPI_I2S_RDBF_FLAG) != RESET) { - if(spi_i2s_flag_get(SPI2, SPI_I2S_RDBF_FLAG) != RESET) - { - spi2_rx_buffer[rx_index++] = spi_i2s_data_receive(SPI2); - } + spi2_rx_buffer[rx_index++] = spi_i2s_data_receive(SPI2); } } diff --git a/project/at_start_f415/examples/tmr/dma/src/main.c b/project/at_start_f415/examples/tmr/dma/src/main.c index efb0d55..4ae8d06 100644 --- a/project/at_start_f415/examples/tmr/dma/src/main.c +++ b/project/at_start_f415/examples/tmr/dma/src/main.c @@ -129,7 +129,7 @@ int main(void) dma_init_struct.memory_base_addr = (uint32_t)src_buffer; dma_init_struct.memory_data_width = DMA_MEMORY_DATA_WIDTH_HALFWORD; dma_init_struct.memory_inc_enable = TRUE; - dma_init_struct.peripheral_base_addr = (uint32_t)0x40012C3C; + dma_init_struct.peripheral_base_addr = (uint32_t)&TMR1->c3dt; dma_init_struct.peripheral_data_width = DMA_PERIPHERAL_DATA_WIDTH_HALFWORD; dma_init_struct.peripheral_inc_enable = FALSE; dma_init_struct.priority = DMA_PRIORITY_MEDIUM; diff --git a/project/at_start_f415/examples/tmr/dma_burst/src/main.c b/project/at_start_f415/examples/tmr/dma_burst/src/main.c index 0c773ad..6c91ae6 100644 --- a/project/at_start_f415/examples/tmr/dma_burst/src/main.c +++ b/project/at_start_f415/examples/tmr/dma_burst/src/main.c @@ -110,7 +110,7 @@ int main(void) dma_init_struct.memory_base_addr = (uint32_t)src_buffer; dma_init_struct.memory_data_width = DMA_MEMORY_DATA_WIDTH_HALFWORD; dma_init_struct.memory_inc_enable = TRUE; - dma_init_struct.peripheral_base_addr = (uint32_t)0x40012C4C; + dma_init_struct.peripheral_base_addr = (uint32_t)&TMR1->dmadt; dma_init_struct.peripheral_data_width = DMA_PERIPHERAL_DATA_WIDTH_HALFWORD; dma_init_struct.peripheral_inc_enable = FALSE; dma_init_struct.priority = DMA_PRIORITY_MEDIUM; diff --git a/project/at_start_f415/examples/tmr/hall_xor_tmr2/src/main.c b/project/at_start_f415/examples/tmr/hall_xor_tmr2/src/main.c index 4c0844e..35c54ea 100644 --- a/project/at_start_f415/examples/tmr/hall_xor_tmr2/src/main.c +++ b/project/at_start_f415/examples/tmr/hall_xor_tmr2/src/main.c @@ -136,7 +136,7 @@ int main(void) */ void TMR2_GLOBAL_IRQHandler(void) { - if(tmr_flag_get(TMR2, TMR_TRIGGER_FLAG) != RESET) + if(tmr_interrupt_flag_get(TMR2, TMR_TRIGGER_FLAG) != RESET) { GPIOA->odt ^= GPIO_PINS_8; tmr_flag_clear(TMR2, TMR_TRIGGER_FLAG); diff --git a/project/at_start_f415/examples/tmr/input_capture/src/main.c b/project/at_start_f415/examples/tmr/input_capture/src/main.c index 8d68edc..1350c2f 100644 --- a/project/at_start_f415/examples/tmr/input_capture/src/main.c +++ b/project/at_start_f415/examples/tmr/input_capture/src/main.c @@ -50,7 +50,7 @@ __IO uint32_t capture = 0; */ void TMR3_GLOBAL_IRQHandler(void) { - if(tmr_flag_get(TMR3, TMR_C2_FLAG) != RESET) + if(tmr_interrupt_flag_get(TMR3, TMR_C2_FLAG) != RESET) { tmr_flag_clear(TMR3, TMR_C2_FLAG); if(capturenumber == 0) @@ -71,7 +71,7 @@ void TMR3_GLOBAL_IRQHandler(void) } else { - capture = ((0xFFFF - ch3readvalue1) + ch3readvalue2); + capture = ((0x10000 - ch3readvalue1) + ch3readvalue2); } /* frequency computation */ diff --git a/project/at_start_f415/examples/tmr/oc_high/src/at32f415_int.c b/project/at_start_f415/examples/tmr/oc_high/src/at32f415_int.c index 590878d..4382e1c 100644 --- a/project/at_start_f415/examples/tmr/oc_high/src/at32f415_int.c +++ b/project/at_start_f415/examples/tmr/oc_high/src/at32f415_int.c @@ -137,7 +137,7 @@ void SysTick_Handler(void) */ void TMR2_GLOBAL_IRQHandler(void) { - if(tmr_flag_get(TMR2, TMR_C1_FLAG) != RESET) + if(tmr_interrupt_flag_get(TMR2, TMR_C1_FLAG) != RESET) { /* clear tmr2 channel1 interrupt pending bit */ tmr_flag_clear(TMR2, TMR_C1_FLAG); @@ -145,7 +145,7 @@ void TMR2_GLOBAL_IRQHandler(void) /* pc.06 turnoff after 1000 ms */ gpio_bits_reset(GPIOC, GPIO_PINS_6); } - else if(tmr_flag_get(TMR2, TMR_C2_FLAG) != RESET) + else if(tmr_interrupt_flag_get(TMR2, TMR_C2_FLAG) != RESET) { /* clear tmr2 channel2 interrupt pending bit */ tmr_flag_clear(TMR2, TMR_C2_FLAG); @@ -153,7 +153,7 @@ void TMR2_GLOBAL_IRQHandler(void) /* pc.07 turnoff after 500 ms */ gpio_bits_reset(GPIOC, GPIO_PINS_7); } - else if(tmr_flag_get(TMR2, TMR_C3_FLAG) != RESET) + else if(tmr_interrupt_flag_get(TMR2, TMR_C3_FLAG) != RESET) { /* clear tmr2 channel3 interrupt pending bit */ tmr_flag_clear(TMR2, TMR_C3_FLAG); diff --git a/project/at_start_f415/examples/tmr/oc_low/src/at32f415_int.c b/project/at_start_f415/examples/tmr/oc_low/src/at32f415_int.c index efae47a..bc604f7 100644 --- a/project/at_start_f415/examples/tmr/oc_low/src/at32f415_int.c +++ b/project/at_start_f415/examples/tmr/oc_low/src/at32f415_int.c @@ -137,7 +137,7 @@ void SysTick_Handler(void) */ void TMR2_GLOBAL_IRQHandler(void) { - if(tmr_flag_get(TMR2, TMR_C1_FLAG) != RESET) + if(tmr_interrupt_flag_get(TMR2, TMR_C1_FLAG) != RESET) { /* clear tmr2 channel1 interrupt pending bit */ tmr_flag_clear(TMR2, TMR_C1_FLAG); @@ -145,7 +145,7 @@ void TMR2_GLOBAL_IRQHandler(void) /* pc.06 turnoff after 1000 ms */ gpio_bits_reset(GPIOC, GPIO_PINS_6); } - else if(tmr_flag_get(TMR2, TMR_C2_FLAG) != RESET) + else if(tmr_interrupt_flag_get(TMR2, TMR_C2_FLAG) != RESET) { /* clear tmr2 channel2 interrupt pending bit */ tmr_flag_clear(TMR2, TMR_C2_FLAG); @@ -153,7 +153,7 @@ void TMR2_GLOBAL_IRQHandler(void) /* pc.07 turnoff after 500 ms */ gpio_bits_reset(GPIOC, GPIO_PINS_7); } - else if(tmr_flag_get(TMR2, TMR_C3_FLAG) != RESET) + else if(tmr_interrupt_flag_get(TMR2, TMR_C3_FLAG) != RESET) { /* clear tmr2 channel3 interrupt pending bit */ tmr_flag_clear(TMR2, TMR_C3_FLAG); diff --git a/project/at_start_f415/examples/tmr/oc_toggle_tmr3/src/at32f415_int.c b/project/at_start_f415/examples/tmr/oc_toggle_tmr3/src/at32f415_int.c index d44d7f8..762d5e9 100644 --- a/project/at_start_f415/examples/tmr/oc_toggle_tmr3/src/at32f415_int.c +++ b/project/at_start_f415/examples/tmr/oc_toggle_tmr3/src/at32f415_int.c @@ -145,7 +145,7 @@ void SysTick_Handler(void) void TMR3_GLOBAL_IRQHandler(void) { /* TMR3_CH1 toggling with frequency = 183.1 Hz */ - if(tmr_flag_get(TMR3, TMR_C1_FLAG) != RESET) + if(tmr_interrupt_flag_get(TMR3, TMR_C1_FLAG) != RESET) { tmr_flag_clear(TMR3, TMR_C1_FLAG ); capture = tmr_channel_value_get(TMR3, TMR_SELECT_CHANNEL_1); @@ -153,7 +153,7 @@ void TMR3_GLOBAL_IRQHandler(void) } /* TMR3_CH2 toggling with frequency = 366.2 Hz */ - if(tmr_flag_get(TMR3, TMR_C2_FLAG) != RESET) + if(tmr_interrupt_flag_get(TMR3, TMR_C2_FLAG) != RESET) { tmr_flag_clear(TMR3, TMR_C2_FLAG); capture = tmr_channel_value_get(TMR3, TMR_SELECT_CHANNEL_2); @@ -161,7 +161,7 @@ void TMR3_GLOBAL_IRQHandler(void) } /* TMR3_CH3 toggling with frequency = 732.4 Hz */ - if(tmr_flag_get(TMR3, TMR_C3_FLAG) != RESET) + if(tmr_interrupt_flag_get(TMR3, TMR_C3_FLAG) != RESET) { tmr_flag_clear(TMR3, TMR_C3_FLAG); capture = tmr_channel_value_get(TMR3, TMR_SELECT_CHANNEL_3); @@ -169,7 +169,7 @@ void TMR3_GLOBAL_IRQHandler(void) } /* TMR3_CH4 toggling with frequency = 1464.8 Hz */ - if(tmr_flag_get(TMR3, TMR_C4_FLAG) != RESET) + if(tmr_interrupt_flag_get(TMR3, TMR_C4_FLAG) != RESET) { tmr_flag_clear(TMR3, TMR_C4_FLAG); capture = tmr_channel_value_get(TMR3, TMR_SELECT_CHANNEL_4); diff --git a/project/at_start_f415/examples/tmr/oc_toggle_tmr9/src/at32f415_int.c b/project/at_start_f415/examples/tmr/oc_toggle_tmr9/src/at32f415_int.c index 8d6de78..2da758a 100644 --- a/project/at_start_f415/examples/tmr/oc_toggle_tmr9/src/at32f415_int.c +++ b/project/at_start_f415/examples/tmr/oc_toggle_tmr9/src/at32f415_int.c @@ -143,7 +143,7 @@ void SysTick_Handler(void) void TMR1_BRK_TMR9_IRQHandler(void) { /* TMR9_CH1 toggling with frequency = 366.2 Hz */ - if(tmr_flag_get(TMR9, TMR_C1_FLAG) != RESET) + if(tmr_interrupt_flag_get(TMR9, TMR_C1_FLAG) != RESET) { tmr_flag_clear(TMR9, TMR_C1_FLAG ); capture = tmr_channel_value_get(TMR9, TMR_SELECT_CHANNEL_1); @@ -151,7 +151,7 @@ void TMR1_BRK_TMR9_IRQHandler(void) } /* TMR9_CH2 toggling with frequency = 732.4 Hz */ - if(tmr_flag_get(TMR9, TMR_C2_FLAG) != RESET) + if(tmr_interrupt_flag_get(TMR9, TMR_C2_FLAG) != RESET) { tmr_flag_clear(TMR9, TMR_C2_FLAG); capture = tmr_channel_value_get(TMR9, TMR_SELECT_CHANNEL_2); diff --git a/project/at_start_f415/examples/tmr/pwm_input_dma/src/main.c b/project/at_start_f415/examples/tmr/pwm_input_dma/src/main.c index 6f67bc7..f93b254 100644 --- a/project/at_start_f415/examples/tmr/pwm_input_dma/src/main.c +++ b/project/at_start_f415/examples/tmr/pwm_input_dma/src/main.c @@ -33,9 +33,6 @@ * @{ */ -#define TMR1_C1DT_ADDRESS 0x40012C34 -#define TMR1_C2DT_ADDRESS 0x40012C38 - #define SAMPLING_NUM 1000 tmr_input_config_type tmr_ic_init_structure; @@ -132,7 +129,7 @@ int main(void) dma_reset(DMA1_CHANNEL2); dma_default_para_init(&dma_init_structure); - dma_init_structure.peripheral_base_addr = (uint32_t)TMR1_C1DT_ADDRESS; + dma_init_structure.peripheral_base_addr = (uint32_t)&TMR1->c1dt; dma_init_structure.memory_base_addr = (uint32_t)buffer_ch1; dma_init_structure.direction = DMA_DIR_PERIPHERAL_TO_MEMORY; dma_init_structure.buffer_size = SAMPLING_NUM; @@ -145,7 +142,7 @@ int main(void) dma_init(DMA1_CHANNEL2, &dma_init_structure); dma_reset(DMA1_CHANNEL3); - dma_init_structure.peripheral_base_addr = (uint32_t)TMR1_C2DT_ADDRESS; + dma_init_structure.peripheral_base_addr = (uint32_t)&TMR1->c2dt; dma_init_structure.memory_base_addr = (uint32_t)buffer_ch2; dma_init(DMA1_CHANNEL3, &dma_init_structure); diff --git a/project/at_start_f415/examples/tmr/pwm_output_simulate/src/at32f415_int.c b/project/at_start_f415/examples/tmr/pwm_output_simulate/src/at32f415_int.c index a6a6013..cefddf8 100644 --- a/project/at_start_f415/examples/tmr/pwm_output_simulate/src/at32f415_int.c +++ b/project/at_start_f415/examples/tmr/pwm_output_simulate/src/at32f415_int.c @@ -139,7 +139,7 @@ void SysTick_Handler(void) void TMR2_GLOBAL_IRQHandler(void) { - if(tmr_flag_get(TMR2, TMR_C1_FLAG) != RESET) + if(tmr_interrupt_flag_get(TMR2, TMR_C1_FLAG) != RESET) { tmr_flag_clear(TMR2, TMR_C1_FLAG ); @@ -148,7 +148,7 @@ void TMR2_GLOBAL_IRQHandler(void) capture = tmr_channel_value_get(TMR2, TMR_SELECT_CHANNEL_1); tmr_channel_value_set(TMR2, TMR_SELECT_CHANNEL_1, capture + ch1_val); } - else if(tmr_flag_get(TMR2, TMR_C2_FLAG) != RESET) + else if(tmr_interrupt_flag_get(TMR2, TMR_C2_FLAG) != RESET) { tmr_flag_clear(TMR2, TMR_C2_FLAG); @@ -157,7 +157,7 @@ void TMR2_GLOBAL_IRQHandler(void) capture = tmr_channel_value_get(TMR2, TMR_SELECT_CHANNEL_2); tmr_channel_value_set(TMR2, TMR_SELECT_CHANNEL_2, capture + ch2_val); } - else if(tmr_flag_get(TMR2, TMR_C3_FLAG) != RESET) + else if(tmr_interrupt_flag_get(TMR2, TMR_C3_FLAG) != RESET) { tmr_flag_clear(TMR2, TMR_C3_FLAG); diff --git a/project/at_start_f415/examples/tmr/timer_base/src/main.c b/project/at_start_f415/examples/tmr/timer_base/src/main.c index d84d674..400d632 100644 --- a/project/at_start_f415/examples/tmr/timer_base/src/main.c +++ b/project/at_start_f415/examples/tmr/timer_base/src/main.c @@ -67,7 +67,7 @@ void clkout_config(void) */ void TMR1_OVF_TMR10_IRQHandler(void) { - if(tmr_flag_get(TMR1, TMR_OVF_FLAG) != RESET) + if(tmr_interrupt_flag_get(TMR1, TMR_OVF_FLAG) != RESET) { /* add user code... */ at32_led_toggle(LED3); diff --git a/project/at_start_f415/examples/usart/idle_detection/src/at32f415_int.c b/project/at_start_f415/examples/usart/idle_detection/src/at32f415_int.c index d0bd99f..adea129 100644 --- a/project/at_start_f415/examples/usart/idle_detection/src/at32f415_int.c +++ b/project/at_start_f415/examples/usart/idle_detection/src/at32f415_int.c @@ -138,7 +138,7 @@ void SysTick_Handler(void) */ void USART2_IRQHandler(void) { - if(usart_flag_get(USART2, USART_IDLEF_FLAG)) + if(usart_interrupt_flag_get(USART2, USART_IDLEF_FLAG)) { usart_data_receive(USART2); at32_led_on(LED2); diff --git a/project/at_start_f415/examples/usart/interrupt/src/at32f415_int.c b/project/at_start_f415/examples/usart/interrupt/src/at32f415_int.c index 0bbc955..a5ffa57 100644 --- a/project/at_start_f415/examples/usart/interrupt/src/at32f415_int.c +++ b/project/at_start_f415/examples/usart/interrupt/src/at32f415_int.c @@ -148,33 +148,27 @@ void SysTick_Handler(void) */ void USART2_IRQHandler(void) { - if(USART2->ctrl1_bit.rdbfien != RESET) + if(usart_interrupt_flag_get(USART2, USART_RDBF_FLAG) != RESET) { - if(usart_flag_get(USART2, USART_RDBF_FLAG) != RESET) - { - /* read one byte from the receive data register */ - usart2_rx_buffer[usart2_rx_counter++] = usart_data_receive(USART2); + /* read one byte from the receive data register */ + usart2_rx_buffer[usart2_rx_counter++] = usart_data_receive(USART2); - if(usart2_rx_counter == usart3_tx_buffer_size) - { - /* disable the usart2 receive interrupt */ - usart_interrupt_enable(USART2, USART_RDBF_INT, FALSE); - } + if(usart2_rx_counter == usart3_tx_buffer_size) + { + /* disable the usart2 receive interrupt */ + usart_interrupt_enable(USART2, USART_RDBF_INT, FALSE); } } - - if(USART2->ctrl1_bit.tdbeien != RESET) - { - if(usart_flag_get(USART2, USART_TDBE_FLAG) != RESET) - { - /* write one byte to the transmit data register */ - usart_data_transmit(USART2, usart2_tx_buffer[usart2_tx_counter++]); - if(usart2_tx_counter == usart2_tx_buffer_size) - { - /* disable the usart2 transmit interrupt */ - usart_interrupt_enable(USART2, USART_TDBE_INT, FALSE); - } + if(usart_interrupt_flag_get(USART2, USART_TDBE_FLAG) != RESET) + { + /* write one byte to the transmit data register */ + usart_data_transmit(USART2, usart2_tx_buffer[usart2_tx_counter++]); + + if(usart2_tx_counter == usart2_tx_buffer_size) + { + /* disable the usart2 transmit interrupt */ + usart_interrupt_enable(USART2, USART_TDBE_INT, FALSE); } } } @@ -186,33 +180,27 @@ void USART2_IRQHandler(void) */ void USART3_IRQHandler(void) { - if(USART3->ctrl1_bit.rdbfien != RESET) + if(usart_interrupt_flag_get(USART3, USART_RDBF_FLAG) != RESET) { - if(usart_flag_get(USART3, USART_RDBF_FLAG) != RESET) - { - /* read one byte from the receive data register */ - usart3_rx_buffer[usart3_rx_counter++] = usart_data_receive(USART3); + /* read one byte from the receive data register */ + usart3_rx_buffer[usart3_rx_counter++] = usart_data_receive(USART3); - if(usart3_rx_counter == usart2_tx_buffer_size) - { - /* disable the usart3 receive interrupt */ - usart_interrupt_enable(USART3, USART_RDBF_INT, FALSE); - } + if(usart3_rx_counter == usart2_tx_buffer_size) + { + /* disable the usart3 receive interrupt */ + usart_interrupt_enable(USART3, USART_RDBF_INT, FALSE); } } - - if(USART3->ctrl1_bit.tdbeien != RESET) - { - if(usart_flag_get(USART3, USART_TDBE_FLAG) != RESET) - { - /* write one byte to the transmit data register */ - usart_data_transmit(USART3, usart3_tx_buffer[usart3_tx_counter++]); - if(usart3_tx_counter == usart3_tx_buffer_size) - { - /* disable the usart3 transmit interrupt */ - usart_interrupt_enable(USART3, USART_TDBE_INT, FALSE); - } + if(usart_interrupt_flag_get(USART3, USART_TDBE_FLAG) != RESET) + { + /* write one byte to the transmit data register */ + usart_data_transmit(USART3, usart3_tx_buffer[usart3_tx_counter++]); + + if(usart3_tx_counter == usart3_tx_buffer_size) + { + /* disable the usart3 transmit interrupt */ + usart_interrupt_enable(USART3, USART_TDBE_INT, FALSE); } } } diff --git a/project/at_start_f415/examples/usart/receiver_mute/src/at32f415_int.c b/project/at_start_f415/examples/usart/receiver_mute/src/at32f415_int.c index 8168dbb..3ce901a 100644 --- a/project/at_start_f415/examples/usart/receiver_mute/src/at32f415_int.c +++ b/project/at_start_f415/examples/usart/receiver_mute/src/at32f415_int.c @@ -140,7 +140,7 @@ void SysTick_Handler(void) */ void USART3_IRQHandler(void) { - if(usart_flag_get(USART3, USART_RDBF_FLAG) != RESET) + if(usart_interrupt_flag_get(USART3, USART_RDBF_FLAG) != RESET) { usart3_rx_buffer[rx_counter++] = usart_data_receive(USART3); } diff --git a/project/at_start_f415/examples/usart/rs485/src/main.c b/project/at_start_f415/examples/usart/rs485/src/main.c index d0cf8b8..39eaaec 100644 --- a/project/at_start_f415/examples/usart/rs485/src/main.c +++ b/project/at_start_f415/examples/usart/rs485/src/main.c @@ -37,7 +37,7 @@ #define RS485_BUFFER_SIZE 128 uint8_t rs485_buffer_rx[RS485_BUFFER_SIZE]; -uint8_t rs485_buffer_rx_cnt = 0; +uint8_t rs485_buffer_rx_cnt = 0; /** * @brief rs485 configiguration. @@ -61,29 +61,29 @@ static void rs485_config(void) gpio_init_struct.gpio_pins = GPIO_PINS_2; gpio_init_struct.gpio_pull = GPIO_PULL_NONE; gpio_init(GPIOA, &gpio_init_struct); - + gpio_init_struct.gpio_pins = GPIO_PINS_3; gpio_init_struct.gpio_mode = GPIO_MODE_INPUT; gpio_init_struct.gpio_pull = GPIO_PULL_UP; gpio_init(GPIOA, &gpio_init_struct); - + gpio_init_struct.gpio_pins = GPIO_PINS_1; gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT; gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL; gpio_init(GPIOA, &gpio_init_struct); - + gpio_bits_reset(GPIOA, GPIO_PINS_1); - + /* configure uart2 param */ usart_init(USART2, RS485_BAUDRATE, USART_DATA_8BITS, USART_STOP_1_BIT); - + usart_flag_clear(USART2, USART_RDBF_FLAG); usart_interrupt_enable(USART2, USART_RDBF_INT, TRUE); - + usart_receiver_enable(USART2, TRUE); usart_transmitter_enable(USART2, TRUE); usart_enable(USART2, TRUE); - + nvic_irq_enable(USART2_IRQn, 1, 0); } @@ -113,13 +113,13 @@ int main(void) { char str[]="start test..\r\n"; u8 len = 0; - + system_clock_config(); at32_board_init(); nvic_priority_group_config(NVIC_PRIORITY_GROUP_4); - + rs485_config(); - + len = sizeof(str); rs485_send_data((u8*)str, len); while(1) @@ -131,7 +131,7 @@ int main(void) rs485_send_data(rs485_buffer_rx, rs485_buffer_rx_cnt); rs485_buffer_rx_cnt = 0; usart_interrupt_enable(USART2, USART_RDBF_INT, TRUE); - } + } } } @@ -143,8 +143,8 @@ int main(void) void USART2_IRQHandler(void) { uint16_t tmp; - - if(usart_flag_get(USART2, USART_RDBF_FLAG) != RESET) + + if(usart_interrupt_flag_get(USART2, USART_RDBF_FLAG) != RESET) { tmp = usart_data_receive(USART2); if(rs485_buffer_rx_cnt < RS485_BUFFER_SIZE) diff --git a/project/at_start_f415/examples/usart/smartcard/src/at32f415_int.c b/project/at_start_f415/examples/usart/smartcard/src/at32f415_int.c index 8217fd2..758fa03 100644 --- a/project/at_start_f415/examples/usart/smartcard/src/at32f415_int.c +++ b/project/at_start_f415/examples/usart/smartcard/src/at32f415_int.c @@ -164,7 +164,7 @@ void EXINT9_5_IRQHandler(void) void SC_USART_IRQHandler(void) { /* if the sc_usart detects a parity error */ - if(usart_flag_get(SC_USART, USART_PERR_FLAG) != RESET) + if(usart_interrupt_flag_get(SC_USART, USART_PERR_FLAG) != RESET) { /* enable sc_usart rdbf interrupt (until receiving the corrupted byte) */ usart_interrupt_enable(SC_USART, USART_RDBF_INT, TRUE); @@ -172,7 +172,7 @@ void SC_USART_IRQHandler(void) usart_data_receive(SC_USART); } - if(usart_flag_get(SC_USART, USART_RDBF_FLAG) != RESET) + if(usart_interrupt_flag_get(SC_USART, USART_RDBF_FLAG) != RESET) { /* disable sc_usart rdbf interrupt */ usart_interrupt_enable(SC_USART, USART_RDBF_INT, FALSE); diff --git a/project/at_start_f415/examples/usart/transfer_by_dma_interrupt/src/at32f415_int.c b/project/at_start_f415/examples/usart/transfer_by_dma_interrupt/src/at32f415_int.c index ddeec91..f9d4932 100644 --- a/project/at_start_f415/examples/usart/transfer_by_dma_interrupt/src/at32f415_int.c +++ b/project/at_start_f415/examples/usart/transfer_by_dma_interrupt/src/at32f415_int.c @@ -142,7 +142,7 @@ void SysTick_Handler(void) */ void DMA1_Channel1_IRQHandler(void) { - if(dma_flag_get(DMA1_FDT1_FLAG)) + if(dma_interrupt_flag_get(DMA1_FDT1_FLAG)) { usart2_tx_dma_status = 1; dma_flag_clear(DMA1_FDT1_FLAG); @@ -157,7 +157,7 @@ void DMA1_Channel1_IRQHandler(void) */ void DMA1_Channel2_IRQHandler(void) { - if(dma_flag_get(DMA1_FDT2_FLAG)) + if(dma_interrupt_flag_get(DMA1_FDT2_FLAG)) { usart2_rx_dma_status = 1; dma_flag_clear(DMA1_FDT2_FLAG); @@ -172,7 +172,7 @@ void DMA1_Channel2_IRQHandler(void) */ void DMA1_Channel3_IRQHandler(void) { - if(dma_flag_get(DMA1_FDT3_FLAG)) + if(dma_interrupt_flag_get(DMA1_FDT3_FLAG)) { usart3_tx_dma_status = 1; dma_flag_clear(DMA1_FDT3_FLAG); @@ -187,7 +187,7 @@ void DMA1_Channel3_IRQHandler(void) */ void DMA1_Channel4_IRQHandler(void) { - if(dma_flag_get(DMA1_FDT4_FLAG)) + if(dma_interrupt_flag_get(DMA1_FDT4_FLAG)) { usart3_rx_dma_status = 1; dma_flag_clear(DMA1_FDT4_FLAG); diff --git a/project/at_start_f415/examples/usb_device/audio/src/audio_codec.c b/project/at_start_f415/examples/usb_device/audio/src/audio_codec.c index 1c1a247..d46c20a 100644 --- a/project/at_start_f415/examples/usb_device/audio/src/audio_codec.c +++ b/project/at_start_f415/examples/usb_device/audio/src/audio_codec.c @@ -205,6 +205,10 @@ void audio_codec_set_mic_volume(uint16_t volume) { /* wm8988 adc have 256 steps */ audio_codec.mic_volume = volume; + if(audio_codec.mic_volume > 0xFF) + { + audio_codec.mic_volume = 0xFF; + } } /** @@ -651,13 +655,13 @@ void DMA1_Channel3_IRQHandler(void) uint16_t half_size = audio_codec.spk_tx_size; uint16_t *pdst; - if(dma_flag_get(DMA1_HDT3_FLAG) == SET) + if(dma_interrupt_flag_get(DMA1_HDT3_FLAG) == SET) { //copy_buff(audio_codec.spk_buffer, audio_codec.spk_tx_fifo + audio_codec.r_pos, half_size); pdst = spk_dma_buffer; dma_flag_clear(DMA1_HDT3_FLAG); } - else if(dma_flag_get(DMA1_FDT3_FLAG) == SET) + else if(dma_interrupt_flag_get(DMA1_FDT3_FLAG) == SET) { //copy_buff(&audio_codec.spk_buffer[half_size], audio_codec.spk_tx_fifo + audio_codec.r_pos, half_size); pdst = spk_dma_buffer + half_size; @@ -726,12 +730,12 @@ void DMA1_Channel4_IRQHandler(void) uint16_t *psrc; uint16_t len = audio_codec.mic_rx_size << 1; - if(dma_flag_get(DMA1_HDT4_FLAG) == SET) + if(dma_interrupt_flag_get(DMA1_HDT4_FLAG) == SET) { dma_flag_clear(DMA1_HDT4_FLAG); psrc = mic_dma_buffer; } - else if(dma_flag_get(DMA1_FDT4_FLAG) == SET) + else if(dma_interrupt_flag_get(DMA1_FDT4_FLAG) == SET) { psrc = mic_dma_buffer + audio_codec.mic_rx_size; dma_flag_clear(DMA1_FDT4_FLAG); @@ -949,7 +953,3 @@ error_status audio_codec_loop(void) /** * @} */ - - - - diff --git a/project/at_start_f415/examples/usb_device/composite_audio_hid/src/audio_codec.c b/project/at_start_f415/examples/usb_device/composite_audio_hid/src/audio_codec.c index 50607f4..f6a161a 100644 --- a/project/at_start_f415/examples/usb_device/composite_audio_hid/src/audio_codec.c +++ b/project/at_start_f415/examples/usb_device/composite_audio_hid/src/audio_codec.c @@ -205,6 +205,10 @@ void audio_codec_set_mic_volume(uint16_t volume) { /* wm8988 adc have 256 steps */ audio_codec.mic_volume = volume; + if(audio_codec.mic_volume > 0xFF) + { + audio_codec.mic_volume = 0xFF; + } } /** @@ -651,13 +655,13 @@ void DMA1_Channel3_IRQHandler(void) uint16_t half_size = audio_codec.spk_tx_size; uint16_t *pdst; - if(dma_flag_get(DMA1_HDT3_FLAG) == SET) + if(dma_interrupt_flag_get(DMA1_HDT3_FLAG) == SET) { //copy_buff(audio_codec.spk_buffer, audio_codec.spk_tx_fifo + audio_codec.r_pos, half_size); pdst = spk_dma_buffer; dma_flag_clear(DMA1_HDT3_FLAG); } - else if(dma_flag_get(DMA1_FDT3_FLAG) == SET) + else if(dma_interrupt_flag_get(DMA1_FDT3_FLAG) == SET) { //copy_buff(&audio_codec.spk_buffer[half_size], audio_codec.spk_tx_fifo + audio_codec.r_pos, half_size); pdst = spk_dma_buffer + half_size; @@ -726,12 +730,12 @@ void DMA1_Channel4_IRQHandler(void) uint16_t *psrc; uint16_t len = audio_codec.mic_rx_size << 1; - if(dma_flag_get(DMA1_HDT4_FLAG) == SET) + if(dma_interrupt_flag_get(DMA1_HDT4_FLAG) == SET) { dma_flag_clear(DMA1_HDT4_FLAG); psrc = mic_dma_buffer; } - else if(dma_flag_get(DMA1_FDT4_FLAG) == SET) + else if(dma_interrupt_flag_get(DMA1_FDT4_FLAG) == SET) { psrc = mic_dma_buffer + audio_codec.mic_rx_size; dma_flag_clear(DMA1_FDT4_FLAG); @@ -949,7 +953,3 @@ error_status audio_codec_loop(void) /** * @} */ - - - - diff --git a/project/at_start_f415/examples/usb_device/virtual_comport/src/main.c b/project/at_start_f415/examples/usb_device/virtual_comport/src/main.c index 75b8cc6..508af90 100644 --- a/project/at_start_f415/examples/usb_device/virtual_comport/src/main.c +++ b/project/at_start_f415/examples/usb_device/virtual_comport/src/main.c @@ -229,7 +229,7 @@ uint16_t usart_receive_data(void) */ void USART2_IRQHandler(void) { - if(usart_flag_get(USART2, USART_RDBF_FLAG) != RESET) + if(usart_interrupt_flag_get(USART2, USART_RDBF_FLAG) != RESET) { /* read one byte from the receive data register */ usart_rx_buffer[hw_usart_rx_index] = usart_data_receive(USART2); @@ -288,7 +288,7 @@ void usb_usart_config( linecoding_type linecoding) default : break; } - + if(USART_PARITY_NONE == usart_parity_select) { /* data bits */ @@ -307,7 +307,7 @@ void usb_usart_config( linecoding_type linecoding) break; default : break; - } + } } else { @@ -329,7 +329,7 @@ void usb_usart_config( linecoding_type linecoding) break; default : break; - } + } } nvic_irq_enable(USART2_IRQn, 0, 0); diff --git a/project/at_start_f415/examples/usb_device/winusb/inc/at32f415_clock.h b/project/at_start_f415/examples/usb_device/winusb/inc/at32f415_clock.h new file mode 100644 index 0000000..6c89b15 --- /dev/null +++ b/project/at_start_f415/examples/usb_device/winusb/inc/at32f415_clock.h @@ -0,0 +1,44 @@ +/** + ************************************************************************** + * @file at32f415_clock.h + * @brief header file of clock program + ************************************************************************** + * Copyright notice & Disclaimer + * + * The software Board Support Package (BSP) that is made available to + * download from Artery official website is the copyrighted work of Artery. + * Artery authorizes customers to use, copy, and distribute the BSP + * software and its related documentation for the purpose of design and + * development in conjunction with Artery microcontrollers. Use of the + * software is governed by this copyright notice and the following disclaimer. + * + * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, + * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, + * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR + * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, + * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. + * + ************************************************************************** + */ + +/* define to prevent recursive inclusion -------------------------------------*/ +#ifndef __AT32F415_CLOCK_H +#define __AT32F415_CLOCK_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* includes ------------------------------------------------------------------*/ +#include "at32f415.h" + +/* exported functions ------------------------------------------------------- */ +void system_clock_config(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __AT32F415_CLOCK_H */ + diff --git a/project/at_start_f415/examples/usb_device/winusb/inc/at32f415_conf.h b/project/at_start_f415/examples/usb_device/winusb/inc/at32f415_conf.h new file mode 100644 index 0000000..4f2af1b --- /dev/null +++ b/project/at_start_f415/examples/usb_device/winusb/inc/at32f415_conf.h @@ -0,0 +1,145 @@ +/** + ************************************************************************** + * @file at32f415_conf.h + * @brief at32f415 config header file + ************************************************************************** + * Copyright notice & Disclaimer + * + * The software Board Support Package (BSP) that is made available to + * download from Artery official website is the copyrighted work of Artery. + * Artery authorizes customers to use, copy, and distribute the BSP + * software and its related documentation for the purpose of design and + * development in conjunction with Artery microcontrollers. Use of the + * software is governed by this copyright notice and the following disclaimer. + * + * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, + * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, + * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR + * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, + * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. + * + ************************************************************************** + */ + +/* define to prevent recursive inclusion -------------------------------------*/ +#ifndef __AT32F415_CONF_H +#define __AT32F415_CONF_H + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief in the following line adjust the value of high speed external crystal (hext) + * used in your application + * tip: to avoid modifying this file each time you need to use different hext, you + * can define the hext value in your toolchain compiler preprocessor. + */ +#if !defined HEXT_VALUE +#define HEXT_VALUE ((uint32_t)8000000) /*!< value of the high speed external crystal in hz */ +#endif + +/** + * @brief in the following line adjust the high speed external crystal (hext) startup + * timeout value + */ +#define HEXT_STARTUP_TIMEOUT ((uint16_t)0x3000) /*!< time out for hext start up */ +#define HICK_VALUE ((uint32_t)8000000) /*!< value of the high speed internal clock in hz */ +#define LEXT_VALUE ((uint32_t)32768) /*!< value of the low speed external clock in hz */ + +/* module define -------------------------------------------------------------*/ +#define CRM_MODULE_ENABLED +#define CMP_MODULE_ENABLED +#define TMR_MODULE_ENABLED +#define ERTC_MODULE_ENABLED +#define GPIO_MODULE_ENABLED +#define I2C_MODULE_ENABLED +#define USART_MODULE_ENABLED +#define PWC_MODULE_ENABLED +#define CAN_MODULE_ENABLED +#define ADC_MODULE_ENABLED +#define SPI_MODULE_ENABLED +#define DMA_MODULE_ENABLED +#define DEBUG_MODULE_ENABLED +#define FLASH_MODULE_ENABLED +#define CRC_MODULE_ENABLED +#define WWDT_MODULE_ENABLED +#define WDT_MODULE_ENABLED +#define EXINT_MODULE_ENABLED +#define SDIO_MODULE_ENABLED +#define USB_MODULE_ENABLED +#define MISC_MODULE_ENABLED + +/* includes ------------------------------------------------------------------*/ +#ifdef CRM_MODULE_ENABLED +#include "at32f415_crm.h" +#endif +#ifdef CMP_MODULE_ENABLED +#include "at32f415_cmp.h" +#endif +#ifdef TMR_MODULE_ENABLED +#include "at32f415_tmr.h" +#endif +#ifdef ERTC_MODULE_ENABLED +#include "at32f415_ertc.h" +#endif +#ifdef GPIO_MODULE_ENABLED +#include "at32f415_gpio.h" +#endif +#ifdef I2C_MODULE_ENABLED +#include "at32f415_i2c.h" +#endif +#ifdef USART_MODULE_ENABLED +#include "at32f415_usart.h" +#endif +#ifdef PWC_MODULE_ENABLED +#include "at32f415_pwc.h" +#endif +#ifdef CAN_MODULE_ENABLED +#include "at32f415_can.h" +#endif +#ifdef ADC_MODULE_ENABLED +#include "at32f415_adc.h" +#endif +#ifdef SPI_MODULE_ENABLED +#include "at32f415_spi.h" +#endif +#ifdef DMA_MODULE_ENABLED +#include "at32f415_dma.h" +#endif +#ifdef DEBUG_MODULE_ENABLED +#include "at32f415_debug.h" +#endif +#ifdef FLASH_MODULE_ENABLED +#include "at32f415_flash.h" +#endif +#ifdef CRC_MODULE_ENABLED +#include "at32f415_crc.h" +#endif +#ifdef WWDT_MODULE_ENABLED +#include "at32f415_wwdt.h" +#endif +#ifdef WDT_MODULE_ENABLED +#include "at32f415_wdt.h" +#endif +#ifdef EXINT_MODULE_ENABLED +#include "at32f415_exint.h" +#endif +#ifdef SDIO_MODULE_ENABLED +#include "at32f415_sdio.h" +#endif +#ifdef MISC_MODULE_ENABLED +#include "at32f415_misc.h" +#endif +#ifdef USB_MODULE_ENABLED +#include "at32f415_usb.h" +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* __AT32F415_CONF_H */ + + diff --git a/project/at_start_f415/examples/usb_device/winusb/inc/at32f415_int.h b/project/at_start_f415/examples/usb_device/winusb/inc/at32f415_int.h new file mode 100644 index 0000000..7d7df58 --- /dev/null +++ b/project/at_start_f415/examples/usb_device/winusb/inc/at32f415_int.h @@ -0,0 +1,56 @@ +/** + ************************************************************************** + * @file at32f415_int.h + * @brief header file of main interrupt service routines. + ************************************************************************** + * Copyright notice & Disclaimer + * + * The software Board Support Package (BSP) that is made available to + * download from Artery official website is the copyrighted work of Artery. + * Artery authorizes customers to use, copy, and distribute the BSP + * software and its related documentation for the purpose of design and + * development in conjunction with Artery microcontrollers. Use of the + * software is governed by this copyright notice and the following disclaimer. + * + * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, + * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, + * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR + * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, + * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. + * + ************************************************************************** + */ + +/* define to prevent recursive inclusion -------------------------------------*/ +#ifndef __AT32F415_INT_H +#define __AT32F415_INT_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* includes ------------------------------------------------------------------*/ +#include "at32f415.h" + +/* exported types ------------------------------------------------------------*/ +/* exported constants --------------------------------------------------------*/ +/* exported macro ------------------------------------------------------------*/ +/* exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/project/at_start_f415/examples/usb_device/winusb/inc/usb_conf.h b/project/at_start_f415/examples/usb_device/winusb/inc/usb_conf.h new file mode 100644 index 0000000..01af183 --- /dev/null +++ b/project/at_start_f415/examples/usb_device/winusb/inc/usb_conf.h @@ -0,0 +1,152 @@ +/** + ************************************************************************** + * @file usb_conf.h + * @brief usb config header file + ************************************************************************** + * Copyright notice & Disclaimer + * + * The software Board Support Package (BSP) that is made available to + * download from Artery official website is the copyrighted work of Artery. + * Artery authorizes customers to use, copy, and distribute the BSP + * software and its related documentation for the purpose of design and + * development in conjunction with Artery microcontrollers. Use of the + * software is governed by this copyright notice and the following disclaimer. + * + * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, + * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, + * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR + * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, + * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. + * + ************************************************************************** + */ + +/* define to prevent recursive inclusion -------------------------------------*/ +#ifndef __USB_CONF_H +#define __USB_CONF_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "at32f415_usb.h" +#include "at32f415.h" +#include "stdio.h" + +/** @addtogroup AT32F415_periph_examples + * @{ + */ + +/** @addtogroup 415_USB_device_winusb + * @{ + */ + +/** + * @brief enable usb device mode + */ +#define USE_OTG_DEVICE_MODE + +/** + * @brief enable usb host mode + */ +/* #define USE_OTG_HOST_MODE */ + +#define USB_ID 0 +#define OTG_CLOCK CRM_OTGFS1_PERIPH_CLOCK +#define OTG_IRQ OTGFS1_IRQn +#define OTG_IRQ_HANDLER OTGFS1_IRQHandler +#define OTG_WKUP_IRQ OTGFS1_WKUP_IRQn + +#define OTG_WKUP_HANDLER OTGFS1_WKUP_IRQHandler +#define OTG_WKUP_EXINT_LINE EXINT_LINE_18 + +#define OTG_PIN_GPIO GPIOA +#define OTG_PIN_GPIO_CLOCK CRM_GPIOA_PERIPH_CLOCK +#define OTG_PIN_VBUS GPIO_PINS_9 +#define OTG_PIN_ID GPIO_PINS_10 + +#define OTG_PIN_SOF_GPIO GPIOA +#define OTG_PIN_SOF_GPIO_CLOCK CRM_GPIOA_PERIPH_CLOCK +#define OTG_PIN_SOF GPIO_PINS_8 + +/** + * @brief usb device mode config + */ +#ifdef USE_OTG_DEVICE_MODE +/** + * @brief usb device mode fifo + */ +/* otg1 device fifo */ +#define USBD_RX_SIZE 128 +#define USBD_EP0_TX_SIZE 24 +#define USBD_EP1_TX_SIZE 20 +#define USBD_EP2_TX_SIZE 20 +#define USBD_EP3_TX_SIZE 20 + +/** + * @brief usb endpoint max num define + */ +#ifndef USB_EPT_MAX_NUM +#define USB_EPT_MAX_NUM 4 +#endif +#endif + +/** + * @brief usb host mode config + */ +#ifdef USE_OTG_HOST_MODE +#ifndef USB_HOST_CHANNEL_NUM +#define USB_HOST_CHANNEL_NUM 8 +#endif + +/** + * @brief usb host mode fifo + */ +/* otg1 host fifo */ +#define USBH_RX_FIFO_SIZE 128 +#define USBH_NP_TX_FIFO_SIZE 96 +#define USBH_P_TX_FIFO_SIZE 96 +#endif + +/** + * @brief usb sof output enable + */ +/* #define USB_SOF_OUTPUT_ENABLE */ + +/** + * @brief ignore vbus detection, only available in at32f415xx revision C. + * at32f415xx revision B: (not support) + * the vbus detection pin (pa9) can not be used for other functionality. + * vbus pin must kept at VBUS or VDD. + * + * at32f415xx revision C: (support) + * ignore vbus detection, the internal vbus is always valid. + * the vbus pin (pa9) can be used for other functionality. + */ +/* #define USB_VBUS_IGNORE */ + +/** + * @brief usb low power wakeup handler enable + */ +/* #define USB_LOW_POWER_WAKUP */ + +/** + * @brief support winusb + */ +#define USBD_SUPPORT_WINUSB 1 + +void usb_delay_ms(uint32_t ms); +void usb_delay_us(uint32_t us); +/** + * @} + */ + +/** + * @} + */ +#ifdef __cplusplus +} +#endif + +#endif diff --git a/project/at_start_f415/examples/usb_device/winusb/mdk_v5/winusb.uvoptx b/project/at_start_f415/examples/usb_device/winusb/mdk_v5/winusb.uvoptx new file mode 100644 index 0000000..c075cfc --- /dev/null +++ b/project/at_start_f415/examples/usb_device/winusb/mdk_v5/winusb.uvoptx @@ -0,0 +1,492 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + winusb + 0x4 + ARM-ADS + + 12000000 + + 0 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 0 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + + + + + + + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0AT32F415_256 -FS08000000 -FL040000 -FP0($$Device:-AT32F415RCT7$Flash\AT32F415_256.FLM)) + + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + user + 0 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\src\at32f415_clock.c + at32f415_clock.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\src\at32f415_int.c + at32f415_int.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + ..\src\main.c + main.c + 0 + 0 + + + + + bsp + 0 + 0 + 0 + 0 + + 2 + 4 + 1 + 0 + 0 + 0 + ..\..\..\..\..\at32f415_board\at32f415_board.c + at32f415_board.c + 0 + 0 + + + + + firmware + 0 + 0 + 0 + 0 + + 3 + 5 + 1 + 0 + 0 + 0 + ..\..\..\..\..\..\libraries\drivers\src\at32f415_crm.c + at32f415_crm.c + 0 + 0 + + + 3 + 6 + 1 + 0 + 0 + 0 + ..\..\..\..\..\..\libraries\drivers\src\at32f415_exint.c + at32f415_exint.c + 0 + 0 + + + 3 + 7 + 1 + 0 + 0 + 0 + ..\..\..\..\..\..\libraries\drivers\src\at32f415_flash.c + at32f415_flash.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + ..\..\..\..\..\..\libraries\drivers\src\at32f415_gpio.c + at32f415_gpio.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + ..\..\..\..\..\..\libraries\drivers\src\at32f415_misc.c + at32f415_misc.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + ..\..\..\..\..\..\libraries\drivers\src\at32f415_pwc.c + at32f415_pwc.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + ..\..\..\..\..\..\libraries\drivers\src\at32f415_tmr.c + at32f415_tmr.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + ..\..\..\..\..\..\libraries\drivers\src\at32f415_usart.c + at32f415_usart.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + ..\..\..\..\..\..\libraries\drivers\src\at32f415_usb.c + at32f415_usb.c + 0 + 0 + + + + + cmsis + 0 + 0 + 0 + 0 + + 4 + 14 + 1 + 0 + 0 + 0 + ..\..\..\..\..\..\libraries\cmsis\cm4\device_support\system_at32f415.c + system_at32f415.c + 0 + 0 + + + 4 + 15 + 2 + 0 + 0 + 0 + ..\..\..\..\..\..\libraries\cmsis\cm4\device_support\startup\mdk\startup_at32f415.s + startup_at32f415.s + 0 + 0 + + + + + usbd_driver + 0 + 0 + 0 + 0 + + 5 + 16 + 1 + 0 + 0 + 0 + ..\..\..\..\..\..\middlewares\usb_drivers\src\usb_core.c + usb_core.c + 0 + 0 + + + 5 + 17 + 1 + 0 + 0 + 0 + ..\..\..\..\..\..\middlewares\usb_drivers\src\usbd_core.c + usbd_core.c + 0 + 0 + + + 5 + 18 + 1 + 0 + 0 + 0 + ..\..\..\..\..\..\middlewares\usb_drivers\src\usbd_int.c + usbd_int.c + 0 + 0 + + + 5 + 19 + 1 + 0 + 0 + 0 + ..\..\..\..\..\..\middlewares\usb_drivers\src\usbd_sdr.c + usbd_sdr.c + 0 + 0 + + + + + usbd_class + 0 + 0 + 0 + 0 + + 6 + 20 + 1 + 0 + 0 + 0 + ..\..\..\..\..\..\middlewares\usbd_class\winusb\winusb_class.c + winusb_class.c + 0 + 0 + + + 6 + 21 + 1 + 0 + 0 + 0 + ..\..\..\..\..\..\middlewares\usbd_class\winusb\winusb_desc.c + winusb_desc.c + 0 + 0 + + + + + readme + 0 + 0 + 0 + 0 + + 7 + 22 + 5 + 0 + 0 + 0 + ..\readme.txt + readme.txt + 0 + 0 + + + +
diff --git a/project/at_start_f415/examples/usb_device/winusb/mdk_v5/winusb.uvprojx b/project/at_start_f415/examples/usb_device/winusb/mdk_v5/winusb.uvprojx new file mode 100644 index 0000000..782f2bc --- /dev/null +++ b/project/at_start_f415/examples/usb_device/winusb/mdk_v5/winusb.uvprojx @@ -0,0 +1,552 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + winusb + 0x4 + ARM-ADS + 5060960::V5.06 update 7 (build 960)::.\ARMCC + 0 + + + -AT32F415RCT7 + ArteryTek + ArteryTek.AT32F415_DFP.2.0.0 + IRAM(0x20000000,0x8000) IROM(0x08000000,0x40000) CPUTYPE("Cortex-M4") CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0AT32F415_256 -FS08000000 -FL03F0000 -FP0($$Device:-AT32F415RCT7$Flash\AT32F415_256.FLM)) + 0 + $$Device:- + + + + + + + + + + $$Device:-AT32F415RCT7$SVD\AT32F415xx_v2.svd + 0 + 0 + + + + AT32F415RCT7$Device\Include\at32f415.h\ + AT32F415RCT7$Device\Include\at32f415.h\ + + 0 + 0 + 0 + 0 + 1 + + .\objects\ + winusb + 1 + 0 + 1 + 1 + 1 + .\listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 0 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x8000 + + + 1 + 0x8000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x40000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x8000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + AT32F415RCT7,USE_STDPERIPH_DRIVER,AT_START_F415_V1 + + ..\..\..\..\..\..\libraries\cmsis\cm4\core_support;..\..\..\..\..\..\libraries\cmsis\cm4\device_support;..\..\..\..\..\..\libraries\drivers\inc;..\..\..\..\..\at32f415_board;..\inc;..\..\..\..\..\..\middlewares\usb_drivers\inc;..\..\..\..\..\..\middlewares\usbd_class\winusb + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 4 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + + + + + + + + + + + + user + + + at32f415_clock.c + 1 + ..\src\at32f415_clock.c + + + at32f415_int.c + 1 + ..\src\at32f415_int.c + + + main.c + 1 + ..\src\main.c + + + + + bsp + + + at32f415_board.c + 1 + ..\..\..\..\..\at32f415_board\at32f415_board.c + + + + + firmware + + + at32f415_crm.c + 1 + ..\..\..\..\..\..\libraries\drivers\src\at32f415_crm.c + + + at32f415_exint.c + 1 + ..\..\..\..\..\..\libraries\drivers\src\at32f415_exint.c + + + at32f415_flash.c + 1 + ..\..\..\..\..\..\libraries\drivers\src\at32f415_flash.c + + + at32f415_gpio.c + 1 + ..\..\..\..\..\..\libraries\drivers\src\at32f415_gpio.c + + + at32f415_misc.c + 1 + ..\..\..\..\..\..\libraries\drivers\src\at32f415_misc.c + + + at32f415_pwc.c + 1 + ..\..\..\..\..\..\libraries\drivers\src\at32f415_pwc.c + + + at32f415_tmr.c + 1 + ..\..\..\..\..\..\libraries\drivers\src\at32f415_tmr.c + + + at32f415_usart.c + 1 + ..\..\..\..\..\..\libraries\drivers\src\at32f415_usart.c + + + at32f415_usb.c + 1 + ..\..\..\..\..\..\libraries\drivers\src\at32f415_usb.c + + + + + cmsis + + + system_at32f415.c + 1 + ..\..\..\..\..\..\libraries\cmsis\cm4\device_support\system_at32f415.c + + + startup_at32f415.s + 2 + ..\..\..\..\..\..\libraries\cmsis\cm4\device_support\startup\mdk\startup_at32f415.s + + + + + usbd_driver + + + usb_core.c + 1 + ..\..\..\..\..\..\middlewares\usb_drivers\src\usb_core.c + + + usbd_core.c + 1 + ..\..\..\..\..\..\middlewares\usb_drivers\src\usbd_core.c + + + usbd_int.c + 1 + ..\..\..\..\..\..\middlewares\usb_drivers\src\usbd_int.c + + + usbd_sdr.c + 1 + ..\..\..\..\..\..\middlewares\usb_drivers\src\usbd_sdr.c + + + + + usbd_class + + + winusb_class.c + 1 + ..\..\..\..\..\..\middlewares\usbd_class\winusb\winusb_class.c + + + winusb_desc.c + 1 + ..\..\..\..\..\..\middlewares\usbd_class\winusb\winusb_desc.c + + + + + readme + + + readme.txt + 5 + ..\readme.txt + + + + + + + + + + + + + + + + + <Project Info> + + + + + + 0 + 1 + + + + +
diff --git a/project/at_start_f415/examples/usb_device/winusb/readme.txt b/project/at_start_f415/examples/usb_device/winusb/readme.txt new file mode 100644 index 0000000..be47df0 --- /dev/null +++ b/project/at_start_f415/examples/usb_device/winusb/readme.txt @@ -0,0 +1,10 @@ +/** + ************************************************************************** + * @file readme.txt + * @brief readme + ************************************************************************** + */ + + this demo is based on the at-start board, in this demo, show how to build + a device of winusb + for more detailed information, please refer to the application note document AN0097. diff --git a/project/at_start_f415/examples/usb_device/winusb/src/at32f415_clock.c b/project/at_start_f415/examples/usb_device/winusb/src/at32f415_clock.c new file mode 100644 index 0000000..d2ec153 --- /dev/null +++ b/project/at_start_f415/examples/usb_device/winusb/src/at32f415_clock.c @@ -0,0 +1,97 @@ +/** + ************************************************************************** + * @file at32f415_clock.c + * @brief system clock config program + ************************************************************************** + * Copyright notice & Disclaimer + * + * The software Board Support Package (BSP) that is made available to + * download from Artery official website is the copyrighted work of Artery. + * Artery authorizes customers to use, copy, and distribute the BSP + * software and its related documentation for the purpose of design and + * development in conjunction with Artery microcontrollers. Use of the + * software is governed by this copyright notice and the following disclaimer. + * + * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, + * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, + * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR + * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, + * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. + * + ************************************************************************** + */ + +/* includes ------------------------------------------------------------------*/ +#include "at32f415_clock.h" + +/** + * @brief system clock config program + * @note the system clock is configured as follow: + * system clock (sclk) = hext / 2 * pll_mult + * system clock source = pll (hext) + * - hext = HEXT_VALUE + * - sclk = 144000000 + * - ahbdiv = 1 + * - ahbclk = 144000000 + * - apb2div = 2 + * - apb2clk = 72000000 + * - apb1div = 2 + * - apb1clk = 72000000 + * - pll_mult = 36 + * - flash_wtcyc = 4 cycle + * @param none + * @retval none + */ +void system_clock_config(void) +{ + /* reset crm */ + crm_reset(); + + /* config flash psr register */ + flash_psr_set(FLASH_WAIT_CYCLE_4); + + crm_clock_source_enable(CRM_CLOCK_SOURCE_HEXT, TRUE); + + /* wait till hext is ready */ + while(crm_hext_stable_wait() == ERROR) + { + } + + /* config pll clock resource */ + crm_pll_config(CRM_PLL_SOURCE_HEXT_DIV, CRM_PLL_MULT_36); + + /* enable pll */ + crm_clock_source_enable(CRM_CLOCK_SOURCE_PLL, TRUE); + + /* wait till pll is ready */ + while(crm_flag_get(CRM_PLL_STABLE_FLAG) != SET) + { + } + + /* config ahbclk */ + crm_ahb_div_set(CRM_AHB_DIV_1); + + /* config apb2clk, the maximum frequency of APB1/APB2 clock is 75 MHz */ + crm_apb2_div_set(CRM_APB2_DIV_2); + + /* config apb1clk, the maximum frequency of APB1/APB2 clock is 75 MHz */ + crm_apb1_div_set(CRM_APB1_DIV_2); + + /* enable auto step mode */ + crm_auto_step_mode_enable(TRUE); + + /* select pll as system clock source */ + crm_sysclk_switch(CRM_SCLK_PLL); + + /* wait till pll is used as system clock source */ + while(crm_sysclk_switch_status_get() != CRM_SCLK_PLL) + { + } + + /* disable auto step mode */ + crm_auto_step_mode_enable(FALSE); + + /* update system_core_clock global variable */ + system_core_clock_update(); +} diff --git a/project/at_start_f415/examples/usb_device/winusb/src/at32f415_int.c b/project/at_start_f415/examples/usb_device/winusb/src/at32f415_int.c new file mode 100644 index 0000000..518962b --- /dev/null +++ b/project/at_start_f415/examples/usb_device/winusb/src/at32f415_int.c @@ -0,0 +1,139 @@ +/** + ************************************************************************** + * @file at32f415_int.c + * @brief main interrupt service routines. + ************************************************************************** + * Copyright notice & Disclaimer + * + * The software Board Support Package (BSP) that is made available to + * download from Artery official website is the copyrighted work of Artery. + * Artery authorizes customers to use, copy, and distribute the BSP + * software and its related documentation for the purpose of design and + * development in conjunction with Artery microcontrollers. Use of the + * software is governed by this copyright notice and the following disclaimer. + * + * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, + * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, + * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR + * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, + * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. + * + ************************************************************************** + */ + +/* includes ------------------------------------------------------------------*/ +#include "at32f415_int.h" + +/** @addtogroup AT32F415_periph_examples + * @{ + */ + +/** @addtogroup 415_USB_device_winusb USB_device_winusb + * @{ + */ + +/** + * @brief this function handles nmi exception. + * @param none + * @retval none + */ +void NMI_Handler(void) +{ +} + +/** + * @brief this function handles hard fault exception. + * @param none + * @retval none + */ +void HardFault_Handler(void) +{ + /* go to infinite loop when hard fault exception occurs */ + while(1) + { + } +} + +/** + * @brief this function handles memory manage exception. + * @param none + * @retval none + */ +void MemManage_Handler(void) +{ + /* go to infinite loop when memory manage exception occurs */ + while(1) + { + } +} + +/** + * @brief this function handles bus fault exception. + * @param none + * @retval none + */ +void BusFault_Handler(void) +{ + /* go to infinite loop when bus fault exception occurs */ + while(1) + { + } +} + +/** + * @brief this function handles usage fault exception. + * @param none + * @retval none + */ +void UsageFault_Handler(void) +{ + /* go to infinite loop when usage fault exception occurs */ + while(1) + { + } +} + +/** + * @brief this function handles svcall exception. + * @param none + * @retval none + */ +void SVC_Handler(void) +{ +} + +/** + * @brief this function handles debug monitor exception. + * @param none + * @retval none + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief this function handles pendsv_handler exception. + * @param none + * @retval none + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief this function handles systick handler. + * @param none + * @retval none + */ +void SysTick_Handler(void) +{ +} + +/** + * @} + */ + +/** + * @} + */ diff --git a/project/at_start_f415/examples/usb_device/winusb/src/main.c b/project/at_start_f415/examples/usb_device/winusb/src/main.c new file mode 100644 index 0000000..fe8b6d8 --- /dev/null +++ b/project/at_start_f415/examples/usb_device/winusb/src/main.c @@ -0,0 +1,258 @@ +/** + ************************************************************************** + * @file main.c + * @brief main program + ************************************************************************** + * Copyright notice & Disclaimer + * + * The software Board Support Package (BSP) that is made available to + * download from Artery official website is the copyrighted work of Artery. + * Artery authorizes customers to use, copy, and distribute the BSP + * software and its related documentation for the purpose of design and + * development in conjunction with Artery microcontrollers. Use of the + * software is governed by this copyright notice and the following disclaimer. + * + * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, + * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, + * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR + * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, + * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. + * + ************************************************************************** + */ + +#include "at32f415_board.h" +#include "at32f415_clock.h" +#include "usb_conf.h" +#include "usb_core.h" +#include "usbd_int.h" +#include "winusb_class.h" +#include "winusb_desc.h" + +/** @addtogroup AT32F415_periph_examples + * @{ + */ + +/** @addtogroup 415_USB_device_winusb USB_device_winusb + * @{ + */ + +/* usb global struct define */ +otg_core_type otg_core_struct; +#if defined ( __ICCARM__ ) /* iar compiler */ + #pragma data_alignment=4 +#endif +ALIGNED_HEAD uint8_t usb_buffer[256] ALIGNED_TAIL; +void usb_clock48m_select(usb_clk48_s clk_s); +void usb_gpio_config(void); +void usb_low_power_wakeup_config(void); + +/** + * @brief main function. + * @param none + * @retval none + */ +int main(void) +{ + uint16_t data_len; + + uint32_t timeout; + + nvic_priority_group_config(NVIC_PRIORITY_GROUP_4); + + system_clock_config(); + + at32_board_init(); + + /* usb gpio config */ + usb_gpio_config(); + +#ifdef USB_LOW_POWER_WAKUP + usb_low_power_wakeup_config(); +#endif + + /* enable otgfs clock */ + crm_periph_clock_enable(OTG_CLOCK, TRUE); + + /* select usb 48m clcok source */ + usb_clock48m_select(USB_CLK_HEXT); + + /* enable otgfs irq */ + nvic_irq_enable(OTG_IRQ, 0, 0); + + /* init usb */ + usbd_init(&otg_core_struct, + USB_FULL_SPEED_CORE_ID, + USB_ID, + &winusb_class_handler, + &winusb_desc_handler); + while(1) + { + /* get usb winusb receive data */ + data_len = usb_winusb_get_rxdata(&otg_core_struct.dev, usb_buffer); + + if(data_len > 0) + { + + /* bulk transfer is complete when the endpoint does one of the following + 1 has transferred exactly the amount of data expected + 2 transfers a packet with a payload size less than wMaxPacketSize or transfers a zero-length packet + */ + + timeout = 5000000; + do + { + /* send data to host */ + if(usb_winusb_send_data(&otg_core_struct.dev, usb_buffer, data_len) == SUCCESS) + { + break; + } + }while(timeout --); + } + } +} + +/** + * @brief usb 48M clock select + * @param clk_s:USB_CLK_HICK, USB_CLK_HEXT + * @retval none + */ +void usb_clock48m_select(usb_clk48_s clk_s) +{ + 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; + + default: + break; + } +} + +/** + * @brief this function config gpio. + * @param none + * @retval none + */ +void usb_gpio_config(void) +{ + gpio_init_type gpio_init_struct; + + crm_periph_clock_enable(OTG_PIN_GPIO_CLOCK, TRUE); + gpio_default_para_init(&gpio_init_struct); + + gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER; + gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL; + gpio_init_struct.gpio_mode = GPIO_MODE_MUX; + gpio_init_struct.gpio_pull = GPIO_PULL_NONE; + +#ifdef USB_SOF_OUTPUT_ENABLE + crm_periph_clock_enable(OTG_PIN_SOF_GPIO_CLOCK, TRUE); + gpio_init_struct.gpio_pins = OTG_PIN_SOF; + gpio_init(OTG_PIN_SOF_GPIO, &gpio_init_struct); +#endif + + /* otgfs use vbus pin */ +#ifndef USB_VBUS_IGNORE + gpio_init_struct.gpio_pins = OTG_PIN_VBUS; + gpio_init_struct.gpio_pull = GPIO_PULL_DOWN; + gpio_init_struct.gpio_mode = GPIO_MODE_INPUT; + gpio_init(OTG_PIN_GPIO, &gpio_init_struct); +#endif + + +} +#ifdef USB_LOW_POWER_WAKUP +/** + * @brief usb low power wakeup interrupt config + * @param none + * @retval none + */ +void usb_low_power_wakeup_config(void) +{ + exint_init_type exint_init_struct; + + exint_default_para_init(&exint_init_struct); + + exint_init_struct.line_enable = TRUE; + exint_init_struct.line_mode = EXINT_LINE_INTERRUPUT; + exint_init_struct.line_select = OTG_WKUP_EXINT_LINE; + exint_init_struct.line_polarity = EXINT_TRIGGER_RISING_EDGE; + exint_init(&exint_init_struct); + + nvic_irq_enable(OTG_WKUP_IRQ, 0, 0); +} + +/** + * @brief this function handles otgfs wakup interrupt. + * @param none + * @retval none + */ +void OTG_WKUP_HANDLER(void) +{ + exint_flag_clear(OTG_WKUP_EXINT_LINE); +} + +#endif + +/** + * @brief this function handles otgfs interrupt. + * @param none + * @retval none + */ +void OTG_IRQ_HANDLER(void) +{ + usbd_irq_handler(&otg_core_struct); +} + +/** + * @brief usb delay millisecond function. + * @param ms: number of millisecond delay + * @retval none + */ +void usb_delay_ms(uint32_t ms) +{ + /* user can define self delay function */ + delay_ms(ms); +} + +/** + * @brief usb delay microsecond function. + * @param us: number of microsecond delay + * @retval none + */ +void usb_delay_us(uint32_t us) +{ + delay_us(us); +} + +/** + * @} + */ + +/** + * @} + */ diff --git a/utilities/at32f415_usart_iap_demo/source_code/app_led3_toggle/src/tmr.c b/utilities/at32f415_usart_iap_demo/source_code/app_led3_toggle/src/tmr.c index f689572..410f5cc 100644 --- a/utilities/at32f415_usart_iap_demo/source_code/app_led3_toggle/src/tmr.c +++ b/utilities/at32f415_usart_iap_demo/source_code/app_led3_toggle/src/tmr.c @@ -69,7 +69,7 @@ void tmr_init(void) */ void TMR3_GLOBAL_IRQHandler(void) { - if(tmr_flag_get(TMR3, TMR_OVF_FLAG) == SET) + if(tmr_interrupt_flag_get(TMR3, TMR_OVF_FLAG) == SET) { tmr_flag_clear(TMR3, TMR_OVF_FLAG); at32_led_toggle(LED3); diff --git a/utilities/at32f415_usart_iap_demo/source_code/app_led3_toggle/src/usart.c b/utilities/at32f415_usart_iap_demo/source_code/app_led3_toggle/src/usart.c index 5a00b7b..ab68e8a 100644 --- a/utilities/at32f415_usart_iap_demo/source_code/app_led3_toggle/src/usart.c +++ b/utilities/at32f415_usart_iap_demo/source_code/app_led3_toggle/src/usart.c @@ -85,7 +85,7 @@ void uart_init(uint32_t baudrate) void USART1_IRQHandler(void) { uint16_t reval; - if(usart_flag_get(USART1, USART_RDBF_FLAG) != RESET) + if(usart_interrupt_flag_get(USART1, USART_RDBF_FLAG) != RESET) { reval = usart_data_receive(USART1); if((reval == 0x5A) && (iap_flag == IAP_REV_FLAG_NO)) diff --git a/utilities/at32f415_usart_iap_demo/source_code/app_led4_toggle/src/tmr.c b/utilities/at32f415_usart_iap_demo/source_code/app_led4_toggle/src/tmr.c index 15131cd..afb2c6d 100644 --- a/utilities/at32f415_usart_iap_demo/source_code/app_led4_toggle/src/tmr.c +++ b/utilities/at32f415_usart_iap_demo/source_code/app_led4_toggle/src/tmr.c @@ -69,7 +69,7 @@ void tmr_init(void) */ void TMR3_GLOBAL_IRQHandler(void) { - if(tmr_flag_get(TMR3, TMR_OVF_FLAG) == SET) + if(tmr_interrupt_flag_get(TMR3, TMR_OVF_FLAG) == SET) { tmr_flag_clear(TMR3, TMR_OVF_FLAG); at32_led_toggle(LED4); diff --git a/utilities/at32f415_usart_iap_demo/source_code/app_led4_toggle/src/usart.c b/utilities/at32f415_usart_iap_demo/source_code/app_led4_toggle/src/usart.c index da113ec..28a1476 100644 --- a/utilities/at32f415_usart_iap_demo/source_code/app_led4_toggle/src/usart.c +++ b/utilities/at32f415_usart_iap_demo/source_code/app_led4_toggle/src/usart.c @@ -85,7 +85,7 @@ void uart_init(uint32_t baudrate) void USART1_IRQHandler(void) { uint16_t reval; - if(usart_flag_get(USART1, USART_RDBF_FLAG) != RESET) + if(usart_interrupt_flag_get(USART1, USART_RDBF_FLAG) != RESET) { reval = usart_data_receive(USART1); if((reval == 0x5A) && (iap_flag == IAP_REV_FLAG_NO)) diff --git a/utilities/at32f415_usart_iap_demo/source_code/bootloader/src/iap.c b/utilities/at32f415_usart_iap_demo/source_code/bootloader/src/iap.c index eb6a887..0802f4a 100644 --- a/utilities/at32f415_usart_iap_demo/source_code/bootloader/src/iap.c +++ b/utilities/at32f415_usart_iap_demo/source_code/bootloader/src/iap.c @@ -48,7 +48,10 @@ iapfun jump_to_app; #pragma O0 #elif defined (__ICCARM__) #pragma optimize=s none +#elif defined (__GNUC__) +__attribute__((optimize("O0"))) #endif + /** * @brief app load. * @param app_addr diff --git a/utilities/at32f415_usart_iap_demo/source_code/bootloader/src/tmr.c b/utilities/at32f415_usart_iap_demo/source_code/bootloader/src/tmr.c index a20253b..ed87193 100644 --- a/utilities/at32f415_usart_iap_demo/source_code/bootloader/src/tmr.c +++ b/utilities/at32f415_usart_iap_demo/source_code/bootloader/src/tmr.c @@ -72,7 +72,7 @@ void tmr_init(void) */ void TMR3_GLOBAL_IRQHandler(void) { - if(tmr_flag_get(TMR3, TMR_OVF_FLAG) == SET) + if(tmr_interrupt_flag_get(TMR3, TMR_OVF_FLAG) == SET) { tmr_flag_clear(TMR3, TMR_OVF_FLAG); at32_led_toggle(LED2); diff --git a/utilities/at32f415_usart_iap_demo/source_code/bootloader/src/usart.c b/utilities/at32f415_usart_iap_demo/source_code/bootloader/src/usart.c index a2fd6da..d780b25 100644 --- a/utilities/at32f415_usart_iap_demo/source_code/bootloader/src/usart.c +++ b/utilities/at32f415_usart_iap_demo/source_code/bootloader/src/usart.c @@ -86,7 +86,7 @@ void USART1_IRQHandler(void) { uint16_t reval; time_ira_cnt = 0; /* clear upgrade time out flag */ - if(usart_flag_get(USART1, USART_RDBF_FLAG) != RESET) + if(usart_interrupt_flag_get(USART1, USART_RDBF_FLAG) != RESET) { reval = usart_data_receive(USART1); if(usart_group_struct.count > (USART_REC_LEN - 1)) diff --git a/utilities/at32f415_usb_iap_demo/source_code/bootloader/src/hid_iap_user.c b/utilities/at32f415_usb_iap_demo/source_code/bootloader/src/hid_iap_user.c index 7362f49..9cc6546 100644 --- a/utilities/at32f415_usb_iap_demo/source_code/bootloader/src/hid_iap_user.c +++ b/utilities/at32f415_usb_iap_demo/source_code/bootloader/src/hid_iap_user.c @@ -47,6 +47,15 @@ iap_result_type iap_data_write(uint8_t *pdata, uint32_t len); void iap_jump(void); void iap_respond(uint8_t *res_buf, uint16_t iap_cmd, uint16_t result); +/* app_load don't optimize */ +#if defined (__CC_ARM) + #pragma O0 +#elif defined (__ICCARM__) + #pragma optimize=s none +#elif defined (__GNUC__) +__attribute__((optimize("O0"))) +#endif + /** * @brief jump to app * @param none