|
36 | 36 | #include "py/nlr.h" |
37 | 37 | #include "py/runtime.h" |
38 | 38 | #include "py/gc.h" |
| 39 | +#include "py/mphal.h" |
39 | 40 | #include "modpyb.h" |
40 | 41 |
|
41 | 42 | #define GET_TRIGGER(phys_port) \ |
@@ -123,6 +124,34 @@ uint mp_obj_get_pin(mp_obj_t pin_in) { |
123 | 124 | return mp_obj_get_pin_obj(pin_in)->phys_port; |
124 | 125 | } |
125 | 126 |
|
| 127 | +void mp_hal_pin_input(mp_hal_pin_obj_t pin_id) { |
| 128 | + pin_mode[pin_id] = GPIO_MODE_INPUT; |
| 129 | + if (pin_id == 16) { |
| 130 | + WRITE_PERI_REG(PAD_XPD_DCDC_CONF, (READ_PERI_REG(PAD_XPD_DCDC_CONF) & 0xffffffbc) | 1); |
| 131 | + WRITE_PERI_REG(RTC_GPIO_CONF, READ_PERI_REG(RTC_GPIO_CONF) & ~1); |
| 132 | + WRITE_PERI_REG(RTC_GPIO_ENABLE, (READ_PERI_REG(RTC_GPIO_ENABLE) & ~1)); // input |
| 133 | + } else { |
| 134 | + const pyb_pin_obj_t *self = &pyb_pin_obj[pin_id]; |
| 135 | + PIN_FUNC_SELECT(self->periph, self->func); |
| 136 | + PIN_PULLUP_DIS(self->periph); |
| 137 | + gpio_output_set(0, 0, 0, 1 << self->phys_port); |
| 138 | + } |
| 139 | +} |
| 140 | + |
| 141 | +void mp_hal_pin_output(mp_hal_pin_obj_t pin_id) { |
| 142 | + pin_mode[pin_id] = GPIO_MODE_OUTPUT; |
| 143 | + if (pin_id == 16) { |
| 144 | + WRITE_PERI_REG(PAD_XPD_DCDC_CONF, (READ_PERI_REG(PAD_XPD_DCDC_CONF) & 0xffffffbc) | 1); |
| 145 | + WRITE_PERI_REG(RTC_GPIO_CONF, READ_PERI_REG(RTC_GPIO_CONF) & ~1); |
| 146 | + WRITE_PERI_REG(RTC_GPIO_ENABLE, (READ_PERI_REG(RTC_GPIO_ENABLE) & ~1) | 1); // output |
| 147 | + } else { |
| 148 | + const pyb_pin_obj_t *self = &pyb_pin_obj[pin_id]; |
| 149 | + PIN_FUNC_SELECT(self->periph, self->func); |
| 150 | + PIN_PULLUP_DIS(self->periph); |
| 151 | + gpio_output_set(0, 0, 1 << self->phys_port, 0); |
| 152 | + } |
| 153 | +} |
| 154 | + |
126 | 155 | int pin_get(uint pin) { |
127 | 156 | if (pin == 16) { |
128 | 157 | return READ_PERI_REG(RTC_GPIO_IN_DATA) & 1; |
|
0 commit comments