21ic问答首页 - GD32A503 定时器7两路输入捕获不能同时工作
GD32A503 定时器7两路输入捕获不能同时工作
void timer7_config_icp(void)
{
timer_ic_parameter_struct timer_icinitpara;
timer_parameter_struct timer_initpara;
rcu_periph_clock_enable(RCU_TIMER7);
timer_deinit(TIMER7);
timer_initpara.prescaler = 1999;//100M/2000=0.05MHZ
timer_initpara.alignedmode = TIMER_COUNTER_EDGE;
timer_initpara.counterdirection = TIMER_COUNTER_UP;
timer_initpara.period = 65536-1;
timer_initpara.clockdivision = TIMER_CKDIV_DIV1;
timer_initpara.repetitioncounter = 4;
timer_init(TIMER7, &timer_initpara);
timer_input_trigger_source_select(TIMER7, TIMER_SMCFG_TRGSEL_CI0FE0|TIMER7, TIMER_SMCFG_TRGSEL_CI1FE1); // 输入触发源为通道0
timer_slave_mode_select(TIMER7, TIMER_SLAVE_MODE_RESTART); // 从模式选择为复位模式
timer_master_slave_mode_config(TIMER7, TIMER_MASTER_SLAVE_MODE_ENABLE); // 使能从模式
timer_icinitpara.icpolarity = TIMER_IC_POLARITY_RISING; // 配置了 CH0P [CH0NP==0, CH0P==0]:把 CIxFE0 的上升沿作为捕获或者从模式下触发的有效信号,并且 CIxFE0 不会被翻转。
timer_icinitpara.icselection = TIMER_IC_SELECTION_DIRECTTI;
timer_icinitpara.icprescaler = TIMER_IC_PSC_DIV1;
timer_icinitpara.icfilter = 4;
timer_input_pwm_capture_config(TIMER7, TIMER_CH_0|TIMER_CH_1, &timer_icinitpara);
timer_auto_reload_shadow_enable(TIMER7);
timer_interrupt_flag_clear(TIMER7, TIMER_INT_CH0|TIMER_INT_CH1); // 清除通道0中断标志位
timer_interrupt_enable(TIMER7, TIMER_INT_CH0|TIMER_INT_CH1); // 使能通道0中断
nvic_priority_group_set(NVIC_PRIGROUP_PRE4_SUB0); // 抢占优先级4位,响应优先级0位
nvic_irq_enable(TIMER7_Channel_IRQn, 0, 0); // 使能中断服务,抢占优先级为1
timer_enable(TIMER7);
}
{
timer_ic_parameter_struct timer_icinitpara;
timer_parameter_struct timer_initpara;
rcu_periph_clock_enable(RCU_TIMER7);
timer_deinit(TIMER7);
timer_initpara.prescaler = 1999;//100M/2000=0.05MHZ
timer_initpara.alignedmode = TIMER_COUNTER_EDGE;
timer_initpara.counterdirection = TIMER_COUNTER_UP;
timer_initpara.period = 65536-1;
timer_initpara.clockdivision = TIMER_CKDIV_DIV1;
timer_initpara.repetitioncounter = 4;
timer_init(TIMER7, &timer_initpara);
timer_input_trigger_source_select(TIMER7, TIMER_SMCFG_TRGSEL_CI0FE0|TIMER7, TIMER_SMCFG_TRGSEL_CI1FE1); // 输入触发源为通道0
timer_slave_mode_select(TIMER7, TIMER_SLAVE_MODE_RESTART); // 从模式选择为复位模式
timer_master_slave_mode_config(TIMER7, TIMER_MASTER_SLAVE_MODE_ENABLE); // 使能从模式
timer_icinitpara.icpolarity = TIMER_IC_POLARITY_RISING; // 配置了 CH0P [CH0NP==0, CH0P==0]:把 CIxFE0 的上升沿作为捕获或者从模式下触发的有效信号,并且 CIxFE0 不会被翻转。
timer_icinitpara.icselection = TIMER_IC_SELECTION_DIRECTTI;
timer_icinitpara.icprescaler = TIMER_IC_PSC_DIV1;
timer_icinitpara.icfilter = 4;
timer_input_pwm_capture_config(TIMER7, TIMER_CH_0|TIMER_CH_1, &timer_icinitpara);
timer_auto_reload_shadow_enable(TIMER7);
timer_interrupt_flag_clear(TIMER7, TIMER_INT_CH0|TIMER_INT_CH1); // 清除通道0中断标志位
timer_interrupt_enable(TIMER7, TIMER_INT_CH0|TIMER_INT_CH1); // 使能通道0中断
nvic_priority_group_set(NVIC_PRIGROUP_PRE4_SUB0); // 抢占优先级4位,响应优先级0位
nvic_irq_enable(TIMER7_Channel_IRQn, 0, 0); // 使能中断服务,抢占优先级为1
timer_enable(TIMER7);
}
您需要登录后才可以回复 登录 | 注册