Movatterモバイル変換


[0]ホーム

URL:


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

Commita07b034

Browse files
authored
Merge pull request#257 from iabdalkader/spi_bus_mode
Add SPI bus mode support (controller/peripheral)
2 parents13e173a +dab7773 commita07b034

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+
typedefenum {
41+
SPI_CONTROLLER =0,
42+
SPI_PERIPHERAL =1,
43+
} SPIBusMode;
44+
3745

3846
classSPISettings {
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
booloperator==(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
returntrue;
6574
}
6675
returnfalse;
@@ -80,22 +89,27 @@ class SPISettings {
8089
BitOrdergetBitOrder()const {
8190
return (bitOrder);
8291
}
92+
SPIBusModegetBusMode()const {
93+
return busMode;
94+
}
8395

8496
private:
85-
voidinit_MightInline(uint32_t clock, BitOrder bitOrder, SPIMode dataMode) {
86-
init_AlwaysInline(clock, bitOrder, dataMode);
97+
voidinit_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-
voidinit_AlwaysInline(uint32_t clock, BitOrder bitOrder, SPIMode dataMode) __attribute__((__always_inline__)) {
102+
voidinit_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
friendclassHardwareSPI;
101115
};

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp