update version to v2.1.2

This commit is contained in:
Artery-MCU
2024-01-25 10:08:14 +08:00
parent 9d554c6b91
commit 0a93017e07
105 changed files with 3447 additions and 242 deletions

View File

@@ -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;

View File

@@ -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

View File

@@ -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)

View File

@@ -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;
/**

View File

@@ -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);

View File

@@ -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

View File

@@ -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;

View File

@@ -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:

View File

@@ -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
*/

View File

@@ -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;
/**

View File

@@ -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;
}

View File

@@ -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);
}
break;
case USB_STD_REQ_GET_INTERFACE:
usbd_ctrl_send(pudev, (uint8_t *)&paudio_hid->alt_setting, 1);

View File

@@ -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);
}
break;
case USB_STD_REQ_GET_INTERFACE:
usbd_ctrl_send(pudev, (uint8_t *)&vcpkybrd->alt_setting, 1);

View File

@@ -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);
}
break;
case USB_STD_REQ_GET_INTERFACE:
usbd_ctrl_send(pudev, (uint8_t *)&pcshid->alt_setting, 1);

View File

@@ -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);
}
break;
case USB_STD_REQ_GET_INTERFACE:
usbd_ctrl_send(pudev, (uint8_t *)&piap->alt_setting, 1);

View File

@@ -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);
}
break;
case USB_STD_REQ_GET_INTERFACE:
usbd_ctrl_send(pudev, (uint8_t *)&pkeyboard->alt_setting, 1);

View File

@@ -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);
}
break;
case USB_STD_REQ_GET_INTERFACE:
usbd_ctrl_send(pudev, (uint8_t *)&pmouse->alt_setting, 1);

View File

@@ -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;
}
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/

View File

@@ -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

View File

@@ -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
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/

View File

@@ -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

View File

@@ -10,7 +10,7 @@
<TargetName>current_vref_value_check</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<pCCUsed>5060750::V5.06 update 6 (build 750)::ARMCC</pCCUsed>
<pCCUsed>5060750::V5.06 update 6 (build 750)::.\ARMCC</pCCUsed>
<uAC6>0</uAC6>
<TargetOption>
<TargetCommonOption>

View File

@@ -10,7 +10,7 @@
<TargetName>exint_trigger_partitioned</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<pCCUsed>5060750::V5.06 update 6 (build 750)::ARMCC</pCCUsed>
<pCCUsed>5060750::V5.06 update 6 (build 750)::.\ARMCC</pCCUsed>
<uAC6>0</uAC6>
<TargetOption>
<TargetCommonOption>

View File

@@ -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)

View File

@@ -10,7 +10,7 @@
<TargetName>internal_temperature_sensor</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<pCCUsed>5060750::V5.06 update 6 (build 750)::ARMCC</pCCUsed>
<pCCUsed>5060750::V5.06 update 6 (build 750)::.\ARMCC</pCCUsed>
<uAC6>0</uAC6>
<TargetOption>
<TargetCommonOption>

View File

@@ -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++;

View File

@@ -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++;

View File

@@ -10,7 +10,7 @@
<TargetName>tmr_trigger_automatic_preempted</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<pCCUsed>5060750::V5.06 update 6 (build 750)::ARMCC</pCCUsed>
<pCCUsed>5060750::V5.06 update 6 (build 750)::.\ARMCC</pCCUsed>
<uAC6>0</uAC6>
<TargetOption>
<TargetCommonOption>

View File

@@ -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)

View File

@@ -10,7 +10,7 @@
<TargetName>voltage_monitoring</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<pCCUsed>5060750::V5.06 update 6 (build 750)::ARMCC</pCCUsed>
<pCCUsed>5060750::V5.06 update 6 (build 750)::.\ARMCC</pCCUsed>
<uAC6>0</uAC6>
<TargetOption>
<TargetCommonOption>

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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)
/**
* @}
*/

View File

@@ -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();

View File

@@ -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);

View File

@@ -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)

View File

@@ -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();

View File

@@ -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");

View File

@@ -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);

View File

@@ -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);

View File

@@ -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)

View File

@@ -10,7 +10,7 @@
<TargetName>deepsleep_ertc_alarm</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<pCCUsed>5060750::V5.06 update 6 (build 750)::ARMCC</pCCUsed>
<pCCUsed>5060750::V5.06 update 6 (build 750)::.\ARMCC</pCCUsed>
<uAC6>0</uAC6>
<TargetOption>
<TargetCommonOption>

View File

@@ -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);

View File

@@ -10,7 +10,7 @@
<TargetName>deepsleep_ertc_tamper</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<pCCUsed>5060750::V5.06 update 6 (build 750)::ARMCC</pCCUsed>
<pCCUsed>5060750::V5.06 update 6 (build 750)::.\ARMCC</pCCUsed>
<uAC6>0</uAC6>
<TargetOption>
<TargetCommonOption>

View File

@@ -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);

View File

@@ -10,7 +10,7 @@
<TargetName>power_voltage_monitor</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<pCCUsed>5060750::V5.06 update 6 (build 750)::ARMCC</pCCUsed>
<pCCUsed>5060750::V5.06 update 6 (build 750)::.\ARMCC</pCCUsed>
<uAC6>0</uAC6>
<TargetOption>
<TargetCommonOption>

View File

@@ -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);

View File

@@ -10,7 +10,7 @@
<TargetName>sleep_tmr2</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<pCCUsed>5060750::V5.06 update 6 (build 750)::ARMCC</pCCUsed>
<pCCUsed>5060750::V5.06 update 6 (build 750)::.\ARMCC</pCCUsed>
<uAC6>0</uAC6>
<TargetOption>
<TargetCommonOption>

View File

@@ -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);

View File

@@ -10,7 +10,7 @@
<TargetName>sleep_usart1</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<pCCUsed>5060750::V5.06 update 6 (build 750)::ARMCC</pCCUsed>
<pCCUsed>5060750::V5.06 update 6 (build 750)::.\ARMCC</pCCUsed>
<uAC6>0</uAC6>
<TargetOption>
<TargetCommonOption>

View File

@@ -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);

View File

@@ -10,7 +10,7 @@
<TargetName>standby_ertc_alarm</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<pCCUsed>5060750::V5.06 update 6 (build 750)::ARMCC</pCCUsed>
<pCCUsed>5060750::V5.06 update 6 (build 750)::.\ARMCC</pCCUsed>
<uAC6>0</uAC6>
<TargetOption>
<TargetCommonOption>

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);
}

View File

@@ -10,7 +10,7 @@
<TargetName>halfduplex_transceiver_switch</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<pCCUsed>5060750::V5.06 update 6 (build 750)::ARMCC</pCCUsed>
<pCCUsed>5060750::V5.06 update 6 (build 750)::.\ARMCC</pCCUsed>
<uAC6>0</uAC6>
<TargetOption>
<TargetCommonOption>

View File

@@ -14,3 +14,4 @@
pb14(miso) <---> pa7(mosi)
for more detailed information. please refer to the application note document AN0102.

View File

@@ -147,9 +147,7 @@ void SysTick_Handler(void)
*/
void SPI1_IRQHandler(void)
{
if(SPI1->ctrl2_bit.tdbeie != RESET)
{
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)
@@ -157,10 +155,7 @@ void SysTick_Handler(void)
spi_i2s_interrupt_enable(SPI1, SPI_I2S_TDBE_INT, FALSE);
}
}
}
if(SPI1->ctrl2_bit.rdbfie != RESET)
{
if(spi_i2s_flag_get(SPI1, SPI_I2S_RDBF_FLAG) != RESET)
if(spi_i2s_interrupt_flag_get(SPI1, SPI_I2S_RDBF_FLAG) != RESET)
{
spi_enable(SPI1, FALSE);
spi1_rx_buffer[rx_index++] = spi_i2s_data_receive(SPI1);
@@ -170,7 +165,6 @@ void SysTick_Handler(void)
spi_i2s_interrupt_enable(SPI1, SPI_I2S_RDBF_INT, FALSE);
}
}
}
}
/**
@@ -180,9 +174,7 @@ void SysTick_Handler(void)
*/
void SPI2_IRQHandler(void)
{
if(SPI2->ctrl2_bit.tdbeie != RESET)
{
if(spi_i2s_flag_get(SPI2, SPI_I2S_TDBE_FLAG) != RESET)
if(spi_i2s_interrupt_flag_get(SPI2, SPI_I2S_TDBE_FLAG) != RESET)
{
spi_i2s_data_transmit(SPI2, spi2_tx_buffer[tx_index++]);
if(tx_index == BUFFERSIZE)
@@ -190,14 +182,10 @@ void SysTick_Handler(void)
spi_i2s_interrupt_enable(SPI2, SPI_I2S_TDBE_INT, FALSE);
}
}
}
if(SPI2->ctrl2_bit.rdbfie != RESET)
{
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);
}
}
}
/**

View File

@@ -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;

View File

@@ -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;

View File

@@ -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);

View File

@@ -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 */

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -148,9 +148,7 @@ void SysTick_Handler(void)
*/
void USART2_IRQHandler(void)
{
if(USART2->ctrl1_bit.rdbfien != RESET)
{
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 */
usart2_rx_buffer[usart2_rx_counter++] = usart_data_receive(USART2);
@@ -161,11 +159,8 @@ void USART2_IRQHandler(void)
usart_interrupt_enable(USART2, USART_RDBF_INT, FALSE);
}
}
}
if(USART2->ctrl1_bit.tdbeien != RESET)
{
if(usart_flag_get(USART2, USART_TDBE_FLAG) != RESET)
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++]);
@@ -176,7 +171,6 @@ void USART2_IRQHandler(void)
usart_interrupt_enable(USART2, USART_TDBE_INT, FALSE);
}
}
}
}
/**
@@ -186,9 +180,7 @@ void USART2_IRQHandler(void)
*/
void USART3_IRQHandler(void)
{
if(USART3->ctrl1_bit.rdbfien != RESET)
{
if(usart_flag_get(USART3, USART_RDBF_FLAG) != RESET)
if(usart_interrupt_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);
@@ -199,11 +191,8 @@ void USART3_IRQHandler(void)
usart_interrupt_enable(USART3, USART_RDBF_INT, FALSE);
}
}
}
if(USART3->ctrl1_bit.tdbeien != RESET)
{
if(usart_flag_get(USART3, USART_TDBE_FLAG) != RESET)
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++]);
@@ -214,7 +203,6 @@ void USART3_IRQHandler(void)
usart_interrupt_enable(USART3, USART_TDBE_INT, FALSE);
}
}
}
}
/**

View File

@@ -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);
}

View File

@@ -144,7 +144,7 @@ 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)

View File

@@ -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);

View File

@@ -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);

View File

@@ -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)
/**
* @}
*/

View File

@@ -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)
/**
* @}
*/

View File

@@ -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);

View File

@@ -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 */

View File

@@ -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 */

View File

@@ -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

View File

@@ -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

View File

@@ -0,0 +1,492 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<ProjectOpt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_optx.xsd">
<SchemaVersion>1.0</SchemaVersion>
<Header>### uVision Project, (C) Keil Software</Header>
<Extensions>
<cExt>*.c</cExt>
<aExt>*.s*; *.src; *.a*</aExt>
<oExt>*.obj; *.o</oExt>
<lExt>*.lib</lExt>
<tExt>*.txt; *.h; *.inc</tExt>
<pExt>*.plm</pExt>
<CppX>*.cpp</CppX>
<nMigrate>0</nMigrate>
</Extensions>
<DaveTm>
<dwLowDateTime>0</dwLowDateTime>
<dwHighDateTime>0</dwHighDateTime>
</DaveTm>
<Target>
<TargetName>winusb</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<TargetOption>
<CLKADS>12000000</CLKADS>
<OPTTT>
<gFlags>0</gFlags>
<BeepAtEnd>1</BeepAtEnd>
<RunSim>0</RunSim>
<RunTarget>1</RunTarget>
<RunAbUc>0</RunAbUc>
</OPTTT>
<OPTHX>
<HexSelection>1</HexSelection>
<FlashByte>65535</FlashByte>
<HexRangeLowAddress>0</HexRangeLowAddress>
<HexRangeHighAddress>0</HexRangeHighAddress>
<HexOffset>0</HexOffset>
</OPTHX>
<OPTLEX>
<PageWidth>79</PageWidth>
<PageLength>66</PageLength>
<TabStop>8</TabStop>
<ListingPath>.\listings\</ListingPath>
</OPTLEX>
<ListingPage>
<CreateCListing>1</CreateCListing>
<CreateAListing>1</CreateAListing>
<CreateLListing>1</CreateLListing>
<CreateIListing>0</CreateIListing>
<AsmCond>1</AsmCond>
<AsmSymb>1</AsmSymb>
<AsmXref>0</AsmXref>
<CCond>1</CCond>
<CCode>0</CCode>
<CListInc>0</CListInc>
<CSymb>0</CSymb>
<LinkerCodeListing>0</LinkerCodeListing>
</ListingPage>
<OPTXL>
<LMap>1</LMap>
<LComments>1</LComments>
<LGenerateSymbols>1</LGenerateSymbols>
<LLibSym>1</LLibSym>
<LLines>1</LLines>
<LLocSym>1</LLocSym>
<LPubSym>1</LPubSym>
<LXref>0</LXref>
<LExpSel>0</LExpSel>
</OPTXL>
<OPTFL>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<IsCurrentTarget>1</IsCurrentTarget>
</OPTFL>
<CpuCode>0</CpuCode>
<DebugOpt>
<uSim>0</uSim>
<uTrg>1</uTrg>
<sLdApp>1</sLdApp>
<sGomain>1</sGomain>
<sRbreak>1</sRbreak>
<sRwatch>1</sRwatch>
<sRmem>1</sRmem>
<sRfunc>1</sRfunc>
<sRbox>1</sRbox>
<tLdApp>1</tLdApp>
<tGomain>1</tGomain>
<tRbreak>1</tRbreak>
<tRwatch>1</tRwatch>
<tRmem>1</tRmem>
<tRfunc>0</tRfunc>
<tRbox>1</tRbox>
<tRtrace>1</tRtrace>
<sRSysVw>1</sRSysVw>
<tRSysVw>1</tRSysVw>
<sRunDeb>0</sRunDeb>
<sLrtime>0</sLrtime>
<bEvRecOn>1</bEvRecOn>
<bSchkAxf>0</bSchkAxf>
<bTchkAxf>0</bTchkAxf>
<nTsel>0</nTsel>
<sDll></sDll>
<sDllPa></sDllPa>
<sDlgDll></sDlgDll>
<sDlgPa></sDlgPa>
<sIfile></sIfile>
<tDll></tDll>
<tDllPa></tDllPa>
<tDlgDll></tDlgDll>
<tDlgPa></tDlgPa>
<tIfile></tIfile>
<pMon>BIN\CMSIS_AGDI.dll</pMon>
</DebugOpt>
<TargetDriverDllRegistry>
<SetRegEntry>
<Number>0</Number>
<Key>UL2CM3</Key>
<Name>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0AT32F415_256 -FS08000000 -FL040000 -FP0($$Device:-AT32F415RCT7$Flash\AT32F415_256.FLM))</Name>
</SetRegEntry>
</TargetDriverDllRegistry>
<Breakpoint/>
<Tracepoint>
<THDelay>0</THDelay>
</Tracepoint>
<DebugFlag>
<trace>0</trace>
<periodic>0</periodic>
<aLwin>0</aLwin>
<aCover>0</aCover>
<aSer1>0</aSer1>
<aSer2>0</aSer2>
<aPa>0</aPa>
<viewmode>0</viewmode>
<vrSel>0</vrSel>
<aSym>0</aSym>
<aTbox>0</aTbox>
<AscS1>0</AscS1>
<AscS2>0</AscS2>
<AscS3>0</AscS3>
<aSer3>0</aSer3>
<eProf>0</eProf>
<aLa>0</aLa>
<aPa1>0</aPa1>
<AscS4>0</AscS4>
<aSer4>0</aSer4>
<StkLoc>0</StkLoc>
<TrcWin>0</TrcWin>
<newCpu>0</newCpu>
<uProt>0</uProt>
</DebugFlag>
<LintExecutable></LintExecutable>
<LintConfigFile></LintConfigFile>
<bLintAuto>0</bLintAuto>
<bAutoGenD>0</bAutoGenD>
<LntExFlags>0</LntExFlags>
<pMisraName></pMisraName>
<pszMrule></pszMrule>
<pSingCmds></pSingCmds>
<pMultCmds></pMultCmds>
<pMisraNamep></pMisraNamep>
<pszMrulep></pszMrulep>
<pSingCmdsp></pSingCmdsp>
<pMultCmdsp></pMultCmdsp>
</TargetOption>
</Target>
<Group>
<GroupName>user</GroupName>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>1</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\src\at32f415_clock.c</PathWithFileName>
<FilenameWithoutPath>at32f415_clock.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>2</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\src\at32f415_int.c</PathWithFileName>
<FilenameWithoutPath>at32f415_int.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>3</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\src\main.c</PathWithFileName>
<FilenameWithoutPath>main.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
<GroupName>bsp</GroupName>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>4</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\at32f415_board\at32f415_board.c</PathWithFileName>
<FilenameWithoutPath>at32f415_board.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
<GroupName>firmware</GroupName>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>5</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\..\libraries\drivers\src\at32f415_crm.c</PathWithFileName>
<FilenameWithoutPath>at32f415_crm.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>6</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\..\libraries\drivers\src\at32f415_exint.c</PathWithFileName>
<FilenameWithoutPath>at32f415_exint.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>7</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\..\libraries\drivers\src\at32f415_flash.c</PathWithFileName>
<FilenameWithoutPath>at32f415_flash.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>8</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\..\libraries\drivers\src\at32f415_gpio.c</PathWithFileName>
<FilenameWithoutPath>at32f415_gpio.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>9</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\..\libraries\drivers\src\at32f415_misc.c</PathWithFileName>
<FilenameWithoutPath>at32f415_misc.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>10</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\..\libraries\drivers\src\at32f415_pwc.c</PathWithFileName>
<FilenameWithoutPath>at32f415_pwc.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>11</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\..\libraries\drivers\src\at32f415_tmr.c</PathWithFileName>
<FilenameWithoutPath>at32f415_tmr.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>12</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\..\libraries\drivers\src\at32f415_usart.c</PathWithFileName>
<FilenameWithoutPath>at32f415_usart.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>13</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\..\libraries\drivers\src\at32f415_usb.c</PathWithFileName>
<FilenameWithoutPath>at32f415_usb.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
<GroupName>cmsis</GroupName>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>14</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\..\libraries\cmsis\cm4\device_support\system_at32f415.c</PathWithFileName>
<FilenameWithoutPath>system_at32f415.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>15</FileNumber>
<FileType>2</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\..\libraries\cmsis\cm4\device_support\startup\mdk\startup_at32f415.s</PathWithFileName>
<FilenameWithoutPath>startup_at32f415.s</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
<GroupName>usbd_driver</GroupName>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>16</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\..\middlewares\usb_drivers\src\usb_core.c</PathWithFileName>
<FilenameWithoutPath>usb_core.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>17</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\..\middlewares\usb_drivers\src\usbd_core.c</PathWithFileName>
<FilenameWithoutPath>usbd_core.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>18</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\..\middlewares\usb_drivers\src\usbd_int.c</PathWithFileName>
<FilenameWithoutPath>usbd_int.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>19</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\..\middlewares\usb_drivers\src\usbd_sdr.c</PathWithFileName>
<FilenameWithoutPath>usbd_sdr.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
<GroupName>usbd_class</GroupName>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>20</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\..\middlewares\usbd_class\winusb\winusb_class.c</PathWithFileName>
<FilenameWithoutPath>winusb_class.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>21</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\..\..\..\..\middlewares\usbd_class\winusb\winusb_desc.c</PathWithFileName>
<FilenameWithoutPath>winusb_desc.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
<GroupName>readme</GroupName>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>22</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\readme.txt</PathWithFileName>
<FilenameWithoutPath>readme.txt</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
</ProjectOpt>

View File

@@ -0,0 +1,552 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_projx.xsd">
<SchemaVersion>2.1</SchemaVersion>
<Header>### uVision Project, (C) Keil Software</Header>
<Targets>
<Target>
<TargetName>winusb</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<pCCUsed>5060960::V5.06 update 7 (build 960)::.\ARMCC</pCCUsed>
<uAC6>0</uAC6>
<TargetOption>
<TargetCommonOption>
<Device>-AT32F415RCT7</Device>
<Vendor>ArteryTek</Vendor>
<PackID>ArteryTek.AT32F415_DFP.2.0.0</PackID>
<Cpu>IRAM(0x20000000,0x8000) IROM(0x08000000,0x40000) CPUTYPE("Cortex-M4") CLOCK(12000000) ELITTLE</Cpu>
<FlashUtilSpec></FlashUtilSpec>
<StartupFile></StartupFile>
<FlashDriverDll>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0AT32F415_256 -FS08000000 -FL03F0000 -FP0($$Device:-AT32F415RCT7$Flash\AT32F415_256.FLM))</FlashDriverDll>
<DeviceId>0</DeviceId>
<RegisterFile>$$Device:-</RegisterFile>
<MemoryEnv></MemoryEnv>
<Cmp></Cmp>
<Asm></Asm>
<Linker></Linker>
<OHString></OHString>
<InfinionOptionDll></InfinionOptionDll>
<SLE66CMisc></SLE66CMisc>
<SLE66AMisc></SLE66AMisc>
<SLE66LinkerMisc></SLE66LinkerMisc>
<SFDFile>$$Device:-AT32F415RCT7$SVD\AT32F415xx_v2.svd</SFDFile>
<bCustSvd>0</bCustSvd>
<UseEnv>0</UseEnv>
<BinPath></BinPath>
<IncludePath></IncludePath>
<LibPath></LibPath>
<RegisterFilePath>AT32F415RCT7$Device\Include\at32f415.h\</RegisterFilePath>
<DBRegisterFilePath>AT32F415RCT7$Device\Include\at32f415.h\</DBRegisterFilePath>
<TargetStatus>
<Error>0</Error>
<ExitCodeStop>0</ExitCodeStop>
<ButtonStop>0</ButtonStop>
<NotGenerated>0</NotGenerated>
<InvalidFlash>1</InvalidFlash>
</TargetStatus>
<OutputDirectory>.\objects\</OutputDirectory>
<OutputName>winusb</OutputName>
<CreateExecutable>1</CreateExecutable>
<CreateLib>0</CreateLib>
<CreateHexFile>1</CreateHexFile>
<DebugInformation>1</DebugInformation>
<BrowseInformation>1</BrowseInformation>
<ListingPath>.\listings\</ListingPath>
<HexFormatSelection>1</HexFormatSelection>
<Merge32K>0</Merge32K>
<CreateBatchFile>0</CreateBatchFile>
<BeforeCompile>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
<UserProg1Name></UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
<nStopU1X>0</nStopU1X>
<nStopU2X>0</nStopU2X>
</BeforeCompile>
<BeforeMake>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
<UserProg1Name></UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
<nStopB1X>0</nStopB1X>
<nStopB2X>0</nStopB2X>
</BeforeMake>
<AfterMake>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
<UserProg1Name></UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
<nStopA1X>0</nStopA1X>
<nStopA2X>0</nStopA2X>
</AfterMake>
<SelectedForBatchBuild>0</SelectedForBatchBuild>
<SVCSIdString></SVCSIdString>
</TargetCommonOption>
<CommonProperty>
<UseCPPCompiler>0</UseCPPCompiler>
<RVCTCodeConst>0</RVCTCodeConst>
<RVCTZI>0</RVCTZI>
<RVCTOtherData>0</RVCTOtherData>
<ModuleSelection>0</ModuleSelection>
<IncludeInBuild>1</IncludeInBuild>
<AlwaysBuild>0</AlwaysBuild>
<GenerateAssemblyFile>0</GenerateAssemblyFile>
<AssembleAssemblyFile>0</AssembleAssemblyFile>
<PublicsOnly>0</PublicsOnly>
<StopOnExitCode>3</StopOnExitCode>
<CustomArgument></CustomArgument>
<IncludeLibraryModules></IncludeLibraryModules>
<ComprImg>0</ComprImg>
</CommonProperty>
<DllOption>
<SimDllName>SARMCM3.DLL</SimDllName>
<SimDllArguments> -REMAP -MPU</SimDllArguments>
<SimDlgDll>DCM.DLL</SimDlgDll>
<SimDlgDllArguments>-pCM4</SimDlgDllArguments>
<TargetDllName>SARMCM3.DLL</TargetDllName>
<TargetDllArguments> -MPU</TargetDllArguments>
<TargetDlgDll>TCM.DLL</TargetDlgDll>
<TargetDlgDllArguments>-pCM4</TargetDlgDllArguments>
</DllOption>
<DebugOption>
<OPTHX>
<HexSelection>1</HexSelection>
<HexRangeLowAddress>0</HexRangeLowAddress>
<HexRangeHighAddress>0</HexRangeHighAddress>
<HexOffset>0</HexOffset>
<Oh166RecLen>16</Oh166RecLen>
</OPTHX>
</DebugOption>
<Utilities>
<Flash1>
<UseTargetDll>1</UseTargetDll>
<UseExternalTool>0</UseExternalTool>
<RunIndependent>0</RunIndependent>
<UpdateFlashBeforeDebugging>1</UpdateFlashBeforeDebugging>
<Capability>1</Capability>
<DriverSelection>4096</DriverSelection>
</Flash1>
<bUseTDR>1</bUseTDR>
<Flash2>BIN\UL2CM3.DLL</Flash2>
<Flash3></Flash3>
<Flash4></Flash4>
<pFcarmOut></pFcarmOut>
<pFcarmGrp></pFcarmGrp>
<pFcArmRoot></pFcArmRoot>
<FcArmLst>0</FcArmLst>
</Utilities>
<TargetArmAds>
<ArmAdsMisc>
<GenerateListings>0</GenerateListings>
<asHll>1</asHll>
<asAsm>1</asAsm>
<asMacX>1</asMacX>
<asSyms>1</asSyms>
<asFals>1</asFals>
<asDbgD>1</asDbgD>
<asForm>1</asForm>
<ldLst>0</ldLst>
<ldmm>1</ldmm>
<ldXref>1</ldXref>
<BigEnd>0</BigEnd>
<AdsALst>1</AdsALst>
<AdsACrf>1</AdsACrf>
<AdsANop>0</AdsANop>
<AdsANot>0</AdsANot>
<AdsLLst>1</AdsLLst>
<AdsLmap>1</AdsLmap>
<AdsLcgr>1</AdsLcgr>
<AdsLsym>1</AdsLsym>
<AdsLszi>1</AdsLszi>
<AdsLtoi>1</AdsLtoi>
<AdsLsun>1</AdsLsun>
<AdsLven>1</AdsLven>
<AdsLsxf>1</AdsLsxf>
<RvctClst>0</RvctClst>
<GenPPlst>0</GenPPlst>
<AdsCpuType>"Cortex-M4"</AdsCpuType>
<RvctDeviceName></RvctDeviceName>
<mOS>0</mOS>
<uocRom>0</uocRom>
<uocRam>0</uocRam>
<hadIROM>1</hadIROM>
<hadIRAM>1</hadIRAM>
<hadXRAM>0</hadXRAM>
<uocXRam>0</uocXRam>
<RvdsVP>0</RvdsVP>
<RvdsMve>0</RvdsMve>
<RvdsCdeCp>0</RvdsCdeCp>
<hadIRAM2>0</hadIRAM2>
<hadIROM2>0</hadIROM2>
<StupSel>8</StupSel>
<useUlib>0</useUlib>
<EndSel>0</EndSel>
<uLtcg>0</uLtcg>
<nSecure>0</nSecure>
<RoSelD>3</RoSelD>
<RwSelD>3</RwSelD>
<CodeSel>0</CodeSel>
<OptFeed>0</OptFeed>
<NoZi1>0</NoZi1>
<NoZi2>0</NoZi2>
<NoZi3>0</NoZi3>
<NoZi4>0</NoZi4>
<NoZi5>0</NoZi5>
<Ro1Chk>0</Ro1Chk>
<Ro2Chk>0</Ro2Chk>
<Ro3Chk>0</Ro3Chk>
<Ir1Chk>1</Ir1Chk>
<Ir2Chk>0</Ir2Chk>
<Ra1Chk>0</Ra1Chk>
<Ra2Chk>0</Ra2Chk>
<Ra3Chk>0</Ra3Chk>
<Im1Chk>1</Im1Chk>
<Im2Chk>0</Im2Chk>
<OnChipMemories>
<Ocm1>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocm1>
<Ocm2>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocm2>
<Ocm3>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocm3>
<Ocm4>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocm4>
<Ocm5>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocm5>
<Ocm6>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocm6>
<IRAM>
<Type>0</Type>
<StartAddress>0x20000000</StartAddress>
<Size>0x8000</Size>
</IRAM>
<IROM>
<Type>1</Type>
<StartAddress>0x8000000</StartAddress>
<Size>0x40000</Size>
</IROM>
<XRAM>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</XRAM>
<OCR_RVCT1>
<Type>1</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</OCR_RVCT1>
<OCR_RVCT2>
<Type>1</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</OCR_RVCT2>
<OCR_RVCT3>
<Type>1</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</OCR_RVCT3>
<OCR_RVCT4>
<Type>1</Type>
<StartAddress>0x8000000</StartAddress>
<Size>0x40000</Size>
</OCR_RVCT4>
<OCR_RVCT5>
<Type>1</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</OCR_RVCT5>
<OCR_RVCT6>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</OCR_RVCT6>
<OCR_RVCT7>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</OCR_RVCT7>
<OCR_RVCT8>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</OCR_RVCT8>
<OCR_RVCT9>
<Type>0</Type>
<StartAddress>0x20000000</StartAddress>
<Size>0x8000</Size>
</OCR_RVCT9>
<OCR_RVCT10>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</OCR_RVCT10>
</OnChipMemories>
<RvctStartVector></RvctStartVector>
</ArmAdsMisc>
<Cads>
<interw>1</interw>
<Optim>1</Optim>
<oTime>0</oTime>
<SplitLS>0</SplitLS>
<OneElfS>1</OneElfS>
<Strict>0</Strict>
<EnumInt>0</EnumInt>
<PlainCh>0</PlainCh>
<Ropi>0</Ropi>
<Rwpi>0</Rwpi>
<wLevel>2</wLevel>
<uThumb>0</uThumb>
<uSurpInc>0</uSurpInc>
<uC99>0</uC99>
<uGnu>0</uGnu>
<useXO>0</useXO>
<v6Lang>1</v6Lang>
<v6LangP>1</v6LangP>
<vShortEn>1</vShortEn>
<vShortWch>1</vShortWch>
<v6Lto>0</v6Lto>
<v6WtE>0</v6WtE>
<v6Rtti>0</v6Rtti>
<VariousControls>
<MiscControls></MiscControls>
<Define>AT32F415RCT7,USE_STDPERIPH_DRIVER,AT_START_F415_V1</Define>
<Undefine></Undefine>
<IncludePath>..\..\..\..\..\..\libraries\cmsis\cm4\core_support;..\..\..\..\..\..\libraries\cmsis\cm4\device_support;..\..\..\..\..\..\libraries\drivers\inc;..\..\..\..\..\at32f415_board;..\inc;..\..\..\..\..\..\middlewares\usb_drivers\inc;..\..\..\..\..\..\middlewares\usbd_class\winusb</IncludePath>
</VariousControls>
</Cads>
<Aads>
<interw>1</interw>
<Ropi>0</Ropi>
<Rwpi>0</Rwpi>
<thumb>0</thumb>
<SplitLS>0</SplitLS>
<SwStkChk>0</SwStkChk>
<NoWarn>0</NoWarn>
<uSurpInc>0</uSurpInc>
<useXO>0</useXO>
<ClangAsOpt>4</ClangAsOpt>
<VariousControls>
<MiscControls></MiscControls>
<Define></Define>
<Undefine></Undefine>
<IncludePath></IncludePath>
</VariousControls>
</Aads>
<LDads>
<umfTarg>1</umfTarg>
<Ropi>0</Ropi>
<Rwpi>0</Rwpi>
<noStLib>0</noStLib>
<RepFail>1</RepFail>
<useFile>0</useFile>
<TextAddressRange>0x08000000</TextAddressRange>
<DataAddressRange>0x20000000</DataAddressRange>
<pXoBase></pXoBase>
<ScatterFile></ScatterFile>
<IncludeLibs></IncludeLibs>
<IncludeLibsPath></IncludeLibsPath>
<Misc></Misc>
<LinkerInputFile></LinkerInputFile>
<DisabledWarnings></DisabledWarnings>
</LDads>
</TargetArmAds>
</TargetOption>
<Groups>
<Group>
<GroupName>user</GroupName>
<Files>
<File>
<FileName>at32f415_clock.c</FileName>
<FileType>1</FileType>
<FilePath>..\src\at32f415_clock.c</FilePath>
</File>
<File>
<FileName>at32f415_int.c</FileName>
<FileType>1</FileType>
<FilePath>..\src\at32f415_int.c</FilePath>
</File>
<File>
<FileName>main.c</FileName>
<FileType>1</FileType>
<FilePath>..\src\main.c</FilePath>
</File>
</Files>
</Group>
<Group>
<GroupName>bsp</GroupName>
<Files>
<File>
<FileName>at32f415_board.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\..\at32f415_board\at32f415_board.c</FilePath>
</File>
</Files>
</Group>
<Group>
<GroupName>firmware</GroupName>
<Files>
<File>
<FileName>at32f415_crm.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\..\..\libraries\drivers\src\at32f415_crm.c</FilePath>
</File>
<File>
<FileName>at32f415_exint.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\..\..\libraries\drivers\src\at32f415_exint.c</FilePath>
</File>
<File>
<FileName>at32f415_flash.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\..\..\libraries\drivers\src\at32f415_flash.c</FilePath>
</File>
<File>
<FileName>at32f415_gpio.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\..\..\libraries\drivers\src\at32f415_gpio.c</FilePath>
</File>
<File>
<FileName>at32f415_misc.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\..\..\libraries\drivers\src\at32f415_misc.c</FilePath>
</File>
<File>
<FileName>at32f415_pwc.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\..\..\libraries\drivers\src\at32f415_pwc.c</FilePath>
</File>
<File>
<FileName>at32f415_tmr.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\..\..\libraries\drivers\src\at32f415_tmr.c</FilePath>
</File>
<File>
<FileName>at32f415_usart.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\..\..\libraries\drivers\src\at32f415_usart.c</FilePath>
</File>
<File>
<FileName>at32f415_usb.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\..\..\libraries\drivers\src\at32f415_usb.c</FilePath>
</File>
</Files>
</Group>
<Group>
<GroupName>cmsis</GroupName>
<Files>
<File>
<FileName>system_at32f415.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\..\..\libraries\cmsis\cm4\device_support\system_at32f415.c</FilePath>
</File>
<File>
<FileName>startup_at32f415.s</FileName>
<FileType>2</FileType>
<FilePath>..\..\..\..\..\..\libraries\cmsis\cm4\device_support\startup\mdk\startup_at32f415.s</FilePath>
</File>
</Files>
</Group>
<Group>
<GroupName>usbd_driver</GroupName>
<Files>
<File>
<FileName>usb_core.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\..\..\middlewares\usb_drivers\src\usb_core.c</FilePath>
</File>
<File>
<FileName>usbd_core.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\..\..\middlewares\usb_drivers\src\usbd_core.c</FilePath>
</File>
<File>
<FileName>usbd_int.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\..\..\middlewares\usb_drivers\src\usbd_int.c</FilePath>
</File>
<File>
<FileName>usbd_sdr.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\..\..\middlewares\usb_drivers\src\usbd_sdr.c</FilePath>
</File>
</Files>
</Group>
<Group>
<GroupName>usbd_class</GroupName>
<Files>
<File>
<FileName>winusb_class.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\..\..\middlewares\usbd_class\winusb\winusb_class.c</FilePath>
</File>
<File>
<FileName>winusb_desc.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\..\..\middlewares\usbd_class\winusb\winusb_desc.c</FilePath>
</File>
</Files>
</Group>
<Group>
<GroupName>readme</GroupName>
<Files>
<File>
<FileName>readme.txt</FileName>
<FileType>5</FileType>
<FilePath>..\readme.txt</FilePath>
</File>
</Files>
</Group>
</Groups>
</Target>
</Targets>
<RTE>
<apis/>
<components/>
<files/>
</RTE>
<LayerInfo>
<Layers>
<Layer>
<LayName>&lt;Project Info&gt;</LayName>
<LayDesc></LayDesc>
<LayUrl></LayUrl>
<LayKeys></LayKeys>
<LayCat></LayCat>
<LayLic></LayLic>
<LayTarg>0</LayTarg>
<LayPrjMark>1</LayPrjMark>
</Layer>
</Layers>
</LayerInfo>
</Project>

View File

@@ -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.

View File

@@ -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();
}

View File

@@ -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)
{
}
/**
* @}
*/
/**
* @}
*/

View File

@@ -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);
}
/**
* @}
*/
/**
* @}
*/

View File

@@ -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);

View File

@@ -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))

View File

@@ -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);

Some files were not shown because too many files have changed in this diff Show More