31
31
32
32
const SPISettings DEFAULT_SPI_SETTINGS = SPISettings();
33
33
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
+
34
65
SPIClass::SPIClass (NRF_SPIM_Type *p_spi, uint8_t uc_pinMISO, uint8_t uc_pinSCK, uint8_t uc_pinMOSI)
35
66
{
36
67
initialized = false ;
@@ -63,42 +94,6 @@ void SPIClass::begin()
63
94
beginTransaction (DEFAULT_SPI_SETTINGS);
64
95
}
65
96
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
-
102
97
void SPIClass::end ()
103
98
{
104
99
_p_spi->ENABLE = (SPI_ENABLE_ENABLE_Disabled << SPI_ENABLE_ENABLE_Pos);
@@ -110,10 +105,18 @@ void SPIClass::usingInterrupt(int /*interruptNumber*/)
110
105
{
111
106
}
112
107
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
+ }
117
120
118
121
void SPIClass::endTransaction (void )
119
122
{
@@ -124,64 +127,13 @@ void SPIClass::setBitOrder(BitOrder order)
124
127
{
125
128
this ->_bitOrder = (order == MSBFIRST ? SPI_CONFIG_ORDER_MsbFirst : SPI_CONFIG_ORDER_LsbFirst);
126
129
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 );
153
131
}
154
132
155
133
void SPIClass::setDataMode (uint8_t mode)
156
134
{
157
135
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 );
185
137
}
186
138
187
139
void SPIClass::setClockDivider (uint32_t div)
0 commit comments