generated from hulk/gd32e23x_template_cmake_vscode
revert 3ad18bf1f1
revert Merge pull request 'dev' (#1) from dev into main Reviewed-on: #1
This commit is contained in:
@@ -6,9 +6,17 @@
|
||||
#include "systick.h"
|
||||
|
||||
volatile bool g_ultrasonic_measure_done = false;
|
||||
extern uint32_t g_capture_value;
|
||||
|
||||
void ultrasonic_tx_init(void) {
|
||||
|
||||
// TODO
|
||||
rcu_periph_clock_enable(RCU_GPIOA);
|
||||
|
||||
gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_0);
|
||||
gpio_output_options_set(GPIOA, GPIO_OTYPE_OD, GPIO_OSPEED_50MHZ, GPIO_PIN_0);
|
||||
gpio_bit_reset(GPIOA, GPIO_PIN_0);
|
||||
|
||||
rcu_periph_clock_enable(US_TX_GPIO_RCU);
|
||||
|
||||
gpio_mode_set(US_TX_GPIO_PORT, GPIO_MODE_AF, GPIO_PUPD_NONE, US_TX_GPIO_PIN);
|
||||
@@ -52,34 +60,42 @@ void ultrasonic_tx_init(void) {
|
||||
timer_counter_value_config(US_TX_TIMER, 0);
|
||||
|
||||
timer_interrupt_enable(US_TX_TIMER, TIMER_INT_UP);
|
||||
nvic_irq_enable(TIMER13_IRQn, 2U);
|
||||
nvic_irq_enable(TIMER13_IRQn, 2);
|
||||
|
||||
}
|
||||
|
||||
void ultrasonic_pwm_out_cycles(void) {
|
||||
|
||||
g_ultrasonic_measure_done = false;
|
||||
|
||||
// 停止发射定时器
|
||||
timer_disable(TIMER13);
|
||||
|
||||
timer_channel_output_state_config(TIMER13, TIMER_CH_0, TIMER_CCX_ENABLE);
|
||||
|
||||
// 重置并启动回波计时器
|
||||
timer_disable(US_ECHO_TIMER);
|
||||
|
||||
// 重要:清除所有中断标志
|
||||
// timer_interrupt_flag_clear(US_ECHO_TIMER, TIMER_INT_FLAG_CH0);
|
||||
// timer_interrupt_flag_clear(US_ECHO_TIMER, TIMER_INT_FLAG_UP);
|
||||
|
||||
// 重置计数器
|
||||
timer_counter_value_config(US_ECHO_TIMER, 0);
|
||||
|
||||
// 启动发射PWM
|
||||
timer_enable(US_TX_TIMER);
|
||||
timer_enable(TIMER15);
|
||||
|
||||
// 启动回波计时器
|
||||
timer_enable(US_ECHO_TIMER);
|
||||
}
|
||||
|
||||
// void ultrasonic_transmit_debounce_delay(const uint16_t micro_second) {
|
||||
// rcu_periph_clock_enable(US_TX_DELAY_RCU);
|
||||
// timer_deinit(US_TX_DELAY_TIMER);
|
||||
|
||||
// timer_parameter_struct timer_initpara;
|
||||
// timer_struct_para_init(&timer_initpara);
|
||||
// timer_initpara.prescaler = 71;
|
||||
// timer_initpara.alignedmode = TIMER_COUNTER_EDGE;
|
||||
// timer_initpara.counterdirection = TIMER_COUNTER_UP;
|
||||
// timer_initpara.period = micro_second - 1;
|
||||
// timer_initpara.clockdivision = TIMER_CKDIV_DIV1;
|
||||
// timer_initpara.repetitioncounter = 0;
|
||||
// timer_init(US_TX_DELAY_TIMER, &timer_initpara);
|
||||
|
||||
// timer_auto_reload_shadow_enable(US_TX_DELAY_TIMER);
|
||||
// timer_interrupt_enable(US_TX_DELAY_TIMER, TIMER_INT_UP);
|
||||
// nvic_irq_enable(TIMER15_IRQn, 1U);
|
||||
// }
|
||||
|
||||
void ultrasonic_receive_exti_config(void) {
|
||||
rcu_periph_clock_enable(US_RX_GPIO_RCU);
|
||||
rcu_periph_clock_enable(US_RX_EXTI_RCU);
|
||||
@@ -90,6 +106,8 @@ void ultrasonic_receive_exti_config(void) {
|
||||
|
||||
exti_init(US_RX_GPIO_EXTI, EXTI_INTERRUPT, EXTI_TRIG_FALLING);
|
||||
exti_flag_clear(US_RX_GPIO_EXTI);
|
||||
|
||||
// exti_interrupt_enable(EXTI_0);
|
||||
}
|
||||
|
||||
void ultrasonic_echo_timer_config(void) {
|
||||
@@ -98,43 +116,61 @@ void ultrasonic_echo_timer_config(void) {
|
||||
|
||||
timer_parameter_struct timer_initpara;
|
||||
timer_struct_para_init(&timer_initpara);
|
||||
timer_initpara.prescaler = 71; // 72MHz/72 = 1MHz (1us per count)
|
||||
timer_initpara.prescaler = 71;
|
||||
timer_initpara.alignedmode = TIMER_COUNTER_EDGE;
|
||||
timer_initpara.counterdirection = TIMER_COUNTER_UP;
|
||||
timer_initpara.period = (ULTRASONIC_MAX_TOF_RELOAD - 1);
|
||||
timer_initpara.period = ULTRASONIC_MAX_TOF_RELOAD - 1;
|
||||
timer_initpara.clockdivision = TIMER_CKDIV_DIV1;
|
||||
timer_init(US_ECHO_TIMER, &timer_initpara);
|
||||
timer_init(TIMER15, &timer_initpara);
|
||||
|
||||
timer_auto_reload_shadow_disable(US_ECHO_TIMER);
|
||||
|
||||
// 配置输出比较通道0
|
||||
timer_oc_parameter_struct timer_oc_initpara;
|
||||
timer_channel_output_struct_para_init(&timer_oc_initpara);
|
||||
timer_oc_initpara.outputstate = TIMER_CCX_ENABLE;
|
||||
timer_oc_initpara.ocpolarity = TIMER_OC_POLARITY_HIGH;
|
||||
timer_channel_output_config(US_ECHO_TIMER, TIMER_CH_0, &timer_oc_initpara);
|
||||
timer_channel_output_config(TIMER15, TIMER_CH_1,&timer_oc_initpara);
|
||||
|
||||
// 配置输出比较模式
|
||||
timer_channel_output_mode_config(US_ECHO_TIMER, TIMER_CH_0, TIMER_OC_MODE_TIMING);
|
||||
|
||||
// 设置比较值
|
||||
timer_channel_output_pulse_value_config(US_ECHO_TIMER, TIMER_CH_0, (ULTRASONIC_TX_RINGDOWN_RELOAD - 1));
|
||||
timer_interrupt_enable(TIMER15, TIMER_INT_CH1 | TIMER_INT_UP);
|
||||
nvic_irq_enable(TIMER15_IRQn, 0);
|
||||
|
||||
// 清除中断标志
|
||||
timer_interrupt_flag_clear(US_ECHO_TIMER, TIMER_INT_FLAG_CH0);
|
||||
timer_interrupt_flag_clear(US_ECHO_TIMER, TIMER_INT_FLAG_UP);
|
||||
|
||||
// 使能中断
|
||||
timer_interrupt_enable(US_ECHO_TIMER, TIMER_INT_UP); // UP中断
|
||||
timer_interrupt_enable(US_ECHO_TIMER, TIMER_INT_CH0); // CH0中断
|
||||
|
||||
nvic_irq_enable(US_ECHO_TIMER_IRQ, 1U);
|
||||
// timer_parameter_struct timer_initpara;
|
||||
// timer_struct_para_init(&timer_initpara);
|
||||
// timer_initpara.prescaler = 71;
|
||||
// timer_initpara.alignedmode = TIMER_COUNTER_EDGE;
|
||||
// timer_initpara.counterdirection = TIMER_COUNTER_UP;
|
||||
// timer_initpara.period = ULTRASONIC_MAX_TOF_RELOAD;
|
||||
// timer_initpara.clockdivision = TIMER_CKDIV_DIV1;
|
||||
// timer_initpara.repetitioncounter = 0;
|
||||
// timer_init(US_ECHO_TIMER, &timer_initpara);
|
||||
|
||||
// timer_ic_parameter_struct timer_icinitpara;
|
||||
// timer_channel_input_struct_para_init(&timer_icinitpara);
|
||||
// timer_icinitpara.icpolarity = TIMER_IC_POLARITY_BOTH_EDGE;
|
||||
// timer_icinitpara.icselection = TIMER_IC_SELECTION_INDIRECTTI;
|
||||
// timer_icinitpara.icprescaler = TIMER_IC_PSC_DIV1;
|
||||
// timer_icinitpara.icfilter = 0x03;
|
||||
// timer_input_capture_config(US_ECHO_TIMER, US_ECHO_CH, &timer_icinitpara);
|
||||
|
||||
|
||||
// timer_single_pulse_mode_config(US_ECHO_TIMER, TIMER_SP_MODE_SINGLE);
|
||||
}
|
||||
|
||||
void ultrasonic_config(void) {
|
||||
ultrasonic_tx_init();
|
||||
ultrasonic_receive_exti_config();
|
||||
// ultrasonic_transmit_debounce_delay(TIME_CORRECTION_US);
|
||||
// ultrasonic_receive_exti_config();
|
||||
ultrasonic_echo_timer_config();
|
||||
}
|
||||
|
||||
// uint16_t ultrasonic_calc_distance(void) {
|
||||
// // while (!ultrasonicMeasurementDone);
|
||||
// // uint32_t us_value = timer_channel_capture_value_register_read(US_ECHO_TIMER, US_ECHO_CH);
|
||||
// uint16_t distance = (TIME_CORRECTION_US + g_capture_value) * 17;
|
||||
// /*
|
||||
// * (TIME_CORRECTION_US + us_value) * 340 m/s
|
||||
// * -----------------------------------------
|
||||
// * 1000 000
|
||||
// * ----------------------------------------------
|
||||
// * 2
|
||||
// */
|
||||
// return distance;
|
||||
// }
|
||||
|
Reference in New Issue
Block a user