diff options
Diffstat (limited to 'platforms/chibios/drivers/spi_master.c')
-rw-r--r-- | platforms/chibios/drivers/spi_master.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/platforms/chibios/drivers/spi_master.c b/platforms/chibios/drivers/spi_master.c index c592369dd..dde0bb059 100644 --- a/platforms/chibios/drivers/spi_master.c +++ b/platforms/chibios/drivers/spi_master.c | |||
@@ -54,6 +54,7 @@ bool spi_start(pin_t slavePin, bool lsbFirst, uint8_t mode, uint16_t divisor) { | |||
54 | return false; | 54 | return false; |
55 | } | 55 | } |
56 | 56 | ||
57 | #ifndef WB32F3G71xx | ||
57 | uint16_t roundedDivisor = 2; | 58 | uint16_t roundedDivisor = 2; |
58 | while (roundedDivisor < divisor) { | 59 | while (roundedDivisor < divisor) { |
59 | roundedDivisor <<= 1; | 60 | roundedDivisor <<= 1; |
@@ -62,6 +63,7 @@ bool spi_start(pin_t slavePin, bool lsbFirst, uint8_t mode, uint16_t divisor) { | |||
62 | if (roundedDivisor < 2 || roundedDivisor > 256) { | 63 | if (roundedDivisor < 2 || roundedDivisor > 256) { |
63 | return false; | 64 | return false; |
64 | } | 65 | } |
66 | #endif | ||
65 | 67 | ||
66 | #if defined(K20x) || defined(KL2x) | 68 | #if defined(K20x) || defined(KL2x) |
67 | spiConfig.tar0 = SPIx_CTARn_FMSZ(7) | SPIx_CTARn_ASC(1); | 69 | spiConfig.tar0 = SPIx_CTARn_FMSZ(7) | SPIx_CTARn_ASC(1); |
@@ -135,6 +137,37 @@ bool spi_start(pin_t slavePin, bool lsbFirst, uint8_t mode, uint16_t divisor) { | |||
135 | } | 137 | } |
136 | 138 | ||
137 | spiConfig.cpr = (roundedDivisor - 1) >> 1; | 139 | spiConfig.cpr = (roundedDivisor - 1) >> 1; |
140 | |||
141 | #elif defined(WB32F3G71xx) | ||
142 | if (!lsbFirst) { | ||
143 | osalDbgAssert(lsbFirst != FALSE, "unsupported lsbFirst"); | ||
144 | } | ||
145 | |||
146 | if (divisor < 1) { | ||
147 | return false; | ||
148 | } | ||
149 | |||
150 | spiConfig.SPI_BaudRatePrescaler = (divisor << 2); | ||
151 | |||
152 | switch (mode) { | ||
153 | case 0: | ||
154 | spiConfig.SPI_CPHA = SPI_CPHA_1Edge; | ||
155 | spiConfig.SPI_CPOL = SPI_CPOL_Low; | ||
156 | break; | ||
157 | case 1: | ||
158 | spiConfig.SPI_CPHA = SPI_CPHA_2Edge; | ||
159 | spiConfig.SPI_CPOL = SPI_CPOL_Low; | ||
160 | break; | ||
161 | case 2: | ||
162 | spiConfig.SPI_CPHA = SPI_CPHA_1Edge; | ||
163 | spiConfig.SPI_CPOL = SPI_CPOL_High; | ||
164 | break; | ||
165 | case 3: | ||
166 | spiConfig.SPI_CPHA = SPI_CPHA_2Edge; | ||
167 | spiConfig.SPI_CPOL = SPI_CPOL_High; | ||
168 | break; | ||
169 | } | ||
170 | |||
138 | #else | 171 | #else |
139 | spiConfig.cr1 = 0; | 172 | spiConfig.cr1 = 0; |
140 | 173 | ||