Skip to content

Commit 163da03

Browse files
committed
Core: Arduino: ShiftIn/ShiftOut
ShiftIn and ShiftOut different than MBED version.
1 parent be1b6d7 commit 163da03

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed

cores/arduino/wiring_shift.cpp

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
/*
2+
* Copyright (c) Arduino s.r.l. and/or its affiliated companies
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
#include <Arduino.h>
8+
9+
uint8_t shiftIn(pin_size_t dataPin, uint8_t clockPin, BitOrder bitOrder) {
10+
uint8_t value = 0;
11+
uint8_t mask;
12+
13+
if (bitOrder == LSBFIRST) {
14+
for (mask = 0x01; mask; mask <<= 1) {
15+
digitalWrite(clockPin, HIGH);
16+
if (digitalRead(dataPin)) {
17+
value |= mask;
18+
}
19+
digitalWrite(clockPin, LOW);
20+
}
21+
} else {
22+
for (mask = 0x80; mask; mask >>= 1) {
23+
digitalWrite(clockPin, HIGH);
24+
if (digitalRead(dataPin)) {
25+
value |= mask;
26+
}
27+
digitalWrite(clockPin, LOW);
28+
}
29+
}
30+
31+
return value;
32+
}
33+
34+
void shiftOut(pin_size_t dataPin, uint8_t clockPin, BitOrder bitOrder, uint8_t val) {
35+
uint8_t mask;
36+
37+
if (bitOrder == LSBFIRST) {
38+
for (mask = 0x01; mask; mask <<= 1) {
39+
digitalWrite(dataPin, !!(val & mask) ? HIGH : LOW);
40+
digitalWrite(clockPin, HIGH);
41+
digitalWrite(clockPin, LOW);
42+
}
43+
} else {
44+
for (mask = 0x80; mask; mask >>= 1) {
45+
digitalWrite(dataPin, !!(val & mask) ? HIGH : LOW);
46+
digitalWrite(clockPin, HIGH);
47+
digitalWrite(clockPin, LOW);
48+
}
49+
}
50+
}

0 commit comments

Comments
 (0)