72 lines
2.5 KiB
C
72 lines
2.5 KiB
C
|
/*
|
||
|
* Copied from esp8266-frankenstein
|
||
|
* https://github.com/nekromant/esp8266-frankenstein/blob/master/include/pin_map.h
|
||
|
*
|
||
|
*
|
||
|
* There is not a 1:1 mapping between physical pin numbers numbers and the
|
||
|
* various constants uses to control GPIO functionality.
|
||
|
*
|
||
|
* The following globals are used to make this easy without adding masses of
|
||
|
* overhead that a fully fledged abstraction library (such as that provided by
|
||
|
* Arduino) might add:
|
||
|
*
|
||
|
* pin_mux[gpio] ->> returns the correct constant for gpio 'pin' to use
|
||
|
* as the first argument to PIN_FUNC_SELECT(),
|
||
|
* PIN_PULLDWN_DIS(), PIN_PULLUP_DIS(), PIN_PULLUP_EN(),
|
||
|
* PIN_PULLDWN_DIS() functions
|
||
|
*
|
||
|
* pin_func[gpio] ->> returns the correct constant for gpio 'gpio' to use
|
||
|
* as the second argument to PIN_FUNC_SELECT()
|
||
|
*
|
||
|
* The gpio is passed directly to GPIO_DIS_OUTPUT(), GPIO_OUTPUT_SET() and
|
||
|
* GPIO_OUTPUT_GET()
|
||
|
*
|
||
|
* pin_int_type[gpio] is used to return the GPIO_PIN_INTR_DISABLE state when
|
||
|
* GPIO interrupts are enabled.
|
||
|
*
|
||
|
* The actual mappings are described in the file pin_map.c
|
||
|
*
|
||
|
* Not all gpio numbers are valid. This can be checked first using the function
|
||
|
* is_valid_gpio_pin() which also checks for the gpio in the range
|
||
|
* 0..GPIO_PIN_NUM-1
|
||
|
*
|
||
|
* Invalid gpio will also report -1 for pin_mux[] and pin_func[]
|
||
|
*
|
||
|
* Note that the ESP SDK provides an additional macro, GPIO_ID_PIN() which in
|
||
|
* theory should be wrapped around all 'gpio' numbers passed to the register
|
||
|
* functions, however, this macro essentially resolves to a NO-OP so code will
|
||
|
* work fine without it. It is not inconceivable however that there could be
|
||
|
* a future hardware version increment that breaks this, so I guess omit this
|
||
|
* at your own risk.
|
||
|
*
|
||
|
* EXAMPLE
|
||
|
* -------
|
||
|
*
|
||
|
* uint8_t gpio = argv[2];
|
||
|
* if (!is_valid_gpio_pin(gpio)) { printf("error...\n"); return; }
|
||
|
* PIN_FUNC_SELECT(pin_mux[gpio], pin_func[gpio]);
|
||
|
* PIN_PULLDWN_DIS(pin_mux[gpio]);
|
||
|
* GPIO_DIS_OUTPUT(GPIO_ID_PIN(gpio));
|
||
|
*
|
||
|
*/
|
||
|
#ifndef __PIN_MAP_H__
|
||
|
#define __PIN_MAP_H__
|
||
|
|
||
|
#include "c_types.h"
|
||
|
#include "user_config.h"
|
||
|
#include "gpio.h"
|
||
|
|
||
|
#define GPIO_PIN_NUM 17
|
||
|
#define GPIO_PIN_FUNC_INVALID (uint8_t)(-1)
|
||
|
#define GPIO_PIN_MUX_INVALID (uint32_t)(-1)
|
||
|
|
||
|
extern bool is_valid_gpio_pin(uint8 gpiopin);
|
||
|
|
||
|
//extern uint8_t pin_num[GPIO_PIN_NUM];
|
||
|
extern uint8_t pin_func[GPIO_PIN_NUM];
|
||
|
extern uint32_t pin_mux[GPIO_PIN_NUM];
|
||
|
#ifdef GPIO_INTERRUPT_ENABLE
|
||
|
extern GPIO_INT_TYPE pin_int_type[GPIO_PIN_NUM];
|
||
|
#endif
|
||
|
#endif // #ifndef __PIN_MAP_H__
|