mirror of https://github.com/XIVN1987/DAPLink
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
107 lines
2.2 KiB
107 lines
2.2 KiB
#include "at32f425.h" |
|
#include "usb_core.h" |
|
#include "usbd_int.h" |
|
|
|
#include "DAP.h" |
|
#include "vcom_serial.h" |
|
#include "hid_transfer.h" |
|
|
|
|
|
/* 在 Option 弹窗的 C/C++ 页中: |
|
定义 DAP_FW_V1: 生成 CMSIS-DAP v1 固件,使用 HID 传输协议 |
|
不定义 DAP_FW_V1: 生成 CMSIS-DAP v2 固件,使用 WINUSB 传输协议 |
|
*/ |
|
|
|
|
|
otg_core_type Otg; |
|
|
|
|
|
void systemInit(void); |
|
void USB_Config(void); |
|
|
|
int main(void) |
|
{ |
|
systemInit(); |
|
|
|
DAP_Setup(); |
|
|
|
VCOM_Init(); |
|
|
|
USB_Config(); |
|
|
|
SysTick_Config(SystemCoreClock / 1000); // 1ms interrupt |
|
|
|
while(1) |
|
{ |
|
usbd_hid_process(); |
|
|
|
VCOM_TransferData(); |
|
} |
|
} |
|
|
|
|
|
void systemInit(void) |
|
{ |
|
flash_psr_set(FLASH_WAIT_CYCLE_2); |
|
|
|
crm_pll_config(CRM_PLL_SOURCE_HICK, CRM_PLL_MULT_24); // 4MHz * 24 = 96MHz |
|
crm_clock_source_enable(CRM_CLOCK_SOURCE_PLL, TRUE); |
|
while(crm_flag_get(CRM_PLL_STABLE_FLAG) != SET) |
|
{ |
|
} |
|
|
|
crm_ahb_div_set(CRM_AHB_DIV_1); |
|
crm_apb1_div_set(CRM_APB1_DIV_1); |
|
crm_apb2_div_set(CRM_APB2_DIV_1); |
|
|
|
crm_sysclk_switch(CRM_SCLK_PLL); |
|
while(crm_sysclk_switch_status_get() != CRM_SCLK_PLL) |
|
{ |
|
} |
|
|
|
system_core_clock_update(); |
|
} |
|
|
|
|
|
void USB_Config(void) |
|
{ |
|
crm_periph_clock_enable(CRM_OTGFS1_PERIPH_CLOCK, TRUE); |
|
crm_periph_clock_enable(CRM_ACC_PERIPH_CLOCK, TRUE); |
|
|
|
crm_usb_clock_source_select(CRM_USB_CLOCK_SOURCE_HICK); // => crm_hick_sclk_frequency_select(CRM_HICK_SCLK_48MHZ); |
|
// => crm_hick_divider_select(CRM_HICK48_NODIV); |
|
|
|
/* HICK 模块输出的原始时钟频率为 48MHz,但校准模块使用的采样时钟是除频(1/6)电路输出的时钟,频率约 8MHz */ |
|
acc_write_c1(7980); |
|
acc_write_c2(8000); |
|
acc_write_c3(8020); |
|
acc_calibration_mode_enable(ACC_CAL_HICKTRIM, TRUE); |
|
|
|
extern usbd_desc_handler hid_desc_handler; |
|
extern usbd_class_handler hid_class_handler; |
|
usbd_init(&Otg, USB_FULL_SPEED_CORE_ID, USB_OTG1_ID, &hid_class_handler, &hid_desc_handler); |
|
|
|
NVIC_EnableIRQ(OTGFS1_IRQn); |
|
} |
|
|
|
|
|
void OTGFS1_IRQHandler(void) |
|
{ |
|
usbd_irq_handler(&Otg); |
|
} |
|
|
|
|
|
volatile uint32_t SysTick_ms = 0; |
|
|
|
void SysTick_Handler(void) |
|
{ |
|
SysTick_ms++; |
|
} |
|
|
|
|
|
void usb_delay_ms(uint32_t ms) |
|
{ |
|
uint32_t start = SysTick_ms; |
|
|
|
while(SysTick_ms - start < ms) __NOP(); |
|
}
|
|
|