Skip to content

Commit 67a6d31

Browse files
committed
esp8266: Allow GPIO16 to be used as a pin in the uPy pin HAL.
Now I2C works with GPIO16 as the SCL or SDA pin.
1 parent a2d5d84 commit 67a6d31

2 files changed

Lines changed: 19 additions & 3 deletions

File tree

esp8266/esp_mphal.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,16 @@ void mp_hal_signal_dupterm_input(void) {
215215

216216
void mp_hal_pin_config_od(mp_hal_pin_obj_t pin_id) {
217217
const pyb_pin_obj_t *pin = &pyb_pin_obj[pin_id];
218+
219+
if (pin->phys_port == 16) {
220+
// configure GPIO16 as input with output register holding 0
221+
WRITE_PERI_REG(PAD_XPD_DCDC_CONF, (READ_PERI_REG(PAD_XPD_DCDC_CONF) & 0xffffffbc) | 1);
222+
WRITE_PERI_REG(RTC_GPIO_CONF, READ_PERI_REG(RTC_GPIO_CONF) & ~1);
223+
WRITE_PERI_REG(RTC_GPIO_ENABLE, (READ_PERI_REG(RTC_GPIO_ENABLE) & ~1)); // input
224+
WRITE_PERI_REG(RTC_GPIO_OUT, (READ_PERI_REG(RTC_GPIO_OUT) & ~1)); // out=0
225+
return;
226+
}
227+
218228
ETS_GPIO_INTR_DISABLE();
219229
PIN_FUNC_SELECT(pin->periph, pin->func);
220230
GPIO_REG_WRITE(GPIO_PIN_ADDR(GPIO_ID_PIN(pin->phys_port)),

esp8266/esp_mphal.h

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,14 @@ void ets_event_poll(void);
6666
#define mp_hal_pin_obj_t uint32_t
6767
#define mp_hal_get_pin_obj(o) mp_obj_get_pin(o)
6868
void mp_hal_pin_config_od(mp_hal_pin_obj_t pin);
69-
#define mp_hal_pin_low(p) gpio_output_set(0, 1 << (p), 1 << (p), 0)
70-
#define mp_hal_pin_od_high(p) gpio_output_set(1 << (p), 0, 1 << (p), 0)
71-
#define mp_hal_pin_read(p) GPIO_INPUT_GET(GPIO_ID_PIN((p)))
69+
#define mp_hal_pin_low(p) do { \
70+
if ((p) == 16) { WRITE_PERI_REG(RTC_GPIO_ENABLE, (READ_PERI_REG(RTC_GPIO_ENABLE) & ~1) | 1); } \
71+
else { gpio_output_set(0, 1 << (p), 1 << (p), 0); } \
72+
} while (0)
73+
#define mp_hal_pin_od_high(p) do { \
74+
if ((p) == 16) { WRITE_PERI_REG(RTC_GPIO_ENABLE, (READ_PERI_REG(RTC_GPIO_ENABLE) & ~1)); } \
75+
else { gpio_output_set(1 << (p), 0, 1 << (p), 0); } \
76+
} while (0)
77+
#define mp_hal_pin_read(p) pin_get(p)
7278

7379
#endif // _INCLUDED_MPHAL_H_

0 commit comments

Comments
 (0)