File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -215,6 +215,16 @@ void mp_hal_signal_dupterm_input(void) {
215215
216216void 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 )),
Original file line number Diff line number Diff 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)
6868void 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_
You can’t perform that action at this time.
0 commit comments