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

Commitaa6b22b

Browse files
committed
Add SPI bus mode support (controller/peripheral)
Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
1 parent4a02bfc commitaa6b22b

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 add a define (eg. SPI_HAS_PERIPHERAL_MODE) if they
38+
// support SPI peripheral mode operation to allow applications to check
39+
// whether peripheral 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