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

Commitc86ff82

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

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+
typedefenum {
38+
SPI_CONTROLLER =0,
39+
SPI_PERIPHERAL =1,
40+
} SPIBusMode;
41+
3742

3843
classSPISettings {
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
booloperator==(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
returntrue;
6571
}
6672
returnfalse;
@@ -80,22 +86,27 @@ class SPISettings {
8086
BitOrdergetBitOrder()const {
8187
return (bitOrder);
8288
}
89+
SPIBusModegetBusMode()const {
90+
return busMode;
91+
}
8392

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

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp