Skip to content

Commit 46b849a

Browse files
committed
esp8266: Move mp_hal_pin_open_drain from esp_mphal.c to machine_pin.c.
It belongs with the other pin config functions in machine_pin.c. Also, esp_mphal.c is put in iRAM so this change saves about 300 bytes of iRAM (and mp_hal_pin_open_drain is not a time critical function so doesn't need to be in iRAM).
1 parent 6e80f0e commit 46b849a

File tree

2 files changed

+22
-22
lines changed

2 files changed

+22
-22
lines changed

esp8266/esp_mphal.c

-22
Original file line numberDiff line numberDiff line change
@@ -208,28 +208,6 @@ void mp_hal_signal_dupterm_input(void) {
208208
system_os_post(DUPTERM_TASK_ID, 0, 0);
209209
}
210210

211-
void mp_hal_pin_open_drain(mp_hal_pin_obj_t pin_id) {
212-
const pyb_pin_obj_t *pin = &pyb_pin_obj[pin_id];
213-
214-
if (pin->phys_port == 16) {
215-
// configure GPIO16 as input with output register holding 0
216-
WRITE_PERI_REG(PAD_XPD_DCDC_CONF, (READ_PERI_REG(PAD_XPD_DCDC_CONF) & 0xffffffbc) | 1);
217-
WRITE_PERI_REG(RTC_GPIO_CONF, READ_PERI_REG(RTC_GPIO_CONF) & ~1);
218-
WRITE_PERI_REG(RTC_GPIO_ENABLE, (READ_PERI_REG(RTC_GPIO_ENABLE) & ~1)); // input
219-
WRITE_PERI_REG(RTC_GPIO_OUT, (READ_PERI_REG(RTC_GPIO_OUT) & ~1)); // out=0
220-
return;
221-
}
222-
223-
ETS_GPIO_INTR_DISABLE();
224-
PIN_FUNC_SELECT(pin->periph, pin->func);
225-
GPIO_REG_WRITE(GPIO_PIN_ADDR(GPIO_ID_PIN(pin->phys_port)),
226-
GPIO_REG_READ(GPIO_PIN_ADDR(GPIO_ID_PIN(pin->phys_port)))
227-
| GPIO_PIN_PAD_DRIVER_SET(GPIO_PAD_DRIVER_ENABLE)); // open drain
228-
GPIO_REG_WRITE(GPIO_ENABLE_ADDRESS,
229-
GPIO_REG_READ(GPIO_ENABLE_ADDRESS) | (1 << pin->phys_port));
230-
ETS_GPIO_INTR_ENABLE();
231-
}
232-
233211
// Get pointer to esf_buf bookkeeping structure
234212
void *ets_get_esf_buf_ctlblk(void) {
235213
// Get literal ptr before start of esf_rx_buf_alloc func

esp8266/machine_pin.c

+22
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,28 @@ void mp_hal_pin_output(mp_hal_pin_obj_t pin_id) {
163163
}
164164
}
165165

166+
void mp_hal_pin_open_drain(mp_hal_pin_obj_t pin_id) {
167+
const pyb_pin_obj_t *pin = &pyb_pin_obj[pin_id];
168+
169+
if (pin->phys_port == 16) {
170+
// configure GPIO16 as input with output register holding 0
171+
WRITE_PERI_REG(PAD_XPD_DCDC_CONF, (READ_PERI_REG(PAD_XPD_DCDC_CONF) & 0xffffffbc) | 1);
172+
WRITE_PERI_REG(RTC_GPIO_CONF, READ_PERI_REG(RTC_GPIO_CONF) & ~1);
173+
WRITE_PERI_REG(RTC_GPIO_ENABLE, (READ_PERI_REG(RTC_GPIO_ENABLE) & ~1)); // input
174+
WRITE_PERI_REG(RTC_GPIO_OUT, (READ_PERI_REG(RTC_GPIO_OUT) & ~1)); // out=0
175+
return;
176+
}
177+
178+
ETS_GPIO_INTR_DISABLE();
179+
PIN_FUNC_SELECT(pin->periph, pin->func);
180+
GPIO_REG_WRITE(GPIO_PIN_ADDR(GPIO_ID_PIN(pin->phys_port)),
181+
GPIO_REG_READ(GPIO_PIN_ADDR(GPIO_ID_PIN(pin->phys_port)))
182+
| GPIO_PIN_PAD_DRIVER_SET(GPIO_PAD_DRIVER_ENABLE)); // open drain
183+
GPIO_REG_WRITE(GPIO_ENABLE_ADDRESS,
184+
GPIO_REG_READ(GPIO_ENABLE_ADDRESS) | (1 << pin->phys_port));
185+
ETS_GPIO_INTR_ENABLE();
186+
}
187+
166188
int pin_get(uint pin) {
167189
if (pin == 16) {
168190
return READ_PERI_REG(RTC_GPIO_IN_DATA) & 1;

0 commit comments

Comments
 (0)