diff --git a/components/soc/esp32/CMakeLists.txt b/components/soc/esp32/CMakeLists.txt index 3814ba716f..438cddd69a 100644 --- a/components/soc/esp32/CMakeLists.txt +++ b/components/soc/esp32/CMakeLists.txt @@ -6,6 +6,7 @@ set(srcs "i2s_periph.c" "interrupts.c" "ledc_periph.c" + "mcpwm_periph.c" "pcnt_periph.c" "rmt_periph.c" "rtc_io_periph.c" diff --git a/components/soc/esp32/mcpwm_periph.c b/components/soc/esp32/mcpwm_periph.c new file mode 100644 index 0000000000..0a30191ff1 --- /dev/null +++ b/components/soc/esp32/mcpwm_periph.c @@ -0,0 +1,160 @@ +// Copyright 2020 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "soc/soc.h" +#include "soc/mcpwm_periph.h" +#include "soc/gpio_sig_map.h" + +const mcpwm_signal_conn_t mcpwm_periph_signals = { + .groups = { + [0] = { + .module = PERIPH_PWM0_MODULE, + .irq_id = ETS_PWM0_INTR_SOURCE, + .operators = { + [0] = { + .generators = { + [0] = { + .pwm_sig = PWM0_OUT0A_IDX + }, + [1] = { + .pwm_sig = PWM0_OUT0B_IDX + } + } + }, + [1] = { + .generators = { + [0] = { + .pwm_sig = PWM0_OUT1A_IDX + }, + [1] = { + .pwm_sig = PWM0_OUT1B_IDX + } + } + }, + [2] = { + .generators = { + [0] = { + .pwm_sig = PWM0_OUT2A_IDX + }, + [1] = { + .pwm_sig = PWM0_OUT2B_IDX + } + } + } + }, + .detectors = { + [0] = { + .fault_sig = PWM0_F0_IN_IDX + }, + [1] = { + .fault_sig = PWM0_F1_IN_IDX + }, + [2] = { + .fault_sig = PWM0_F2_IN_IDX + } + }, + .captures = { + [0] = { + .cap_sig = PWM0_CAP0_IN_IDX + }, + [1] = { + .cap_sig = PWM0_CAP1_IN_IDX + }, + [2] = { + .cap_sig = PWM0_CAP2_IN_IDX + } + }, + .ext_syncers = { + [0] = { + .sync_sig = PWM0_SYNC0_IN_IDX + }, + [1] = { + .sync_sig = PWM0_SYNC1_IN_IDX + }, + [2] = { + .sync_sig = PWM0_SYNC2_IN_IDX + } + } + }, + [1] = { + .module = PERIPH_PWM1_MODULE, + .irq_id = ETS_PWM1_INTR_SOURCE, + .operators = { + [0] = { + .generators = { + [0] = { + .pwm_sig = PWM1_OUT0A_IDX + }, + [1] = { + .pwm_sig = PWM1_OUT0B_IDX + } + } + }, + [1] = { + .generators = { + [0] = { + .pwm_sig = PWM1_OUT1A_IDX + }, + [1] = { + .pwm_sig = PWM1_OUT1B_IDX + } + } + }, + [2] = { + .generators = { + [0] = { + .pwm_sig = PWM1_OUT2A_IDX + }, + [1] = { + .pwm_sig = PWM1_OUT2B_IDX + } + } + } + }, + .detectors = { + [0] = { + .fault_sig = PWM1_F0_IN_IDX + }, + [1] = { + .fault_sig = PWM1_F1_IN_IDX + }, + [2] = { + .fault_sig = PWM1_F2_IN_IDX + } + }, + .captures = { + [0] = { + .cap_sig = PWM1_CAP0_IN_IDX + }, + [1] = { + .cap_sig = PWM1_CAP1_IN_IDX + }, + [2] = { + .cap_sig = PWM1_CAP2_IN_IDX + } + }, + .ext_syncers = { + [0] = { + .sync_sig = PWM1_SYNC0_IN_IDX + }, + [1] = { + .sync_sig = PWM1_SYNC1_IN_IDX + }, + [2] = { + .sync_sig = PWM1_SYNC2_IN_IDX + } + } + } + } +}; diff --git a/components/soc/esp32s3/CMakeLists.txt b/components/soc/esp32s3/CMakeLists.txt index 61312030dd..8016bf6ed8 100644 --- a/components/soc/esp32s3/CMakeLists.txt +++ b/components/soc/esp32s3/CMakeLists.txt @@ -9,6 +9,7 @@ set(srcs "interrupts.c" "lcd_periph.c" "ledc_periph.c" + "mcpwm_periph.c" "pcnt_periph.c" "rmt_periph.c" "rtc_io_periph.c" diff --git a/components/soc/esp32s3/mcpwm_periph.c b/components/soc/esp32s3/mcpwm_periph.c new file mode 100644 index 0000000000..0a30191ff1 --- /dev/null +++ b/components/soc/esp32s3/mcpwm_periph.c @@ -0,0 +1,160 @@ +// Copyright 2020 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "soc/soc.h" +#include "soc/mcpwm_periph.h" +#include "soc/gpio_sig_map.h" + +const mcpwm_signal_conn_t mcpwm_periph_signals = { + .groups = { + [0] = { + .module = PERIPH_PWM0_MODULE, + .irq_id = ETS_PWM0_INTR_SOURCE, + .operators = { + [0] = { + .generators = { + [0] = { + .pwm_sig = PWM0_OUT0A_IDX + }, + [1] = { + .pwm_sig = PWM0_OUT0B_IDX + } + } + }, + [1] = { + .generators = { + [0] = { + .pwm_sig = PWM0_OUT1A_IDX + }, + [1] = { + .pwm_sig = PWM0_OUT1B_IDX + } + } + }, + [2] = { + .generators = { + [0] = { + .pwm_sig = PWM0_OUT2A_IDX + }, + [1] = { + .pwm_sig = PWM0_OUT2B_IDX + } + } + } + }, + .detectors = { + [0] = { + .fault_sig = PWM0_F0_IN_IDX + }, + [1] = { + .fault_sig = PWM0_F1_IN_IDX + }, + [2] = { + .fault_sig = PWM0_F2_IN_IDX + } + }, + .captures = { + [0] = { + .cap_sig = PWM0_CAP0_IN_IDX + }, + [1] = { + .cap_sig = PWM0_CAP1_IN_IDX + }, + [2] = { + .cap_sig = PWM0_CAP2_IN_IDX + } + }, + .ext_syncers = { + [0] = { + .sync_sig = PWM0_SYNC0_IN_IDX + }, + [1] = { + .sync_sig = PWM0_SYNC1_IN_IDX + }, + [2] = { + .sync_sig = PWM0_SYNC2_IN_IDX + } + } + }, + [1] = { + .module = PERIPH_PWM1_MODULE, + .irq_id = ETS_PWM1_INTR_SOURCE, + .operators = { + [0] = { + .generators = { + [0] = { + .pwm_sig = PWM1_OUT0A_IDX + }, + [1] = { + .pwm_sig = PWM1_OUT0B_IDX + } + } + }, + [1] = { + .generators = { + [0] = { + .pwm_sig = PWM1_OUT1A_IDX + }, + [1] = { + .pwm_sig = PWM1_OUT1B_IDX + } + } + }, + [2] = { + .generators = { + [0] = { + .pwm_sig = PWM1_OUT2A_IDX + }, + [1] = { + .pwm_sig = PWM1_OUT2B_IDX + } + } + } + }, + .detectors = { + [0] = { + .fault_sig = PWM1_F0_IN_IDX + }, + [1] = { + .fault_sig = PWM1_F1_IN_IDX + }, + [2] = { + .fault_sig = PWM1_F2_IN_IDX + } + }, + .captures = { + [0] = { + .cap_sig = PWM1_CAP0_IN_IDX + }, + [1] = { + .cap_sig = PWM1_CAP1_IN_IDX + }, + [2] = { + .cap_sig = PWM1_CAP2_IN_IDX + } + }, + .ext_syncers = { + [0] = { + .sync_sig = PWM1_SYNC0_IN_IDX + }, + [1] = { + .sync_sig = PWM1_SYNC1_IN_IDX + }, + [2] = { + .sync_sig = PWM1_SYNC2_IN_IDX + } + } + } + } +}; diff --git a/components/soc/include/soc/mcpwm_periph.h b/components/soc/include/soc/mcpwm_periph.h index d7223da45d..ae5809c91e 100644 --- a/components/soc/include/soc/mcpwm_periph.h +++ b/components/soc/include/soc/mcpwm_periph.h @@ -13,5 +13,39 @@ // limitations under the License. #pragma once + +#include "soc/soc_caps.h" #include "soc/mcpwm_reg.h" #include "soc/mcpwm_struct.h" +#include "soc/periph_defs.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct { + struct { + const periph_module_t module; // Peripheral module + const int irq_id; + struct { + struct { + const uint32_t pwm_sig; + } generators[SOC_MCPWM_GENERATORS_PER_OPERATOR]; + } operators[SOC_MCPWM_OPERATORS_PER_GROUP]; + struct { + const uint32_t fault_sig; + } detectors[SOC_MCPWM_FAULT_DETECTORS_PER_GROUP]; + struct { + const uint32_t cap_sig; + } captures[SOC_MCPWM_CAPTURE_CHANNELS_PER_TIMER]; + struct { + const uint32_t sync_sig; + } ext_syncers[SOC_MCPWM_EXT_SYNCERS_PER_GROUP]; + } groups[SOC_MCPWM_GROUPS]; +} mcpwm_signal_conn_t; + +extern const mcpwm_signal_conn_t mcpwm_periph_signals; + +#ifdef __cplusplus +} +#endif