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

Add SPI bus mode support (controller/peripheral)#257

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Merged
facchinm merged 1 commit intoarduino:masterfromiabdalkader:spi_bus_mode
Sep 29, 2025
Merged
Changes fromall commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 25 additions & 11 deletionsapi/HardwareSPI.h
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -34,33 +34,42 @@ typedef enum {
SPI_MODE3 = 3,
} SPIMode;

// Platforms should define SPI_HAS_PERIPHERAL_MODE if SPI peripheral
// mode is supported, to allow applications to check whether peripheral
// mode is available or not.
typedef enum {
SPI_CONTROLLER = 0,
SPI_PERIPHERAL = 1,
} SPIBusMode;


class SPISettings {
public:
SPISettings(uint32_t clock, BitOrder bitOrder, SPIMode dataMode) {
SPISettings(uint32_t clock, BitOrder bitOrder, SPIMode dataMode, SPIBusMode busMode = SPI_CONTROLLER) {
if (__builtin_constant_p(clock)) {
init_AlwaysInline(clock, bitOrder, dataMode);
init_AlwaysInline(clock, bitOrder, dataMode, busMode);
} else {
init_MightInline(clock, bitOrder, dataMode);
init_MightInline(clock, bitOrder, dataMode, busMode);
}
}

SPISettings(uint32_t clock, BitOrder bitOrder, int dataMode) {
SPISettings(uint32_t clock, BitOrder bitOrder, int dataMode, SPIBusMode busMode = SPI_CONTROLLER) {
if (__builtin_constant_p(clock)) {
init_AlwaysInline(clock, bitOrder, (SPIMode)dataMode);
init_AlwaysInline(clock, bitOrder, (SPIMode)dataMode, busMode);
} else {
init_MightInline(clock, bitOrder, (SPIMode)dataMode);
init_MightInline(clock, bitOrder, (SPIMode)dataMode, busMode);
}
}

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

bool operator==(const SPISettings& rhs) const
{
if ((this->clockFreq == rhs.clockFreq) &&
(this->bitOrder == rhs.bitOrder) &&
(this->dataMode == rhs.dataMode)) {
(this->dataMode == rhs.dataMode) &&
(this->busMode == rhs.busMode)) {
return true;
}
return false;
Expand All@@ -80,22 +89,27 @@ class SPISettings {
BitOrder getBitOrder() const {
return (bitOrder);
}
SPIBusMode getBusMode() const {
return busMode;
}

private:
void init_MightInline(uint32_t clock, BitOrder bitOrder, SPIMode dataMode) {
init_AlwaysInline(clock, bitOrder, dataMode);
void init_MightInline(uint32_t clock, BitOrder bitOrder, SPIMode dataMode, SPIBusMode busMode) {
init_AlwaysInline(clock, bitOrder, dataMode, busMode);
}

// Core developer MUST use an helper function in beginTransaction() to use this data
void init_AlwaysInline(uint32_t clock, BitOrder bitOrder, SPIMode dataMode) __attribute__((__always_inline__)) {
void init_AlwaysInline(uint32_t clock, BitOrder bitOrder, SPIMode dataMode, SPIBusMode busMode) __attribute__((__always_inline__)) {
this->clockFreq = clock;
this->dataMode = dataMode;
this->bitOrder = bitOrder;
this->busMode = busMode;
}

uint32_t clockFreq;
SPIMode dataMode;
BitOrder bitOrder;
SPIBusMode busMode;

friend class HardwareSPI;
};
Expand Down
Loading

[8]ページ先頭

©2009-2025 Movatter.jp