Skip to content

Commit cd14e01

Browse files
Merge branch 'master' of github.com:grumpycoders/uC-sdk
2 parents 6218431 + 0d2454c commit cd14e01

File tree

1 file changed

+21
-1
lines changed
  • hardware/src/stm32f4xx

1 file changed

+21
-1
lines changed

hardware/src/stm32f4xx/ssp.c

+21-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,26 @@
88

99
static SPI_TypeDef * const spis[] = { (void *) 0, SPI1, SPI2, SPI3, SPI4, SPI5, SPI6 };
1010

11+
static inline uint16_t compute_prescaler(uint32_t clock) {
12+
if (clock >= SystemCoreClock / 2) {
13+
return SPI_BaudRatePrescaler_2;
14+
} else if (clock >= SystemCoreClock / 4) {
15+
return SPI_BaudRatePrescaler_4;
16+
} else if (clock >= SystemCoreClock / 8) {
17+
return SPI_BaudRatePrescaler_8;
18+
} else if (clock >= SystemCoreClock / 16) {
19+
return SPI_BaudRatePrescaler_16;
20+
} else if (clock >= SystemCoreClock / 32) {
21+
return SPI_BaudRatePrescaler_32;
22+
} else if (clock >= SystemCoreClock / 64) {
23+
return SPI_BaudRatePrescaler_64;
24+
} else if (clock >= SystemCoreClock / 128) {
25+
return SPI_BaudRatePrescaler_128;
26+
}
27+
28+
return SPI_BaudRatePrescaler_256;
29+
}
30+
1131
void ssp_config(ssp_port_t ssp_port, uint32_t clock) {
1232
ssp_t ssp = get_ssp(ssp_port);
1333
pin_t sclk = get_sclk(ssp_port);
@@ -81,7 +101,7 @@ void ssp_config(ssp_port_t ssp_port, uint32_t clock) {
81101
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
82102
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
83103
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
84-
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;
104+
SPI_InitStructure.SPI_BaudRatePrescaler = compute_prescaler(clock);
85105
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
86106
SPI_InitStructure.SPI_CRCPolynomial = 7;
87107
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;

0 commit comments

Comments
 (0)