Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit a07b034

Browse files
Merge pull request #257 from iabdalkader/spi_bus_mode
Add SPI bus mode support (controller/peripheral)
2 parents 13e173a + dab7773 commit a07b034

File tree

1 file changed

+25
-11
lines changed

1 file changed

+25
-11
lines changed

‎api/HardwareSPI.h‎

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

37+
// Platforms should define SPI_HAS_PERIPHERAL_MODE if SPI peripheral
38+
// mode is supported, to allow applications to check whether peripheral
39+
// mode is available or not.
40+
typedef enum {
41+
SPI_CONTROLLER = 0,
42+
SPI_PERIPHERAL = 1,
43+
} SPIBusMode;
44+
3745

3846
class SPISettings {
3947
public:
40-
SPISettings(uint32_t clock, BitOrder bitOrder, SPIMode dataMode) {
48+
SPISettings(uint32_t clock, BitOrder bitOrder, SPIMode dataMode, SPIBusMode busMode = SPI_CONTROLLER) {
4149
if (__builtin_constant_p(clock)) {
42-
init_AlwaysInline(clock, bitOrder, dataMode);
50+
init_AlwaysInline(clock, bitOrder, dataMode, busMode);
4351
} else {
44-
init_MightInline(clock, bitOrder, dataMode);
52+
init_MightInline(clock, bitOrder, dataMode, busMode);
4553
}
4654
}
4755

48-
SPISettings(uint32_t clock, BitOrder bitOrder, int dataMode) {
56+
SPISettings(uint32_t clock, BitOrder bitOrder, int dataMode, SPIBusMode busMode = SPI_CONTROLLER) {
4957
if (__builtin_constant_p(clock)) {
50-
init_AlwaysInline(clock, bitOrder, (SPIMode)dataMode);
58+
init_AlwaysInline(clock, bitOrder, (SPIMode)dataMode, busMode);
5159
} else {
52-
init_MightInline(clock, bitOrder, (SPIMode)dataMode);
60+
init_MightInline(clock, bitOrder, (SPIMode)dataMode, busMode);
5361
}
5462
}
5563

5664
// 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); }
65+
SPISettings() { init_AlwaysInline(4000000, MSBFIRST, SPI_MODE0, SPI_CONTROLLER); }
5866

5967
bool operator==(const SPISettings& rhs) const
6068
{
6169
if ((this->clockFreq == rhs.clockFreq) &&
6270
(this->bitOrder == rhs.bitOrder) &&
63-
(this->dataMode == rhs.dataMode)) {
71+
(this->dataMode == rhs.dataMode) &&
72+
(this->busMode == rhs.busMode)) {
6473
return true;
6574
}
6675
return false;
@@ -80,22 +89,27 @@ class SPISettings {
8089
BitOrder getBitOrder() const {
8190
return (bitOrder);
8291
}
92+
SPIBusMode getBusMode() const {
93+
return busMode;
94+
}
8395

8496
private:
85-
void init_MightInline(uint32_t clock, BitOrder bitOrder, SPIMode dataMode) {
86-
init_AlwaysInline(clock, bitOrder, dataMode);
97+
void init_MightInline(uint32_t clock, BitOrder bitOrder, SPIMode dataMode, SPIBusMode busMode) {
98+
init_AlwaysInline(clock, bitOrder, dataMode, busMode);
8799
}
88100

89101
// 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__)) {
102+
void init_AlwaysInline(uint32_t clock, BitOrder bitOrder, SPIMode dataMode, SPIBusMode busMode) __attribute__((__always_inline__)) {
91103
this->clockFreq = clock;
92104
this->dataMode = dataMode;
93105
this->bitOrder = bitOrder;
106+
this->busMode = busMode;
94107
}
95108

96109
uint32_t clockFreq;
97110
SPIMode dataMode;
98111
BitOrder bitOrder;
112+
SPIBusMode busMode;
99113

100114
friend class HardwareSPI;
101115
};

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /