40
40
static const PinMap PinMap_SPI_MOSI [] = {
41
41
{PA_7 , SPI_1 , STM_PIN_DATA (STM_MODE_AF_PP , GPIO_PULLUP , GPIO_AF5_SPI1 )},
42
42
{PB_5 , SPI_1 , STM_PIN_DATA (STM_MODE_AF_PP , GPIO_PULLUP , GPIO_AF5_SPI1 )},
43
- { PC_3 , SPI_2 , STM_PIN_DATA (STM_MODE_AF_PP , GPIO_PULLUP , GPIO_AF5_SPI2 )},
43
+ //{PB_5 , SPI_3 , STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3 )},
44
44
{PB_15 , SPI_2 , STM_PIN_DATA (STM_MODE_AF_PP , GPIO_PULLUP , GPIO_AF5_SPI2 )},
45
+ {PC_3 , SPI_2 , STM_PIN_DATA (STM_MODE_AF_PP , GPIO_PULLUP , GPIO_AF5_SPI2 )},
45
46
{PC_12 , SPI_3 , STM_PIN_DATA (STM_MODE_AF_PP , GPIO_PULLUP , GPIO_AF6_SPI3 )},
46
- {PB_5 , SPI_3 , STM_PIN_DATA (STM_MODE_AF_PP , GPIO_PULLUP , GPIO_AF6_SPI3 )},
47
47
{NC , NC , 0 }
48
48
};
49
49
50
50
static const PinMap PinMap_SPI_MISO [] = {
51
51
{PA_6 , SPI_1 , STM_PIN_DATA (STM_MODE_AF_PP , GPIO_PULLUP , GPIO_AF5_SPI1 )},
52
52
{PB_4 , SPI_1 , STM_PIN_DATA (STM_MODE_AF_PP , GPIO_PULLUP , GPIO_AF5_SPI1 )},
53
- { PC_2 , SPI_2 , STM_PIN_DATA (STM_MODE_AF_PP , GPIO_PULLUP , GPIO_AF5_SPI2 )},
53
+ //{PB_4 , SPI_3 , STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3 )},
54
54
{PB_14 , SPI_2 , STM_PIN_DATA (STM_MODE_AF_PP , GPIO_PULLUP , GPIO_AF5_SPI2 )},
55
+ {PC_2 , SPI_2 , STM_PIN_DATA (STM_MODE_AF_PP , GPIO_PULLUP , GPIO_AF5_SPI2 )},
55
56
{PC_11 , SPI_3 , STM_PIN_DATA (STM_MODE_AF_PP , GPIO_PULLUP , GPIO_AF6_SPI3 )},
56
- {PB_4 , SPI_3 , STM_PIN_DATA (STM_MODE_AF_PP , GPIO_PULLUP , GPIO_AF6_SPI3 )},
57
57
{NC , NC , 0 }
58
58
};
59
59
60
60
static const PinMap PinMap_SPI_SCLK [] = {
61
61
{PA_5 , SPI_1 , STM_PIN_DATA (STM_MODE_AF_PP , GPIO_PULLUP , GPIO_AF5_SPI1 )},
62
62
{PB_3 , SPI_1 , STM_PIN_DATA (STM_MODE_AF_PP , GPIO_PULLUP , GPIO_AF5_SPI1 )},
63
+ //{PB_3, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)},
63
64
{PB_10 , SPI_2 , STM_PIN_DATA (STM_MODE_AF_PP , GPIO_PULLUP , GPIO_AF5_SPI2 )},
64
65
{PB_13 , SPI_2 , STM_PIN_DATA (STM_MODE_AF_PP , GPIO_PULLUP , GPIO_AF5_SPI2 )},
65
66
{PC_10 , SPI_3 , STM_PIN_DATA (STM_MODE_AF_PP , GPIO_PULLUP , GPIO_AF6_SPI3 )},
66
- {PB_3 , SPI_3 , STM_PIN_DATA (STM_MODE_AF_PP , GPIO_PULLUP , GPIO_AF6_SPI3 )},
67
67
{NC , NC , 0 }
68
68
};
69
69
70
- // Only used in Slave mode
71
70
static const PinMap PinMap_SPI_SSEL [] = {
72
- {PA_4 , SPI_1 , STM_PIN_DATA (STM_MODE_INPUT , GPIO_NOPULL , GPIO_AF5_SPI1 )},
73
- { PA_15 , SPI_1 , STM_PIN_DATA (STM_MODE_INPUT , GPIO_NOPULL , GPIO_AF5_SPI1 )},
74
- { PB_9 , SPI_2 , STM_PIN_DATA (STM_MODE_INPUT , GPIO_NOPULL , GPIO_AF5_SPI2 )},
75
- { PB_12 , SPI_2 , STM_PIN_DATA (STM_MODE_INPUT , GPIO_NOPULL , GPIO_AF5_SPI2 )},
76
- { PA_4 , SPI_3 , STM_PIN_DATA (STM_MODE_INPUT , GPIO_NOPULL , GPIO_AF6_SPI3 )},
77
- { PA_15 , SPI_3 , STM_PIN_DATA (STM_MODE_INPUT , GPIO_NOPULL , GPIO_AF6_SPI3 )},
71
+ {PA_4 , SPI_1 , STM_PIN_DATA (STM_MODE_INPUT , GPIO_NOPULL , GPIO_AF5_SPI1 )},
72
+ //{PA_4, SPI_3 , STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, GPIO_AF6_SPI3 )},
73
+ { PA_15 , SPI_1 , STM_PIN_DATA (STM_MODE_INPUT , GPIO_NOPULL , GPIO_AF5_SPI1 )},
74
+ //{PA_15, SPI_3 , STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, GPIO_AF6_SPI3 )},
75
+ { PB_9 , SPI_2 , STM_PIN_DATA (STM_MODE_INPUT , GPIO_NOPULL , GPIO_AF5_SPI2 )},
76
+ { PB_12 , SPI_2 , STM_PIN_DATA (STM_MODE_INPUT , GPIO_NOPULL , GPIO_AF5_SPI2 )},
78
77
{NC , NC , 0 }
79
78
};
80
79
@@ -133,9 +132,6 @@ void spi_init(spi_t *obj, PinName mosi, PinName miso, PinName sclk, PinName ssel
133
132
pinmap_pinout (mosi , PinMap_SPI_MOSI );
134
133
pinmap_pinout (miso , PinMap_SPI_MISO );
135
134
pinmap_pinout (sclk , PinMap_SPI_SCLK );
136
- if (ssel != NC ) { // slave mode
137
- pinmap_pinout (ssel , PinMap_SPI_SSEL );
138
- }
139
135
140
136
// Save new values
141
137
obj -> bits = SPI_DATASIZE_8BIT ;
@@ -202,61 +198,31 @@ void spi_format(spi_t *obj, int bits, int mode, int slave) {
202
198
}
203
199
204
200
void spi_frequency (spi_t * obj , int hz ) {
205
- <<<<<<< HEAD
206
201
// Note: The frequencies are obtained with SPI1 clock = 84 MHz (APB2 clock)
207
- if (hz < 500000 ) {
208
- obj -> br_presc = SPI_BAUDRATEPRESCALER_256 ; // 331 kHz
202
+ if (hz < 600000 ) {
203
+ obj -> br_presc = SPI_BAUDRATEPRESCALER_256 ; // 330 kHz
209
204
}
210
- else if ((hz >= 500000 ) && (hz < 1000000 )) {
211
- obj -> br_presc = SPI_BAUDRATEPRESCALER_128 ; // 663 kHz
205
+ else if ((hz >= 600000 ) && (hz < 1000000 )) {
206
+ obj -> br_presc = SPI_BAUDRATEPRESCALER_128 ; // 656 kHz
212
207
}
213
208
else if ((hz >= 1000000 ) && (hz < 2000000 )) {
214
209
obj -> br_presc = SPI_BAUDRATEPRESCALER_64 ; // 1.3 MHz
215
210
}
216
211
else if ((hz >= 2000000 ) && (hz < 5000000 )) {
217
- obj -> br_presc = SPI_BAUDRATEPRESCALER_32 ; // 2.65 MHz
212
+ obj -> br_presc = SPI_BAUDRATEPRESCALER_32 ; // 2.6 MHz
218
213
}
219
214
else if ((hz >= 5000000 ) && (hz < 10000000 )) {
220
- obj -> br_presc = SPI_BAUDRATEPRESCALER_16 ; // 5.3 MHz
215
+ obj -> br_presc = SPI_BAUDRATEPRESCALER_16 ; // 5.25 MHz
221
216
}
222
- else if ((hz >= 10000000 ) && (hz < 20000000 )) {
223
- obj -> br_presc = SPI_BAUDRATEPRESCALER_8 ; // 10.6 MHz
217
+ else if ((hz >= 10000000 ) && (hz < 21000000 )) {
218
+ obj -> br_presc = SPI_BAUDRATEPRESCALER_8 ; // 10.5 MHz
224
219
}
225
- else if ((hz >= 20000000 ) && (hz < 40000000 )) {
226
- obj -> br_presc = SPI_BAUDRATEPRESCALER_4 ; // 21.2 MHz
220
+ else if ((hz >= 21000000 ) && (hz < 42000000 )) {
221
+ obj -> br_presc = SPI_BAUDRATEPRESCALER_4 ; // 21 MHz
227
222
}
228
- else { // >= 40000000
223
+ else { // >= 42000000
229
224
obj -> br_presc = SPI_BAUDRATEPRESCALER_2 ; // 42 MHz
230
225
}
231
- = == == ==
232
- // Get SPI clock frequency
233
-
234
- // SPI1 runs from PCLK2, which runs at SystemCoreClock / 2. SPI2 and SPI3
235
- // run from PCLK1, which runs at SystemCoreClock / 4.
236
- uint32_t PCLK = SystemCoreClock ;
237
- switch ((int )obj -> spi ) {
238
- case SPI_1 : PCLK = PCLK >> 1 ; break ;
239
- case SPI_2 : PCLK = PCLK >> 2 ; break ;
240
- case SPI_3 : PCLK = PCLK >> 2 ; break ;
241
- }
242
- // Choose the baud rate divisor (between 2 and 256)
243
- uint32_t divisor = PCLK / hz ;
244
-
245
- // Find the nearest power-of-2
246
- divisor = (divisor > 0 ? divisor - 1 : 0 );
247
- divisor |= divisor >> 1 ;
248
- divisor |= divisor >> 2 ;
249
- divisor |= divisor >> 4 ;
250
- divisor |= divisor >> 8 ;
251
- divisor |= divisor >> 16 ;
252
- divisor ++ ;
253
-
254
- uint32_t baud_rate = __builtin_ffs (divisor ) - 2 ;
255
-
256
- // Save new value
257
- obj -> br_presc = ((baud_rate > 7 ) ? (7 << 3 ) : (baud_rate << 3 ));
258
-
259
- >>>>>>> b95ba7a52a7ae9e1239b3adafff2293a2c7aebfd
260
226
init_spi (obj );
261
227
}
262
228
@@ -279,9 +245,7 @@ static inline int ssp_writeable(spi_t *obj) {
279
245
static inline void ssp_write (spi_t * obj , int value ) {
280
246
SPI_TypeDef * spi = (SPI_TypeDef * )(obj -> spi );
281
247
while (!ssp_writeable (obj ));
282
- if (obj -> bits == SPI_DATASIZE_8BIT )
283
- spi -> DR = (uint8_t )value ; // 8 bit mode
284
- else spi -> DR = (uint16_t )value ; // 16 bit mode
248
+ spi -> DR = (uint16_t )value ;
285
249
}
286
250
287
251
static inline int ssp_read (spi_t * obj ) {
@@ -314,7 +278,7 @@ int spi_slave_read(spi_t *obj) {
314
278
void spi_slave_write (spi_t * obj , int value ) {
315
279
SPI_TypeDef * spi = (SPI_TypeDef * )(obj -> spi );
316
280
while (!ssp_writeable (obj ));
317
- spi -> DR = (uint8_t )value ;
281
+ spi -> DR = (uint16_t )value ;
318
282
}
319
283
320
284
int spi_busy (spi_t * obj ) {
0 commit comments