aboutsummaryrefslogtreecommitdiff
path: root/platforms/chibios/drivers/spi_master.c
diff options
context:
space:
mode:
Diffstat (limited to 'platforms/chibios/drivers/spi_master.c')
-rw-r--r--platforms/chibios/drivers/spi_master.c33
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