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

Commita39f0d3

Browse files
committed
SPI: port to ArduinoAPI
1 parent69eb474 commita39f0d3

File tree

2 files changed

+21
-14
lines changed

2 files changed

+21
-14
lines changed

‎libraries/SPI/src/SPI.cpp‎

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,6 @@
2424
#defineSPI_IMODE_EXTINT1
2525
#defineSPI_IMODE_GLOBAL2
2626

27-
const SPISettings DEFAULT_SPI_SETTINGS = SPISettings();
28-
2927
SPIClass::SPIClass(uint8_t uc_pinMISO,uint8_t uc_pinSCK,uint8_t uc_pinMOSI,uint8_t uc_pinSS,uint8_t uc_mux)
3028
{
3129
initialized =false;
@@ -66,7 +64,7 @@ void SPIClass::init()
6664
initialized =true;
6765
}
6866

69-
voidSPIClass::config(SPISettings settings)
67+
voidSPIClass::config(SPISettingsMegaAVR settings)
7068
{
7169
SPI0.CTRLA = settings.ctrla;
7270
SPI0.CTRLB = settings.ctrlb;
@@ -173,7 +171,7 @@ void SPIClass::reattachMaskedInterrupts() {
173171
}
174172
}
175173

176-
voidSPIClass::beginTransaction(SPISettings settings)
174+
voidSPIClass::beginTransaction(SPISettingsMegaAVR settings)
177175
{
178176
if (interruptMode != SPI_IMODE_NONE)
179177
{

‎libraries/SPI/src/SPI.h‎

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,9 @@
5252
#defineEXTERNAL_NUM_INTERRUPTS NUM_TOTAL_PINS
5353
#endif
5454

55-
classSPISettings {
55+
classSPISettingsMegaAVR :publicarduino::SPISettings {
5656
public:
57-
SPISettings(uint32_t clock, BitOrder bitOrder,uint8_t dataMode) {
57+
SPISettingsMegaAVR(uint32_t clock, BitOrder bitOrder,uint8_t dataMode) {
5858
if (__builtin_constant_p(clock)) {
5959
init_AlwaysInline(clock, bitOrder, dataMode);
6060
}else {
@@ -63,7 +63,9 @@ class SPISettings {
6363
}
6464

6565
// Default speed set to 4MHz, SPI mode set to MODE 0 and Bit order set to MSB first.
66-
SPISettings() {init_AlwaysInline(4000000, MSBFIRST, SPI_MODE0); }
66+
SPISettingsMegaAVR() {init_AlwaysInline(4000000, MSBFIRST, SPI_MODE0); }
67+
68+
SPISettingsMegaAVR(SPISettings& x) {SPISettingsMegaAVR(x.getClockFreq(), x.getBitOrder(), x.getDataMode()); }
6769

6870
private:
6971
voidinit_MightInline(uint32_t clock, BitOrder bitOrder,uint8_t dataMode) {
@@ -142,12 +144,12 @@ class SPISettings {
142144
/* member variables containing the desired SPI settings*/
143145
uint8_t ctrla;
144146
uint8_t ctrlb;
145-
friendclassSPIClass;
147+
friendclassSPIClassMegaAVR;
146148
};
147149

148-
classSPIClass {
150+
classSPIClassMegaAVR :publicarduino::HardwareSPI {
149151
public:
150-
SPIClass(uint8_t uc_pinMISO,uint8_t uc_pinSCK,uint8_t uc_pinMOSI,uint8_t uc_pinSS,uint8_t uc_mux);
152+
SPIClassMegaAVR(uint8_t uc_pinMISO,uint8_t uc_pinSCK,uint8_t uc_pinMOSI,uint8_t uc_pinSS,uint8_t uc_mux);
151153

152154
bytetransfer(uint8_t data);
153155
uint16_ttransfer16(uint16_t data);
@@ -156,7 +158,10 @@ class SPIClass {
156158
// Transaction Functions
157159
voidusingInterrupt(int interruptNumber);
158160
voidnotUsingInterrupt(int interruptNumber);
159-
voidbeginTransaction(SPISettings settings);
161+
voidbeginTransaction(SPISettingsMegaAVR settings);
162+
voidbeginTransaction(SPISettings settings) {
163+
beginTransaction(SPISettingsMegaAVR(settings));
164+
}
160165
voidendTransaction(void);
161166

162167
voidbegin();
@@ -169,13 +174,16 @@ class SPIClass {
169174
private:
170175

171176
voidinit();
172-
voidconfig(SPISettings settings);
177+
voidconfig(SPISettingsMegaAVR settings);
178+
voidconfig(SPISettings settings) {
179+
config(SPISettingsMegaAVR(settings));
180+
}
173181

174182
// These undocumented functions should not be used. SPI.transfer()
175183
// polls the hardware flag which is automatically cleared as the
176184
// AVR responds to SPI's interrupt
177-
inlinestaticvoidattachInterrupt() { SPI0.INTCTRL |= (SPI_IE_bm); }
178-
inlinestaticvoiddetachInterrupt() { SPI0.INTCTRL &= ~(SPI_IE_bm); }
185+
inlinevoidattachInterrupt() { SPI0.INTCTRL |= (SPI_IE_bm); }
186+
inlinevoiddetachInterrupt() { SPI0.INTCTRL &= ~(SPI_IE_bm); }
179187

180188
voiddetachMaskedInterrupts();
181189
voidreattachMaskedInterrupts();
@@ -199,6 +207,7 @@ class SPIClass {
199207
#endif
200208
};
201209

210+
#defineSPIClass SPIClassMegaAVR
202211

203212
#if SPI_INTERFACES_COUNT > 0
204213
extern SPIClass SPI;

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp