Skip to content

Commit d99e561

Browse files
authored
Update digital.cpp
Add a conditional statement to check if we're on an Uno, this flips IOPORT_CFG_PMOS to _NMOS as needed.
1 parent a430d9f commit d99e561

File tree

1 file changed

+23
-19
lines changed

1 file changed

+23
-19
lines changed

cores/arduino/digital.cpp

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,33 @@
11
#include "Arduino.h"
22

33
void pinMode(pin_size_t pin, const PinMode mode) {
4-
switch (mode) {
5-
case INPUT:
6-
case INPUT_PULLDOWN: // TODO: document the INPUT_PULLDOWN is unavailable
7-
R_IOPORT_PinCfg(NULL, g_pin_cfg[pin].pin, IOPORT_CFG_PORT_DIRECTION_INPUT);
8-
break;
9-
case INPUT_PULLUP:
10-
R_IOPORT_PinCfg(NULL, g_pin_cfg[pin].pin, IOPORT_CFG_PORT_DIRECTION_INPUT | IOPORT_CFG_PULLUP_ENABLE);
11-
break;
12-
case OUTPUT:
13-
R_IOPORT_PinCfg(NULL, g_pin_cfg[pin].pin, IOPORT_CFG_PORT_DIRECTION_OUTPUT);
14-
break;
15-
case OUTPUT_OPENDRAIN:
16-
R_IOPORT_PinCfg(NULL, g_pin_cfg[pin].pin, IOPORT_CFG_PORT_DIRECTION_OUTPUT | IOPORT_CFG_PMOS_ENABLE);
17-
break;
18-
}
4+
switch (mode) {
5+
case INPUT:
6+
case INPUT_PULLDOWN: // TODO: document that INPUT_PULLDOWN is unavailable
7+
R_IOPORT_PinCfg(NULL, g_pin_cfg[pin].pin, IOPORT_CFG_PORT_DIRECTION_INPUT);
8+
break;
9+
case INPUT_PULLUP:
10+
R_IOPORT_PinCfg(NULL, g_pin_cfg[pin].pin, IOPORT_CFG_PORT_DIRECTION_INPUT | IOPORT_CFG_PULLUP_ENABLE);
11+
break;
12+
case OUTPUT:
13+
R_IOPORT_PinCfg(NULL, g_pin_cfg[pin].pin, IOPORT_CFG_PORT_DIRECTION_OUTPUT);
14+
break;
15+
case OUTPUT_OPENDRAIN:
16+
#if defined(ARDUINO_UNO)
17+
R_IOPORT_PinCfg(NULL, g_pin_cfg[pin].pin, IOPORT_CFG_PORT_DIRECTION_OUTPUT | IOPORT_CFG_NMOS_ENABLE);
18+
#else
19+
R_IOPORT_PinCfg(NULL, g_pin_cfg[pin].pin, IOPORT_CFG_PORT_DIRECTION_OUTPUT | IOPORT_CFG_PMOS_ENABLE);
20+
#endif
21+
break;
22+
}
1923
}
2024

2125
void digitalWrite(pin_size_t pin, PinStatus val) {
22-
R_IOPORT_PinWrite(NULL, g_pin_cfg[pin].pin, val == LOW ? BSP_IO_LEVEL_LOW : BSP_IO_LEVEL_HIGH);
26+
R_IOPORT_PinWrite(NULL, g_pin_cfg[pin].pin, val == LOW ? BSP_IO_LEVEL_LOW : BSP_IO_LEVEL_HIGH);
2327
}
2428

2529
PinStatus digitalRead(pin_size_t pin) {
26-
bsp_io_level_t ret;
27-
R_IOPORT_PinRead(NULL, g_pin_cfg[pin].pin, &ret);
28-
return (ret == BSP_IO_LEVEL_LOW ? LOW : HIGH);
30+
bsp_io_level_t ret;
31+
R_IOPORT_PinRead(NULL, g_pin_cfg[pin].pin, &ret);
32+
return (ret == BSP_IO_LEVEL_LOW ? LOW : HIGH);
2933
}

0 commit comments

Comments
 (0)