Просмотр исходного кода

use sched_timer call foc的部分

Signed-off-by: huhui <huhui@sharkgulf.com>
huhui 3 лет назад
Родитель
Сommit
4cb196470c

+ 1 - 0
Applications/app/app.c

@@ -47,6 +47,7 @@ void app_start(void){
 	can_message_init();
 	restore_config();
 	mc_init();
+	gpio_led1_enable(true);
 	shark_task_create(_app_low_task, NULL);
 
 	sys_debug("mc start\n");

+ 42 - 1
Applications/bsp/adc.c

@@ -4,6 +4,38 @@
 #include "os/os_task.h"
 #include "libs/logger.h"
 
+//#define REG_CHAN_DMA 1
+
+#ifdef REG_CHAN_DMA
+uint16_t adc_buffer[2] = {0};
+
+static void adc_dma_init(void)
+{
+    dma_parameter_struct dma_init_struct;
+    rcu_periph_clock_enable(RCU_DMA0);
+
+    dma_deinit(DMA0, DMA_CH0);
+    dma_init_struct.direction    = DMA_PERIPHERAL_TO_MEMORY;
+    dma_init_struct.memory_addr  = (uint32_t)adc_buffer;
+    dma_init_struct.memory_inc   = DMA_MEMORY_INCREASE_ENABLE;
+    dma_init_struct.memory_width = DMA_MEMORY_WIDTH_16BIT;
+    dma_init_struct.number       = 2;
+    dma_init_struct.periph_addr  = (uint32_t)(&ADC_RDATA(ADC0));
+    dma_init_struct.periph_inc   = DMA_PERIPH_INCREASE_DISABLE;
+    dma_init_struct.periph_width = DMA_PERIPHERAL_WIDTH_16BIT;
+    dma_init_struct.priority     = DMA_PRIORITY_ULTRA_HIGH;
+    dma_init(DMA0, DMA_CH0, &dma_init_struct);
+    dma_circulation_enable(DMA0, DMA_CH0);
+    dma_memory_to_memory_disable(DMA0, DMA_CH0);
+
+    /* enable the full transfer interrupt */
+    dma_interrupt_flag_clear(DMA0, DMA_CH0, DMA_INT_FLAG_FTF);
+    dma_interrupt_enable(DMA0, DMA_CH0, DMA_INT_FTF);
+
+    dma_channel_enable(DMA0, DMA_CH0);
+}
+#endif
+
 static void adc0_init(void){
     /* config ADC clock */
     rcu_adc_clock_config(RCU_CKADC_CKAPB2_DIV4); //APB2 clk 120M, adc clk 30M
@@ -35,6 +67,12 @@ static void adc0_init(void){
     /* ADC external trigger enable */
     adc_external_trigger_config(ADC0, ADC_INSERTED_CHANNEL, ENABLE);
 
+#ifdef REG_CHAN_DMA
+    /* configure ADC regular channel */
+    adc_channel_length_config(ADC0, ADC_REGULAR_CHANNEL, 2);
+    adc_regular_channel_config(ADC0, 0, VBUS_V_CHAN, ADC_SAMPLETIME_7POINT5);
+    adc_regular_channel_config(ADC0, 1, THROTTLE_CHAN, ADC_SAMPLETIME_7POINT5);
+#endif
     /* configure ADC regular channel trigger */
     adc_external_trigger_source_config(ADC0, ADC_REGULAR_CHANNEL, ADC0_1_2_EXTTRIG_REGULAR_NONE);
     adc_external_trigger_config(ADC0, ADC_REGULAR_CHANNEL, ENABLE);
@@ -110,6 +148,9 @@ void adc_init(void) {
 	adc_gpio_init();
 	adc0_init();
 	adc1_init();
+#ifdef REG_CHAN_DMA	
+	adc_dma_init();
+#endif
 }
 
 void adc_start_convert(void) {
@@ -154,7 +195,7 @@ s32 adc_sample_regular_channel(int channel, int times) {
 	int max = -0xFFFFF;
 	u64 start_time;
 	adc_channel_length_config(adc_device, ADC_REGULAR_CHANNEL, 1);
-	adc_regular_channel_config(adc_device, 0, channel, ADC_SAMPLETIME_55POINT5);
+	adc_regular_channel_config(adc_device, 0, channel, ADC_SAMPLETIME_7POINT5);
 	while(count < times){
 restart:		
 		start_time = shark_get_mseconds();

+ 1 - 1
Applications/bsp/adc.h

@@ -15,7 +15,7 @@ inserted ADC 由timer0 ch3触发,
 
 #define MOTOR_TEMP_CHAN ADC_CHANNEL_11
 #define VBUS_V_CHAN 	ADC_CHANNEL_0
-
+#define THROTTLE_CHAN   ADC_CHANNEL_2 
 #else
 #define MOTOR_TEMP_CHAN ADC_CHANNEL_0
 #define THROTTLE_CHAN ADC_CHANNEL_1 //转把信号

+ 5 - 0
Applications/bsp/bsp.h

@@ -63,6 +63,11 @@
 #define TIMER_UP_IRQ_PRIORITY 0
 #define ADC_IRQ_PRIORITY 1
 #define HALL_IRQ_PRIORITY 2
+#define SCHED_TIMER_IRQ_PRIORITY 3
+#define EBREAK_IRQ_PRIORITY 2
+#define CAN_IRQ_PRIORITY       6 
+#define RTC_IRQ_PRIORITY       7 
+#define UART_IRQ_PRIORITY      6 
 
 
 #define THREE_SHUNTS_SAMPLE 1

+ 2 - 2
Applications/bsp/can.c

@@ -123,7 +123,7 @@ static void shark_can0_config(void)
     can_filter_mask_mode_init(CAN_MY_ADDRESS, CAN_FILTER_DEST_MASK, CAN_EXTENDED_FIFO0, 0);
 
   	nvic_priority_group_set(NVIC_PRIGROUP_PRE4_SUB0);  
-  	nvic_irq_enable(USBD_LP_CAN0_RX0_IRQn,2,0);	
+  	nvic_irq_enable(USBD_LP_CAN0_RX0_IRQn,CAN_IRQ_PRIORITY,0);	
     /* enable can receive FIFO0 not empty interrupt */
     can_interrupt_enable(CAN0, CAN_INTEN_RFNEIE0);
 	/* recv broadcast, fifo1 */
@@ -135,7 +135,7 @@ static void shark_can0_config(void)
 	
 	can_filter_mask_mode_init(CAN_NODE_ADDR_ACU, CAN_FILTER_DEST_MASK, CAN_EXTENDED_FIFO1, 4);
 	
-	nvic_irq_enable(CAN0_RX1_IRQn,10,0);	
+	nvic_irq_enable(CAN0_RX1_IRQn,CAN_IRQ_PRIORITY,0);	
     /* enable can receive FIFO1 not empty interrupt */
     can_interrupt_enable(CAN0, CAN_INTEN_RFNEIE1);
 }

+ 1 - 1
Applications/bsp/delay.h

@@ -6,7 +6,7 @@ extern uint32_t utc_seconds;
 
 void task_ticks_enable(void);
 uint32_t task_ticks_abs(void);
-
+uint32_t task_ticks_rel(uint32_t start);
 void systick_close(void);
 void delay_ms(uint32_t count);
 void delay_us(uint16_t cnt);

+ 2 - 2
Applications/bsp/gd32_rtc.c

@@ -115,7 +115,7 @@ static void gd32_rtc_first_init(void){
 
 static void gd32_rtc_enable_second_irq(int enable){
 	if (enable){
-		nvic_irq_enable(RTC_IRQn, 2U, 0U);
+		nvic_irq_enable(RTC_IRQn, RTC_IRQ_PRIORITY, 0U);
 	}else{
 		nvic_irq_disable(RTC_IRQn);
 	}
@@ -161,7 +161,7 @@ static int set_rtc_alarm(uint32_t sencod){
 
 
 int gd32_rtc_start_alarm(uint32_t second){
-    nvic_irq_enable(RTC_Alarm_IRQn, 2U, 0U);
+    nvic_irq_enable(RTC_Alarm_IRQn, RTC_IRQ_PRIORITY, 0U);
     exti_flag_clear(EXTI_17);
     exti_interrupt_enable(EXTI_17);
 	rtc_register_sync_wait();

+ 27 - 0
Applications/bsp/gpio.c

@@ -2,6 +2,10 @@
 #include "libs/utils.h"
 
 #define IR2136S_Enable_pin 0
+#define LED1_Enable_pin 1
+#define LED2_Enable_pin 2
+#define LED3_Enable_pin 3
+
 /*
 * gpio.c
 * all pins used as gpio(in/out/irq) must be init&accessed here
@@ -9,6 +13,9 @@
 const static gpio_pin_config_t _pins[] = {
 #ifdef GD32_FOC_DEMO
 	[IR2136S_Enable_pin] = {GPIOA, GPIO_PIN_12, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, 0},
+	[LED1_Enable_pin] = {GPIOD, GPIO_PIN_2, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, 0},
+	[LED2_Enable_pin] = {GPIOB, GPIO_PIN_9, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, 0},
+	[LED3_Enable_pin] = {GPIOC, GPIO_PIN_5, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, 0},
 #endif	
 };
 void gpio_pin_init(void){
@@ -33,6 +40,26 @@ bool gpio_get_brake(void) {
 }
 
 void gpio_ir2136_enable(bool enable) {
+#ifdef GD32_FOC_DEMO
 	gpio_bit_write(_pins[IR2136S_Enable_pin].group, _pins[IR2136S_Enable_pin].pin, (enable)?SET:RESET);
+#endif
+}
+
+void gpio_led1_enable(bool enable) {
+#ifdef GD32_FOC_DEMO
+	gpio_bit_write(_pins[LED1_Enable_pin].group, _pins[LED1_Enable_pin].pin, (enable)?SET:RESET);
+#endif
+}
+
+void gpio_led2_enable(bool enable) {
+#ifdef GD32_FOC_DEMO
+	gpio_bit_write(_pins[LED2_Enable_pin].group, _pins[LED2_Enable_pin].pin, (enable)?SET:RESET);
+#endif
+}
+
+void gpio_led3_enable(bool enable) {
+#ifdef GD32_FOC_DEMO
+	gpio_bit_write(_pins[LED3_Enable_pin].group, _pins[LED3_Enable_pin].pin, (enable)?SET:RESET);
+#endif
 }
 

+ 3 - 0
Applications/bsp/gpio.h

@@ -16,5 +16,8 @@ typedef struct {
 void gpio_pin_init(void);
 bool gpio_get_brake(void) ;
 void gpio_ir2136_enable(bool enable);
+void gpio_led1_enable(bool enable);
+void gpio_led2_enable(bool enable);
+void gpio_led3_enable(bool enable);
 
 #endif /* _GPIO_PIN_H__ */

+ 0 - 6
Applications/bsp/mc_irqs.c

@@ -112,12 +112,6 @@ void TIMER0_BRK_IRQHandler(void) {
 	}
 }
 
-void TIMER5_IRQHandler(void) {
-	if (timer_interrupt_flag_get(TIMER5, TIMER_INT_FLAG_UP)) {
-		timer_interrupt_flag_clear(TIMER5, TIMER_INT_FLAG_UP);
-	}
-}
-
 #ifdef GD32_FOC_DEMO
 void EXTI0_IRQHandler(void)
 {

+ 3 - 3
Applications/bsp/pwm.c

@@ -163,7 +163,7 @@ static void _init_pwm_timer(void) {
     timer_break_config(timer,&timer_breakpara);
 	timer_interrupt_enable(timer, TIMER_INT_BRK);
 	timer_interrupt_flag_clear(timer, TIMER_INT_FLAG_BRK);
-	nvic_irq_enable(TIMER0_BRK_IRQn, 1, 0);		
+	nvic_irq_enable(TIMER0_BRK_IRQn, EBREAK_IRQ_PRIORITY, 0);		
 #else
 	_gpio_brakein_irq_enable();
 #endif
@@ -308,13 +308,13 @@ static void timer0_dma_config(void)
 static void _gpio_brakein_irq_enable(void){
 	gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOB, GPIO_PIN_SOURCE_4);
 	exti_init(EXTI_4, EXTI_INTERRUPT, EXTI_TRIG_BOTH);
-	nvic_irq_enable(EXTI4_IRQn, 4U, 0U);
+	nvic_irq_enable(EXTI4_IRQn, EBREAK_IRQ_PRIORITY, 0U);
 	exti_interrupt_flag_clear(EXTI_4);
 	exti_interrupt_enable(EXTI_4);
 
 	gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOB, GPIO_PIN_SOURCE_5);
 	exti_init(EXTI_5, EXTI_INTERRUPT, EXTI_TRIG_BOTH);
-	nvic_irq_enable(EXTI5_9_IRQn, 4U, 0U);
+	nvic_irq_enable(EXTI5_9_IRQn, EBREAK_IRQ_PRIORITY, 0U);
 	exti_interrupt_flag_clear(EXTI_5);
 	exti_interrupt_enable(EXTI_5);	
 }

+ 35 - 0
Applications/bsp/sched_timer.c

@@ -0,0 +1,35 @@
+#include "bsp/sched_timer.h"
+
+void sched_timer_enable(u32 us) {
+    timer_parameter_struct timer_initpara;
+
+    rcu_periph_clock_enable(SCHED_TIMER_RCU);
+
+    timer_deinit(SCHED_TIMER);
+    /* initialize TIMER init parameter struct */
+    timer_struct_para_init(&timer_initpara);
+    /* TIMER1 configuration */
+    timer_initpara.prescaler         = TIM_CLOCK_MHz;
+    timer_initpara.alignedmode       = TIMER_COUNTER_EDGE;
+    timer_initpara.counterdirection  = TIMER_COUNTER_UP;
+    timer_initpara.period            = us;//400;
+    timer_initpara.clockdivision     = TIMER_CKDIV_DIV1;
+	timer_initpara.repetitioncounter = 0;
+    timer_init(SCHED_TIMER, &timer_initpara);
+	timer_counter_value_config(SCHED_TIMER,0);
+
+	timer_interrupt_flag_clear(SCHED_TIMER, TIMER_INT_UP);
+	
+    timer_interrupt_enable(SCHED_TIMER, TIMER_INT_UP);
+
+	nvic_irq_enable(SCHED_TIMER_IRQ, SCHED_TIMER_IRQ_PRIORITY, 0);
+
+	timer_enable(SCHED_TIMER);
+}
+__weak void Sched_MC_mTask(void) {}
+void SCHED_TIMER_IRQHandler(void) {
+	if(SET == timer_interrupt_flag_get(SCHED_TIMER, TIMER_INT_UP)) {
+		timer_interrupt_flag_clear(SCHED_TIMER, TIMER_INT_UP);
+		Sched_MC_mTask();
+	}
+}

+ 12 - 0
Applications/bsp/sched_timer.h

@@ -0,0 +1,12 @@
+#ifndef _Sched_Timer_H__
+#define _Sched_Timer_H__
+#include "bsp/bsp.h"
+#include "os/os_types.h"
+#define SCHED_TIMER TIMER5
+#define SCHED_TIMER_RCU RCU_TIMER5
+#define SCHED_TIMER_IRQ TIMER5_IRQn
+#define SCHED_TIMER_IRQHandler TIMER5_IRQHandler
+
+void sched_timer_enable(u32 us);
+
+#endif /* _Sched_Timer_H__ */

+ 1 - 3
Applications/bsp/uart.c

@@ -204,8 +204,6 @@ static void shark_uart_tx_dma_init(shark_uart_t *uart){
 	dma_circulation_disable(SHARK_UART0_tx_dma, uart->tx_dma_ch);
 	dma_memory_to_memory_disable(SHARK_UART0_tx_dma, uart->tx_dma_ch);
 	usart_dma_transmit_config(uart->uart_com, USART_DENT_ENABLE);
-	//nvic_irq_enable(SHARK_UART0_DMA_TX_IRQ ,4, 0);
-	//dma_interrupt_enable(uart->tx_dma_ch, DMA_INT_FTF);
 }
 
 #if ENABLE_RX_DMA==1
@@ -362,7 +360,7 @@ void shark_uart_init(uart_enum_t uart_no)
 
 	shark_task_create(shark_uart_task, uart);
 #if ENABLE_RX_DMA==0
-	nvic_irq_enable(SHARK_UART0_irq, 3, 0);
+	nvic_irq_enable(SHARK_UART0_irq, UART_IRQ_PRIORITY, 0);
 #endif
 	uart->uart_no_data = false;
 }

+ 11 - 5
Applications/foc/core/PMSM_FOC_Core.c

@@ -7,6 +7,7 @@
 #include "foc/motor/current.h"
 #include "foc/motor/hall.h"
 #include "foc/core/svpwm.h"
+#include "foc/samples.h"
 #include "bsp/pwm.h"
 #include "libs/logger.h"
 
@@ -105,13 +106,18 @@ void PMSM_FOC_CoreInit(void) {
 	PMSM_FOC_Reset_PID();
 }
 
-static __INLINE void PMSM_FOC_Update_Encoder(void) {
+static __INLINE void PMSM_FOC_Update_Hardware(void) {
 	if (_gFOC_Ctrl.in.s_manualAngle != 0xFFFF) {
 		_gFOC_Ctrl.in.s_motAngle = _gFOC_Ctrl.in.s_manualAngle;
 	}else {
 		_gFOC_Ctrl.in.s_motAngle = hall_sensor_get_theta();
 	}
 	_gFOC_Ctrl.in.s_motRPM = hall_sensor_get_speed();
+
+		//sample current
+	phase_current_get(_gFOC_Ctrl.in.s_iABC);
+
+	_gFOC_Ctrl.in.s_vDC = get_vbus_sfix5();
 }
 
 /* MPTA, 弱磁, 功率限制 */
@@ -127,9 +133,8 @@ void PMSM_FOC_Schedule(void) {
 	AB_t vAB;
 	s16q5_t *iabc = _gFOC_Ctrl.in.s_iABC;
 
-	PMSM_FOC_Update_Encoder();
-	//sample current
-	phase_current_get(iabc);
+	PMSM_FOC_Update_Hardware();
+
 	if (_gFOC_Ctrl.out.n_RunMode != OPEN_MODE) {
 		Clark(iabc[0], iabc[1], iabc[2], &vAB);
 
@@ -166,7 +171,7 @@ void PMSM_FOC_LogDebug(void) {
 }
 
 /*called in media task */
-void PMSM_FOC_CtrlMode(void) {
+u8 PMSM_FOC_CtrlMode(void) {
 	if (!_gFOC_Ctrl.in.b_motEnable) {
 		_gFOC_Ctrl.out.n_RunMode = OPEN_MODE;
 	}else if (!_gFOC_Ctrl.in.b_motEnable || _gFOC_Ctrl.in.n_ctlMode == OPEN_MODE) {
@@ -176,6 +181,7 @@ void PMSM_FOC_CtrlMode(void) {
 	}else {
 		_gFOC_Ctrl.out.n_RunMode = TRQ_MODE;
 	}
+	return _gFOC_Ctrl.out.n_RunMode;
 }
 
 /*called in media task */

+ 2 - 0
Applications/foc/core/PMSM_FOC_Core.h

@@ -106,6 +106,8 @@ typedef enum {
 
 void PMSM_FOC_CoreInit(void);
 void PMSM_FOC_Schedule(void);
+u8 PMSM_FOC_CtrlMode(void);
+void PMSM_FOC_idqCalc(void);
 void PMSM_FOC_Start(u8 nCtrlMode);
 void PMSM_FOC_Stop(void);
 void PMSM_FOC_iBusLimit(s16q5_t ibusLimit);

+ 1 - 1
Applications/foc/foc_config.h

@@ -28,6 +28,6 @@
 
 #define IDQ_CTRL_TS FOC_PWM_FS
 #define SPD_CTRL_TS 100
-
+#define SPD_CTRL_MS (1000/SPD_CTRL_TS)
 #endif /* _FOC_CONFIG_H__ */
 

+ 10 - 8
Applications/foc/motor/motor.c

@@ -1,22 +1,20 @@
 #include "foc/motor/motor.h"
 #include "foc/motor/current.h"
-#include "foc/core/PMSM_FOC_Core.h"
 #include "foc/foc_config.h"
 #include "foc/samples.h"
 #include "math/fast_math.h"
 #include "bsp/timer_count32.h"
 #include "libs/time_measure.h"
-#include "os/os_task.h"
 #include "bsp/delay.h"
 #include "bsp/bsp.h"
 #include "bsp/adc.h"
 #include "bsp/pwm.h"
 #include "foc/commands.h"
 #include "libs/logger.h"
+#include "bsp/sched_timer.h"
 
 static bool _motor_started = false;
 static float _motor_throttle = 0;
-static u32 mc_main_task_handler(void *param);
 
 void mc_init(void) {
 	adc_init();
@@ -24,7 +22,7 @@ void mc_init(void) {
 	samples_init();
 	foc_command_init();
 	PMSM_FOC_CoreInit();
-	shark_task_create(mc_main_task_handler, NULL);
+	sched_timer_enable(SPD_CTRL_MS);
 }
 
 bool mc_start(u8 mode) {
@@ -51,6 +49,7 @@ bool mc_start(u8 mode) {
 	PMSM_FOC_Start(mode);
 	_motor_throttle = 0;
 	_motor_started = true;
+	gpio_led2_enable(true);
 	return true;
 }
 
@@ -70,6 +69,7 @@ bool mc_stop(void) {
 	pwm_stop();
 	PMSM_FOC_Stop();
 	_motor_started = false;
+	gpio_led2_enable(false);
 	return true;
 }
 
@@ -191,15 +191,17 @@ void ADC_IRQHandler(void) {
 	TIME_MEATURE_END();
 }
 
-static u32 mc_main_task_handler(void *param) {
-	if (_motor_started) {
+/*FOC 的部分处理,比如速度环,状态机,转把采集等*/
+void Sched_MC_mTask(void) {
+	u8 runMode = PMSM_FOC_CtrlMode();
+	if (runMode != OPEN_MODE) {
 		if (get_throttle_float() != _motor_throttle) {
 			_motor_throttle = get_throttle_float();
 			float speed_Ref = _get_speed_from_throttle(_motor_throttle);
 			PMSM_FOC_Set_Speed(speed_Ref);
 			float torque_idq = _get_idq_from_throttle(_motor_throttle);
 			PMSM_FOC_Set_Trque(torque_idq);
-		}
+		}		
+		PMSM_FOC_idqCalc();
 	}
-	return 0;
 }

+ 5 - 2
Applications/foc/samples.c

@@ -5,6 +5,7 @@
 #include "math/fix_math.h"
 #include "os/os_task.h"
 #include "foc/foc_config.h"
+#include "bsp/delay.h"
 
 typedef struct {
 	s16q5_t value;
@@ -56,11 +57,13 @@ static u32 sample_task(void *param) {
 	sample_throttle();
 	return 0;
 }
-
+u32 sapmple_delta;
 static void sample_vbus(void){
-	s16 vadc = adc_sample_regular_channel(VBUS_V_CHAN, 16);
+	u32 ticks = task_ticks_abs();
+	s16 vadc = adc_sample_regular_channel(VBUS_V_CHAN, 3);
 	_vbus.value = S16_mul(vadc, VBUS_VOL_CEOF, 9);
 	LowPass_Filter_Fix(_vbus.filted_value, _vbus.value, _vbus.lowpass);
+	sapmple_delta = task_ticks_rel(ticks);
 }
 
 static void sample_throttle(void){

+ 62 - 35
Project/GD32_DEMO.uvoptx

@@ -117,6 +117,10 @@
         <pMon>Segger\JL2CM3.dll</pMon>
       </DebugOpt>
       <TargetDriverDllRegistry>
+        <SetRegEntry>
+          <Number>0</Number>
+          <Key>DLGUARM</Key>
+        </SetRegEntry>
         <SetRegEntry>
           <Number>0</Number>
           <Key>ARMRTXEVENTFLAGS</Key>
@@ -132,10 +136,6 @@
           <Key>ARMDBGFLAGS</Key>
           <Name></Name>
         </SetRegEntry>
-        <SetRegEntry>
-          <Number>0</Number>
-          <Key>DLGUARM</Key>
-        </SetRegEntry>
         <SetRegEntry>
           <Number>0</Number>
           <Key>JL2CM3</Key>
@@ -154,6 +154,21 @@
           <WinNumber>1</WinNumber>
           <ItemText>jtag_cmd</ItemText>
         </Ww>
+        <Ww>
+          <count>1</count>
+          <WinNumber>1</WinNumber>
+          <ItemText>_vbus,0x0A</ItemText>
+        </Ww>
+        <Ww>
+          <count>2</count>
+          <WinNumber>1</WinNumber>
+          <ItemText>sapmple_delta,0x0A</ItemText>
+        </Ww>
+        <Ww>
+          <count>3</count>
+          <WinNumber>1</WinNumber>
+          <ItemText>g_meas_timeup,0x0A</ItemText>
+        </Ww>
       </WatchWindow1>
       <Tracepoint>
         <THDelay>0</THDelay>
@@ -246,7 +261,7 @@
 
   <Group>
     <GroupName>Foc</GroupName>
-    <tvExp>0</tvExp>
+    <tvExp>1</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>
@@ -326,7 +341,7 @@
 
   <Group>
     <GroupName>Motor</GroupName>
-    <tvExp>0</tvExp>
+    <tvExp>1</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>
@@ -470,7 +485,7 @@
 
   <Group>
     <GroupName>BSP</GroupName>
-    <tvExp>0</tvExp>
+    <tvExp>1</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>
@@ -642,6 +657,18 @@
       <RteFlg>0</RteFlg>
       <bShared>0</bShared>
     </File>
+    <File>
+      <GroupNumber>6</GroupNumber>
+      <FileNumber>34</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\Applications\bsp\sched_timer.c</PathWithFileName>
+      <FilenameWithoutPath>sched_timer.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
   </Group>
 
   <Group>
@@ -652,7 +679,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>34</FileNumber>
+      <FileNumber>35</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -664,7 +691,7 @@
     </File>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>35</FileNumber>
+      <FileNumber>36</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -676,7 +703,7 @@
     </File>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>36</FileNumber>
+      <FileNumber>37</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -688,7 +715,7 @@
     </File>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>37</FileNumber>
+      <FileNumber>38</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -700,7 +727,7 @@
     </File>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>38</FileNumber>
+      <FileNumber>39</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -712,7 +739,7 @@
     </File>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>39</FileNumber>
+      <FileNumber>40</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -732,7 +759,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>8</GroupNumber>
-      <FileNumber>40</FileNumber>
+      <FileNumber>41</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -744,7 +771,7 @@
     </File>
     <File>
       <GroupNumber>8</GroupNumber>
-      <FileNumber>41</FileNumber>
+      <FileNumber>42</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -756,7 +783,7 @@
     </File>
     <File>
       <GroupNumber>8</GroupNumber>
-      <FileNumber>42</FileNumber>
+      <FileNumber>43</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -776,7 +803,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>43</FileNumber>
+      <FileNumber>44</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -788,7 +815,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>44</FileNumber>
+      <FileNumber>45</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -800,7 +827,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>45</FileNumber>
+      <FileNumber>46</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -812,7 +839,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>46</FileNumber>
+      <FileNumber>47</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -824,7 +851,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>47</FileNumber>
+      <FileNumber>48</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -836,7 +863,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>48</FileNumber>
+      <FileNumber>49</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -848,7 +875,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>49</FileNumber>
+      <FileNumber>50</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -860,7 +887,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>50</FileNumber>
+      <FileNumber>51</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -872,7 +899,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>51</FileNumber>
+      <FileNumber>52</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -884,7 +911,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>52</FileNumber>
+      <FileNumber>53</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -896,7 +923,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>53</FileNumber>
+      <FileNumber>54</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -908,7 +935,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>54</FileNumber>
+      <FileNumber>55</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -920,7 +947,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>55</FileNumber>
+      <FileNumber>56</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -932,7 +959,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>56</FileNumber>
+      <FileNumber>57</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -944,7 +971,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>57</FileNumber>
+      <FileNumber>58</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -956,7 +983,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>58</FileNumber>
+      <FileNumber>59</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -970,13 +997,13 @@
 
   <Group>
     <GroupName>StartUp</GroupName>
-    <tvExp>0</tvExp>
+    <tvExp>1</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>10</GroupNumber>
-      <FileNumber>59</FileNumber>
+      <FileNumber>60</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -988,7 +1015,7 @@
     </File>
     <File>
       <GroupNumber>10</GroupNumber>
-      <FileNumber>60</FileNumber>
+      <FileNumber>61</FileNumber>
       <FileType>2</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>

+ 5 - 0
Project/GD32_DEMO.uvprojx

@@ -573,6 +573,11 @@
               <FileType>1</FileType>
               <FilePath>..\Applications\bsp\delay.c</FilePath>
             </File>
+            <File>
+              <FileName>sched_timer.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\Applications\bsp\sched_timer.c</FilePath>
+            </File>
           </Files>
         </Group>
         <Group>

+ 39 - 27
Project/MC100.uvoptx

@@ -636,6 +636,18 @@
       <RteFlg>0</RteFlg>
       <bShared>0</bShared>
     </File>
+    <File>
+      <GroupNumber>6</GroupNumber>
+      <FileNumber>34</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\Applications\bsp\sched_timer.c</PathWithFileName>
+      <FilenameWithoutPath>sched_timer.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
   </Group>
 
   <Group>
@@ -646,7 +658,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>34</FileNumber>
+      <FileNumber>35</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -658,7 +670,7 @@
     </File>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>35</FileNumber>
+      <FileNumber>36</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -670,7 +682,7 @@
     </File>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>36</FileNumber>
+      <FileNumber>37</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -682,7 +694,7 @@
     </File>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>37</FileNumber>
+      <FileNumber>38</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -694,7 +706,7 @@
     </File>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>38</FileNumber>
+      <FileNumber>39</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -706,7 +718,7 @@
     </File>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>39</FileNumber>
+      <FileNumber>40</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -726,7 +738,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>8</GroupNumber>
-      <FileNumber>40</FileNumber>
+      <FileNumber>41</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -738,7 +750,7 @@
     </File>
     <File>
       <GroupNumber>8</GroupNumber>
-      <FileNumber>41</FileNumber>
+      <FileNumber>42</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -750,7 +762,7 @@
     </File>
     <File>
       <GroupNumber>8</GroupNumber>
-      <FileNumber>42</FileNumber>
+      <FileNumber>43</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -770,7 +782,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>43</FileNumber>
+      <FileNumber>44</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -782,7 +794,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>44</FileNumber>
+      <FileNumber>45</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -794,7 +806,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>45</FileNumber>
+      <FileNumber>46</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -806,7 +818,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>46</FileNumber>
+      <FileNumber>47</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -818,7 +830,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>47</FileNumber>
+      <FileNumber>48</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -830,7 +842,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>48</FileNumber>
+      <FileNumber>49</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -842,7 +854,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>49</FileNumber>
+      <FileNumber>50</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -854,7 +866,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>50</FileNumber>
+      <FileNumber>51</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -866,7 +878,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>51</FileNumber>
+      <FileNumber>52</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -878,7 +890,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>52</FileNumber>
+      <FileNumber>53</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -890,7 +902,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>53</FileNumber>
+      <FileNumber>54</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -902,7 +914,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>54</FileNumber>
+      <FileNumber>55</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -914,7 +926,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>55</FileNumber>
+      <FileNumber>56</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -926,7 +938,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>56</FileNumber>
+      <FileNumber>57</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -938,7 +950,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>57</FileNumber>
+      <FileNumber>58</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -950,7 +962,7 @@
     </File>
     <File>
       <GroupNumber>9</GroupNumber>
-      <FileNumber>58</FileNumber>
+      <FileNumber>59</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -970,7 +982,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>10</GroupNumber>
-      <FileNumber>59</FileNumber>
+      <FileNumber>60</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -982,7 +994,7 @@
     </File>
     <File>
       <GroupNumber>10</GroupNumber>
-      <FileNumber>60</FileNumber>
+      <FileNumber>61</FileNumber>
       <FileType>2</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>

+ 5 - 0
Project/MC100.uvprojx

@@ -573,6 +573,11 @@
               <FileType>1</FileType>
               <FilePath>..\Applications\bsp\delay.c</FilePath>
             </File>
+            <File>
+              <FileName>sched_timer.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\Applications\bsp\sched_timer.c</FilePath>
+            </File>
           </Files>
         </Group>
         <Group>