esp32s3的mcpwm的疑问,线程安全吗?怎么
Posted: Thu Apr 13, 2023 6:07 am
1.官方驱动函数 里面调用了 heap_caps_calloc 创建各种结构体,heap_caps_calloc 函数线程安全吗?
2.mcpwm 有没有中断 例程,当pwm update 的中断 cmp 的中断
2.mcpwm 有没有中断 例程,当pwm update 的中断 cmp 的中断
- void pwm_init(void)
- {
- // mcpwm timer
- //定义变量 timer
- mcpwm_timer_handle_t timer;
- //定义操作指针 后面的 gen 和 cmp 都是绑定到操作指针上面
- mcpwm_oper_handle_t opt;
- //定义比较器指针
- mcpwm_cmpr_handle_t cmpa;
- mcpwm_cmpr_handle_t cmpb;
- //定义generator 指针
- mcpwm_gen_handle_t gena;
- mcpwm_gen_handle_t genb;
- //配置定时器计算基数和周期
- mcpwm_timer_config_t timer_config = {
- .group_id = 0,
- .clk_src = MCPWM_TIMER_CLK_SRC_DEFAULT,
- .resolution_hz = 1000000,
- .period_ticks = 100,
- .count_mode = MCPWM_TIMER_COUNT_MODE_UP,
- };
- //配置操作指针绑定的分组,编写和timer的分组一致
- mcpwm_operator_config_t operator_config = {
- .group_id = 0,
- };
- //定义比较器配置,在0点更新
- mcpwm_comparator_config_t comparator_config = {
- .flags.update_cmp_on_tez = true,
- };
- //配置生成器绑定的引脚
- mcpwm_generator_config_t generator_config = {};
- //根据配置 初始化定时器
- mcpwm_new_timer(&timer_config, &timer);
- //根据配置 初始化 操作指针
- mcpwm_new_operator(&operator_config, &opt);
- //绑定操作指针和定时器
- mcpwm_operator_connect_timer(opt,timer);
- //when the cmp value to update,绑定比较指针到操作器,并且指明 0时 更新
- mcpwm_new_comparator(opt, &comparator_config, &cmpa); //set the first cmp
- mcpwm_new_comparator(opt, &comparator_config, &cmpb); //set the second cmp
- //set the pwm pin 设定pwm的io
- generator_config.gen_gpio_num=1;
- mcpwm_new_generator(opt, &generator_config, &gena);
- generator_config.gen_gpio_num=2;
- mcpwm_new_generator(opt, &generator_config, &genb);
- //set the event when empty or compare , 设定pwm定时器归零时候电平,比较后电平
- mcpwm_generator_set_actions_on_timer_event(gena,
- MCPWM_GEN_TIMER_EVENT_ACTION(MCPWM_TIMER_DIRECTION_UP, MCPWM_TIMER_EVENT_EMPTY, MCPWM_GEN_ACTION_HIGH),
- MCPWM_GEN_TIMER_EVENT_ACTION_END());
- mcpwm_generator_set_actions_on_compare_event(gena,
- MCPWM_GEN_COMPARE_EVENT_ACTION(MCPWM_TIMER_DIRECTION_UP, cmpa, MCPWM_GEN_ACTION_LOW),
- MCPWM_GEN_COMPARE_EVENT_ACTION_END());
- mcpwm_generator_set_actions_on_timer_event(genb,
- MCPWM_GEN_TIMER_EVENT_ACTION(MCPWM_TIMER_DIRECTION_UP, MCPWM_TIMER_EVENT_EMPTY, MCPWM_GEN_ACTION_LOW),
- MCPWM_GEN_TIMER_EVENT_ACTION_END());
- mcpwm_generator_set_actions_on_compare_event(genb,
- MCPWM_GEN_COMPARE_EVENT_ACTION(MCPWM_TIMER_DIRECTION_UP, cmpb, MCPWM_GEN_ACTION_HIGH),
- MCPWM_GEN_COMPARE_EVENT_ACTION_END());
- //使能定时器
- mcpwm_timer_enable(timer);
- //启动定时器
- mcpwm_timer_start_stop(timer, MCPWM_TIMER_START_NO_STOP);
- //设定pwm 数值
- mcpwm_comparator_set_compare_value(cmpa,50);
- mcpwm_comparator_set_compare_value(cmpb,20);
- }