mirror of
https://github.com/espressif/esp-idf.git
synced 2026-10-02 11:10:54 +03:00
feat(gpio): support to attach gpio signals internally
This commit is contained in:
@@ -21,7 +21,7 @@
|
|||||||
#include "unity.h"
|
#include "unity.h"
|
||||||
#include "unity_test_utils.h"
|
#include "unity_test_utils.h"
|
||||||
#include "driver/gpio.h"
|
#include "driver/gpio.h"
|
||||||
#include "hal/gpio_ll.h"
|
#include "hal/gpio_hal.h"
|
||||||
#include "freertos/FreeRTOS.h"
|
#include "freertos/FreeRTOS.h"
|
||||||
#include "freertos/task.h"
|
#include "freertos/task.h"
|
||||||
#include "freertos/queue.h"
|
#include "freertos/queue.h"
|
||||||
@@ -504,12 +504,11 @@ TEST_CASE("GPIO_iram_interrupt_safe_test", "[gpio]")
|
|||||||
// Inter-connect input pin and output pin through an internal signal
|
// Inter-connect input pin and output pin through an internal signal
|
||||||
static void gpio_interconnect_input_output_pin(uint32_t input_pin, uint32_t output_pin, uint32_t signal_idx)
|
static void gpio_interconnect_input_output_pin(uint32_t input_pin, uint32_t output_pin, uint32_t signal_idx)
|
||||||
{
|
{
|
||||||
|
gpio_hal_context_t hal = {
|
||||||
|
.dev = &GPIO,
|
||||||
|
};
|
||||||
// signal256 -> output pin -> signal_idx -> input_pin
|
// signal256 -> output pin -> signal_idx -> input_pin
|
||||||
// Set output pin IE to be able to connect to the signal
|
gpio_hal_matrix_interconnect(&hal, output_pin, input_pin, signal_idx);
|
||||||
gpio_ll_input_enable(&GPIO, output_pin);
|
|
||||||
esp_rom_gpio_connect_in_signal(output_pin, signal_idx, 0);
|
|
||||||
// Input pin OE to be able to connect to the signal is done by the esp_rom_gpio_connect_out_signal function
|
|
||||||
esp_rom_gpio_connect_out_signal(input_pin, signal_idx, 0, 0);
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -68,6 +68,12 @@ void gpio_hal_matrix_out(gpio_hal_context_t *hal, uint32_t gpio_num, uint32_t si
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void gpio_hal_matrix_interconnect(gpio_hal_context_t *hal, uint32_t sig_src_pin, uint32_t sig_dst_pin, uint32_t signal_idx)
|
||||||
|
{
|
||||||
|
gpio_hal_matrix_in(hal, sig_src_pin, signal_idx, false);
|
||||||
|
gpio_hal_matrix_out(hal, sig_dst_pin, signal_idx, false, false);
|
||||||
|
}
|
||||||
|
|
||||||
#if SOC_GPIO_SUPPORT_PIN_HYS_FILTER
|
#if SOC_GPIO_SUPPORT_PIN_HYS_FILTER
|
||||||
void gpio_hal_hysteresis_soft_enable(gpio_hal_context_t *hal, uint32_t gpio_num, bool enable)
|
void gpio_hal_hysteresis_soft_enable(gpio_hal_context_t *hal, uint32_t gpio_num, bool enable)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -412,6 +412,16 @@ void gpio_hal_matrix_in(gpio_hal_context_t *hal, uint32_t gpio_num, uint32_t sig
|
|||||||
*/
|
*/
|
||||||
void gpio_hal_matrix_out(gpio_hal_context_t *hal, uint32_t gpio_num, uint32_t signal_idx, bool out_inv, bool oen_inv);
|
void gpio_hal_matrix_out(gpio_hal_context_t *hal, uint32_t gpio_num, uint32_t signal_idx, bool out_inv, bool oen_inv);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Connect two GPIOs through the GPIO matrix by a signal.
|
||||||
|
*
|
||||||
|
* @param hal Context of the HAL layer
|
||||||
|
* @param sig_src_pin Source GPIO number
|
||||||
|
* @param sig_dst_pin Destination GPIO number
|
||||||
|
* @param signal_idx Peripheral signal index (tagged as input attribute). One of the ``SIG_IN_FUNC`` signals in ``soc/gpio_sig_map.h``.
|
||||||
|
*/
|
||||||
|
void gpio_hal_matrix_interconnect(gpio_hal_context_t *hal, uint32_t sig_src_pin, uint32_t sig_dst_pin, uint32_t signal_idx);
|
||||||
|
|
||||||
#if SOC_GPIO_SUPPORT_FORCE_HOLD
|
#if SOC_GPIO_SUPPORT_FORCE_HOLD
|
||||||
/**
|
/**
|
||||||
* @brief Force hold all digital gpio pads (including those powered by VDD3P3_RTC power domain).
|
* @brief Force hold all digital gpio pads (including those powered by VDD3P3_RTC power domain).
|
||||||
|
|||||||
Reference in New Issue
Block a user