mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
feat(gpio): add function allowing switching input source from GPIO back to IOMUX
This commit is contained in:
parent
bb1f3ae264
commit
1f085b1a3b
@ -546,4 +546,17 @@ esp_err_t gpio_hold_dis(gpio_num_t gpio_num)
|
|||||||
r = ESP_ERR_NOT_SUPPORTED;
|
r = ESP_ERR_NOT_SUPPORTED;
|
||||||
}
|
}
|
||||||
return r == ESP_OK ? ESP_OK : ESP_ERR_NOT_SUPPORTED;
|
return r == ESP_OK ? ESP_OK : ESP_ERR_NOT_SUPPORTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void gpio_iomux_in(uint32_t gpio, uint32_t signal_idx)
|
||||||
|
{
|
||||||
|
GPIO.func_in_sel_cfg[signal_idx].sig_in_sel = 0;
|
||||||
|
PIN_INPUT_ENABLE(GPIO_PIN_MUX_REG[gpio]);
|
||||||
|
}
|
||||||
|
|
||||||
|
void gpio_iomux_out(uint8_t gpio_num, int func, bool oen_inv)
|
||||||
|
{
|
||||||
|
GPIO.func_out_sel_cfg[gpio_num].oen_sel = 0;
|
||||||
|
GPIO.func_out_sel_cfg[gpio_num].oen_inv_sel = oen_inv;
|
||||||
|
PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[gpio_num], func);
|
||||||
|
}
|
||||||
|
@ -31,11 +31,11 @@ extern "C" {
|
|||||||
|
|
||||||
#define GPIO_SEL_0 (BIT(0)) /*!< Pin 0 selected */
|
#define GPIO_SEL_0 (BIT(0)) /*!< Pin 0 selected */
|
||||||
#define GPIO_SEL_1 (BIT(1)) /*!< Pin 1 selected */
|
#define GPIO_SEL_1 (BIT(1)) /*!< Pin 1 selected */
|
||||||
#define GPIO_SEL_2 (BIT(2)) /*!< Pin 2 selected
|
#define GPIO_SEL_2 (BIT(2)) /*!< Pin 2 selected
|
||||||
@note There are more macros
|
@note There are more macros
|
||||||
like that up to pin 39,
|
like that up to pin 39,
|
||||||
excluding pins 20, 24 and 28..31.
|
excluding pins 20, 24 and 28..31.
|
||||||
They are not shown here
|
They are not shown here
|
||||||
to reduce redundant information. */
|
to reduce redundant information. */
|
||||||
/** @cond */
|
/** @cond */
|
||||||
#define GPIO_SEL_3 (BIT(3)) /*!< Pin 3 selected */
|
#define GPIO_SEL_3 (BIT(3)) /*!< Pin 3 selected */
|
||||||
@ -172,7 +172,7 @@ typedef enum {
|
|||||||
GPIO_NUM_38 = 38, /*!< GPIO38, input mode only */
|
GPIO_NUM_38 = 38, /*!< GPIO38, input mode only */
|
||||||
GPIO_NUM_39 = 39, /*!< GPIO39, input mode only */
|
GPIO_NUM_39 = 39, /*!< GPIO39, input mode only */
|
||||||
GPIO_NUM_MAX = 40,
|
GPIO_NUM_MAX = 40,
|
||||||
/** @endcond */
|
/** @endcond */
|
||||||
} gpio_num_t;
|
} gpio_num_t;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
@ -550,6 +550,22 @@ esp_err_t gpio_hold_en(gpio_num_t gpio_num);
|
|||||||
*/
|
*/
|
||||||
esp_err_t gpio_hold_dis(gpio_num_t gpio_num);
|
esp_err_t gpio_hold_dis(gpio_num_t gpio_num);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set pad input to a peripheral signal through the IOMUX.
|
||||||
|
* @param gpio_num GPIO number of the pad.
|
||||||
|
* @param signal_idx Peripheral signal id to input. One of the ``*_IN_IDX`` signals in ``soc/gpio_sig_map.h``.
|
||||||
|
*/
|
||||||
|
void gpio_iomux_in(uint32_t gpio_num, uint32_t signal_idx);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set peripheral output to an GPIO pad through the IOMUX.
|
||||||
|
* @param gpio_num gpio_num GPIO number of the pad.
|
||||||
|
* @param func The function number of the peripheral pin to output pin.
|
||||||
|
* One of the ``FUNC_X_*`` of specified pin (X) in ``soc/io_mux_reg.h``.
|
||||||
|
* @param oen_inv True if the output enable needs to be inversed, otherwise False.
|
||||||
|
*/
|
||||||
|
void gpio_iomux_out(uint8_t gpio_num, int func, bool oen_inv);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user