Skip to content

Commit 359658e

Browse files
committed
alif/machine_spi: Fix init() to only change requested settings.
Signed-off-by: Kwabena W. Agyeman <kwagyeman@live.com>
1 parent b7efb95 commit 359658e

File tree

1 file changed

+26
-7
lines changed

1 file changed

+26
-7
lines changed

ports/alif/machine_spi.c

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,8 @@ static inline uint32_t spi_get_clk(machine_spi_obj_t *spi) {
7979
return spi->is_lp ? GetSystemCoreClock() : GetSystemAHBClock();
8080
}
8181

82-
static void spi_init(machine_spi_obj_t *spi, uint32_t baudrate,
83-
uint32_t polarity, uint32_t phase, uint32_t bits, uint32_t firstbit) {
82+
static void spi_init(machine_spi_obj_t *spi, int32_t baudrate,
83+
int32_t polarity, int32_t phase, int32_t bits, int32_t firstbit) {
8484
const machine_pin_obj_t *pins[4] = { NULL, NULL, NULL, NULL };
8585
switch (spi->id) {
8686
#if defined(MICROPY_HW_SPI0_SCK)
@@ -161,7 +161,9 @@ static void spi_init(machine_spi_obj_t *spi, uint32_t baudrate,
161161
spi_mask_interrupts(spi->inst);
162162

163163
// Configure baudrate clock
164-
spi_set_bus_speed(spi->inst, baudrate, spi_get_clk(spi));
164+
if (baudrate > 0) {
165+
spi_set_bus_speed(spi->inst, baudrate, spi_get_clk(spi));
166+
}
165167

166168
// Configure FIFOs
167169
spi_set_tx_threshold(spi->inst, 0);
@@ -172,6 +174,21 @@ static void spi_init(machine_spi_obj_t *spi, uint32_t baudrate,
172174
}
173175

174176
// Configure SPI bus mode.
177+
if (!spi->is_lp) {
178+
if (polarity < 0) {
179+
polarity = (spi->inst->SPI_CTRLR0 & SPI_CTRLR0_SCPOL_HIGH) ? 1 : 0;
180+
}
181+
if (phase < 0) {
182+
phase = (spi->inst->SPI_CTRLR0 & SPI_CTRLR0_SCPH_HIGH) ? 1 : 0;
183+
}
184+
} else {
185+
if (polarity < 0) {
186+
polarity = (spi->inst->SPI_CTRLR0 & LPSPI_CTRLR0_SCPOL_HIGH) ? 1 : 0;
187+
}
188+
if (phase < 0) {
189+
phase = (spi->inst->SPI_CTRLR0 & LPSPI_CTRLR0_SCPH_HIGH) ? 1 : 0;
190+
}
191+
}
175192
uint32_t spi_mode = (polarity << 1) | phase;
176193
if (!spi->is_lp) {
177194
spi_set_mode(spi->inst, spi_mode);
@@ -193,10 +210,12 @@ static void spi_init(machine_spi_obj_t *spi, uint32_t baudrate,
193210
}
194211

195212
// Configure frame size.
196-
if (!spi->is_lp) {
197-
spi_set_dfs(spi->inst, bits);
198-
} else {
199-
lpspi_set_dfs(spi->inst, bits);
213+
if (bits > 0) {
214+
if (!spi->is_lp) {
215+
spi_set_dfs(spi->inst, bits);
216+
} else {
217+
lpspi_set_dfs(spi->inst, bits);
218+
}
200219
}
201220

202221
// Configure slave select pin

0 commit comments

Comments
 (0)