mirror of
https://github.com/espressif/esp-idf.git
synced 2025-08-12 21:37:16 +00:00
refactor(mcpwm): refactor gpio mode config in mcpwm
Deprecate io_loop_back flag. Use capture timer to test generator and dead time.
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD
|
||||
* SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
@@ -22,9 +22,11 @@
|
||||
#include "soc/soc_caps.h"
|
||||
#include "soc/mcpwm_periph.h"
|
||||
#include "hal/mcpwm_ll.h"
|
||||
#include "hal/gpio_hal.h"
|
||||
#include "driver/mcpwm_sync.h"
|
||||
#include "driver/gpio.h"
|
||||
#include "mcpwm_private.h"
|
||||
#include "esp_private/gpio.h"
|
||||
|
||||
static const char *TAG = "mcpwm";
|
||||
|
||||
@@ -192,16 +194,23 @@ esp_err_t mcpwm_new_gpio_sync_src(const mcpwm_gpio_sync_src_config_t *config, mc
|
||||
int sync_id = gpio_sync_src->sync_id;
|
||||
|
||||
// GPIO configuration
|
||||
gpio_config_t gpio_conf = {
|
||||
.intr_type = GPIO_INTR_DISABLE,
|
||||
.mode = GPIO_MODE_INPUT | (config->flags.io_loop_back ? GPIO_MODE_OUTPUT : 0), // also enable the output path if `io_loop_back` is enabled
|
||||
.pin_bit_mask = (1ULL << config->gpio_num),
|
||||
.pull_down_en = config->flags.pull_down,
|
||||
.pull_up_en = config->flags.pull_up,
|
||||
};
|
||||
ESP_GOTO_ON_ERROR(gpio_config(&gpio_conf), err, TAG, "config sync GPIO failed");
|
||||
gpio_func_sel(config->gpio_num, PIN_FUNC_GPIO);
|
||||
gpio_input_enable(config->gpio_num);
|
||||
|
||||
esp_rom_gpio_connect_in_signal(config->gpio_num, mcpwm_periph_signals.groups[group_id].gpio_synchros[sync_id].sync_sig, 0);
|
||||
|
||||
if (config->flags.pull_down) {
|
||||
gpio_pulldown_en(config->gpio_num);
|
||||
}
|
||||
if (config->flags.pull_up) {
|
||||
gpio_pullup_en(config->gpio_num);
|
||||
}
|
||||
|
||||
// deprecated, to be removed in in esp-idf v6.0
|
||||
if (config->flags.io_loop_back) {
|
||||
gpio_ll_output_enable(&GPIO, config->gpio_num);
|
||||
}
|
||||
|
||||
// different ext sync share the same config register, using a group level spin lock
|
||||
portENTER_CRITICAL(&group->spinlock);
|
||||
mcpwm_ll_invert_gpio_sync_input(group->hal.dev, sync_id, config->flags.active_neg);
|
||||
@@ -226,9 +235,11 @@ static esp_err_t mcpwm_del_gpio_sync_src(mcpwm_sync_t *sync_src)
|
||||
{
|
||||
mcpwm_gpio_sync_src_t *gpio_sync_src = __containerof(sync_src, mcpwm_gpio_sync_src_t, base);
|
||||
mcpwm_group_t *group = sync_src->group;
|
||||
int group_id = group->group_id;
|
||||
int sync_id = gpio_sync_src->sync_id;
|
||||
|
||||
ESP_LOGD(TAG, "del gpio sync_src (%d,%d)", group->group_id, gpio_sync_src->sync_id);
|
||||
gpio_reset_pin(gpio_sync_src->gpio_num);
|
||||
esp_rom_gpio_connect_in_signal(GPIO_MATRIX_CONST_ZERO_INPUT, mcpwm_periph_signals.groups[group_id].gpio_synchros[sync_id].sync_sig, 0);
|
||||
|
||||
// recycle memory resource
|
||||
ESP_RETURN_ON_ERROR(mcpwm_gpio_sync_src_destroy(gpio_sync_src), TAG, "destroy GPIO sync_src failed");
|
||||
|
Reference in New Issue
Block a user