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