Skip to content

Commit d8a8b20

Browse files
VitorBossfpistm
andauthored
Fix dead lock with pin above NUM_DIGITAL_PINS (#2629)
Penalty for the check should be a single instruction for pin numbers below NUM_DIGITAL_PINS, 9 for pin numbers between PNUM_ANALOG_BASE and NUM_ANALOG_INTERNAL_FIRST. Tests done on a Black F407VE board Signed-off-by: Frederic Pillon <frederic.pillon@st.com> Co-authored-by: Frederic Pillon <frederic.pillon@st.com>
1 parent cfe4962 commit d8a8b20

File tree

1 file changed

+11
-3
lines changed

1 file changed

+11
-3
lines changed

cores/arduino/wiring_digital.c

+11-3
Original file line numberDiff line numberDiff line change
@@ -78,17 +78,25 @@ void pinMode(uint32_t ulPin, uint32_t ulMode)
7878

7979
void digitalWrite(uint32_t ulPin, uint32_t ulVal)
8080
{
81-
digitalWriteFast(digitalPinToPinName(ulPin), ulVal);
81+
PinName p = digitalPinToPinName(ulPin);
82+
if (p != NC) {
83+
digitalWriteFast(p, ulVal);
84+
}
8285
}
8386

8487
int digitalRead(uint32_t ulPin)
8588
{
86-
return digitalReadFast(digitalPinToPinName(ulPin));
89+
PinName p = digitalPinToPinName(ulPin);
90+
91+
return (p == NC) ? 0 : digitalReadFast(p);
8792
}
8893

8994
void digitalToggle(uint32_t ulPin)
9095
{
91-
digitalToggleFast(digitalPinToPinName(ulPin));
96+
PinName p = digitalPinToPinName(ulPin);
97+
if (p != NC) {
98+
digitalToggleFast(digitalPinToPinName(ulPin));
99+
}
92100
}
93101

94102
#ifdef __cplusplus

0 commit comments

Comments
 (0)