Skip to content

Commit c86ff82

Browse files
committed
Add SPI bus mode support (controller/peripheral)
Signed-off-by: iabdalkader <[email protected]>
1 parent 4a02bfc commit c86ff82

File tree

1 file changed

+22
-11
lines changed

1 file changed

+22
-11
lines changed

api/HardwareSPI.h

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -34,33 +34,39 @@ typedef enum {
3434
SPI_MODE3 = 3,
3535
} SPIMode;
3636

37+
typedef enum {
38+
SPI_CONTROLLER = 0,
39+
SPI_PERIPHERAL = 1,
40+
} SPIBusMode;
41+
3742

3843
class SPISettings {
3944
public:
40-
SPISettings(uint32_t clock, BitOrder bitOrder, SPIMode dataMode) {
45+
SPISettings(uint32_t clock, BitOrder bitOrder, SPIMode dataMode, SPIBusMode busMode = SPI_CONTROLLER) {
4146
if (__builtin_constant_p(clock)) {
42-
init_AlwaysInline(clock, bitOrder, dataMode);
47+
init_AlwaysInline(clock, bitOrder, dataMode, busMode);
4348
} else {
44-
init_MightInline(clock, bitOrder, dataMode);
49+
init_MightInline(clock, bitOrder, dataMode, busMode);
4550
}
4651
}
4752

48-
SPISettings(uint32_t clock, BitOrder bitOrder, int dataMode) {
53+
SPISettings(uint32_t clock, BitOrder bitOrder, int dataMode, SPIBusMode busMode = SPI_CONTROLLER) {
4954
if (__builtin_constant_p(clock)) {
50-
init_AlwaysInline(clock, bitOrder, (SPIMode)dataMode);
55+
init_AlwaysInline(clock, bitOrder, (SPIMode)dataMode, busMode);
5156
} else {
52-
init_MightInline(clock, bitOrder, (SPIMode)dataMode);
57+
init_MightInline(clock, bitOrder, (SPIMode)dataMode, busMode);
5358
}
5459
}
5560

5661
// Default speed set to 4MHz, SPI mode set to MODE 0 and Bit order set to MSB first.
57-
SPISettings() { init_AlwaysInline(4000000, MSBFIRST, SPI_MODE0); }
62+
SPISettings() { init_AlwaysInline(4000000, MSBFIRST, SPI_MODE0, SPI_CONTROLLER); }
5863

5964
bool operator==(const SPISettings& rhs) const
6065
{
6166
if ((this->clockFreq == rhs.clockFreq) &&
6267
(this->bitOrder == rhs.bitOrder) &&
63-
(this->dataMode == rhs.dataMode)) {
68+
(this->dataMode == rhs.dataMode) &&
69+
(this->busMode == rhs.busMode)) {
6470
return true;
6571
}
6672
return false;
@@ -80,22 +86,27 @@ class SPISettings {
8086
BitOrder getBitOrder() const {
8187
return (bitOrder);
8288
}
89+
SPIBusMode getBusMode() const {
90+
return busMode;
91+
}
8392

8493
private:
85-
void init_MightInline(uint32_t clock, BitOrder bitOrder, SPIMode dataMode) {
86-
init_AlwaysInline(clock, bitOrder, dataMode);
94+
void init_MightInline(uint32_t clock, BitOrder bitOrder, SPIMode dataMode, SPIBusMode busMode) {
95+
init_AlwaysInline(clock, bitOrder, dataMode, busMode);
8796
}
8897

8998
// Core developer MUST use an helper function in beginTransaction() to use this data
90-
void init_AlwaysInline(uint32_t clock, BitOrder bitOrder, SPIMode dataMode) __attribute__((__always_inline__)) {
99+
void init_AlwaysInline(uint32_t clock, BitOrder bitOrder, SPIMode dataMode, SPIBusMode busMode) __attribute__((__always_inline__)) {
91100
this->clockFreq = clock;
92101
this->dataMode = dataMode;
93102
this->bitOrder = bitOrder;
103+
this->busMode = busMode;
94104
}
95105

96106
uint32_t clockFreq;
97107
SPIMode dataMode;
98108
BitOrder bitOrder;
109+
SPIBusMode busMode;
99110

100111
friend class HardwareSPI;
101112
};

0 commit comments

Comments
 (0)