Skip to content

Commit 470628d

Browse files
committed
clean up spi 832
1 parent 9eee868 commit 470628d

File tree

1 file changed

+45
-93
lines changed

1 file changed

+45
-93
lines changed

libraries/SPI/SPI_nrf52832.cpp

Lines changed: 45 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,37 @@
3131

3232
const SPISettings DEFAULT_SPI_SETTINGS = SPISettings();
3333

34+
uint32_t mode2config(uint8_t mode)
35+
{
36+
uint32_t config = 0;
37+
38+
switch (mode)
39+
{
40+
default:
41+
case SPI_MODE0:
42+
config |= (SPI_CONFIG_CPOL_ActiveHigh << SPI_CONFIG_CPOL_Pos);
43+
config |= (SPI_CONFIG_CPHA_Leading << SPI_CONFIG_CPHA_Pos);
44+
break;
45+
46+
case SPI_MODE1:
47+
config |= (SPI_CONFIG_CPOL_ActiveHigh << SPI_CONFIG_CPOL_Pos);
48+
config |= (SPI_CONFIG_CPHA_Trailing << SPI_CONFIG_CPHA_Pos);
49+
break;
50+
51+
case SPI_MODE2:
52+
config |= (SPI_CONFIG_CPOL_ActiveLow << SPI_CONFIG_CPOL_Pos);
53+
config |= (SPI_CONFIG_CPHA_Leading << SPI_CONFIG_CPHA_Pos);
54+
break;
55+
56+
case SPI_MODE3:
57+
config |= (SPI_CONFIG_CPOL_ActiveLow << SPI_CONFIG_CPOL_Pos);
58+
config |= (SPI_CONFIG_CPHA_Trailing << SPI_CONFIG_CPHA_Pos);
59+
break;
60+
}
61+
62+
return config;
63+
}
64+
3465
SPIClass::SPIClass(NRF_SPIM_Type *p_spi, uint8_t uc_pinMISO, uint8_t uc_pinSCK, uint8_t uc_pinMOSI)
3566
{
3667
initialized = false;
@@ -63,42 +94,6 @@ void SPIClass::begin()
6394
beginTransaction(DEFAULT_SPI_SETTINGS);
6495
}
6596

66-
void SPIClass::beginTransaction(SPISettings settings)
67-
{
68-
_p_spi->ENABLE = (SPI_ENABLE_ENABLE_Disabled << SPI_ENABLE_ENABLE_Pos);
69-
70-
this->_bitOrder = (settings.bitOrder == MSBFIRST ? SPI_CONFIG_ORDER_MsbFirst : SPI_CONFIG_ORDER_LsbFirst);
71-
uint32_t config = this->_bitOrder;
72-
73-
switch (settings.dataMode) {
74-
default:
75-
case SPI_MODE0:
76-
config |= (SPI_CONFIG_CPOL_ActiveHigh << SPI_CONFIG_CPOL_Pos);
77-
config |= (SPI_CONFIG_CPHA_Leading << SPI_CONFIG_CPHA_Pos);
78-
break;
79-
80-
case SPI_MODE1:
81-
config |= (SPI_CONFIG_CPOL_ActiveHigh << SPI_CONFIG_CPOL_Pos);
82-
config |= (SPI_CONFIG_CPHA_Trailing << SPI_CONFIG_CPHA_Pos);
83-
break;
84-
85-
case SPI_MODE2:
86-
config |= (SPI_CONFIG_CPOL_ActiveLow << SPI_CONFIG_CPOL_Pos);
87-
config |= (SPI_CONFIG_CPHA_Leading << SPI_CONFIG_CPHA_Pos);
88-
break;
89-
90-
case SPI_MODE3:
91-
config |= (SPI_CONFIG_CPOL_ActiveLow << SPI_CONFIG_CPOL_Pos);
92-
config |= (SPI_CONFIG_CPHA_Trailing << SPI_CONFIG_CPHA_Pos);
93-
break;
94-
}
95-
96-
_p_spi->CONFIG = config;
97-
setClockDivider(F_CPU / settings.clockFreq);
98-
99-
_p_spi->ENABLE = (SPI_ENABLE_ENABLE_Enabled << SPI_ENABLE_ENABLE_Pos);
100-
}
101-
10297
void SPIClass::end()
10398
{
10499
_p_spi->ENABLE = (SPI_ENABLE_ENABLE_Disabled << SPI_ENABLE_ENABLE_Pos);
@@ -110,10 +105,18 @@ void SPIClass::usingInterrupt(int /*interruptNumber*/)
110105
{
111106
}
112107

113-
//void SPIClass::beginTransaction(SPISettings settings)
114-
//{
115-
// config(settings);
116-
//}
108+
void SPIClass::beginTransaction(SPISettings settings)
109+
{
110+
_p_spi->ENABLE = (SPI_ENABLE_ENABLE_Disabled << SPI_ENABLE_ENABLE_Pos);
111+
112+
this->_bitOrder = (settings.bitOrder == MSBFIRST ? SPI_CONFIG_ORDER_MsbFirst : SPI_CONFIG_ORDER_LsbFirst);
113+
this->_dataMode = settings.dataMode;
114+
115+
_p_spi->CONFIG = this->_bitOrder | mode2config(this->_dataMode);
116+
setClockDivider(F_CPU / settings.clockFreq);
117+
118+
_p_spi->ENABLE = (SPI_ENABLE_ENABLE_Enabled << SPI_ENABLE_ENABLE_Pos);
119+
}
117120

118121
void SPIClass::endTransaction(void)
119122
{
@@ -124,64 +127,13 @@ void SPIClass::setBitOrder(BitOrder order)
124127
{
125128
this->_bitOrder = (order == MSBFIRST ? SPI_CONFIG_ORDER_MsbFirst : SPI_CONFIG_ORDER_LsbFirst);
126129

127-
uint32_t config = this->_bitOrder;
128-
129-
switch (this->_dataMode) {
130-
default:
131-
case SPI_MODE0:
132-
config |= (SPI_CONFIG_CPOL_ActiveHigh << SPI_CONFIG_CPOL_Pos);
133-
config |= (SPI_CONFIG_CPHA_Leading << SPI_CONFIG_CPHA_Pos);
134-
break;
135-
136-
case SPI_MODE1:
137-
config |= (SPI_CONFIG_CPOL_ActiveHigh << SPI_CONFIG_CPOL_Pos);
138-
config |= (SPI_CONFIG_CPHA_Trailing << SPI_CONFIG_CPHA_Pos);
139-
break;
140-
141-
case SPI_MODE2:
142-
config |= (SPI_CONFIG_CPOL_ActiveLow << SPI_CONFIG_CPOL_Pos);
143-
config |= (SPI_CONFIG_CPHA_Leading << SPI_CONFIG_CPHA_Pos);
144-
break;
145-
146-
case SPI_MODE3:
147-
config |= (SPI_CONFIG_CPOL_ActiveLow << SPI_CONFIG_CPOL_Pos);
148-
config |= (SPI_CONFIG_CPHA_Trailing << SPI_CONFIG_CPHA_Pos);
149-
break;
150-
}
151-
152-
_p_spi->CONFIG = config;
130+
_p_spi->CONFIG = this->_bitOrder | mode2config(this->_dataMode);
153131
}
154132

155133
void SPIClass::setDataMode(uint8_t mode)
156134
{
157135
this->_dataMode = mode;
158-
159-
uint32_t config = this->_bitOrder;
160-
161-
switch (this->_dataMode) {
162-
default:
163-
case SPI_MODE0:
164-
config |= (SPI_CONFIG_CPOL_ActiveHigh << SPI_CONFIG_CPOL_Pos);
165-
config |= (SPI_CONFIG_CPHA_Leading << SPI_CONFIG_CPHA_Pos);
166-
break;
167-
168-
case SPI_MODE1:
169-
config |= (SPI_CONFIG_CPOL_ActiveHigh << SPI_CONFIG_CPOL_Pos);
170-
config |= (SPI_CONFIG_CPHA_Trailing << SPI_CONFIG_CPHA_Pos);
171-
break;
172-
173-
case SPI_MODE2:
174-
config |= (SPI_CONFIG_CPOL_ActiveLow << SPI_CONFIG_CPOL_Pos);
175-
config |= (SPI_CONFIG_CPHA_Leading << SPI_CONFIG_CPHA_Pos);
176-
break;
177-
178-
case SPI_MODE3:
179-
config |= (SPI_CONFIG_CPOL_ActiveLow << SPI_CONFIG_CPOL_Pos);
180-
config |= (SPI_CONFIG_CPHA_Trailing << SPI_CONFIG_CPHA_Pos);
181-
break;
182-
}
183-
184-
_p_spi->CONFIG = config;
136+
_p_spi->CONFIG = this->_bitOrder | mode2config(this->_dataMode);
185137
}
186138

187139
void SPIClass::setClockDivider(uint32_t div)

0 commit comments

Comments
 (0)