Skip to content

Commit 80f9f9a

Browse files
stickbreakerme-no-dev
authored andcommitted
fix removeApbChangeCallback() error in spiStopBus() (#3675)
* fix removeApbChangeCallback() error in spiStopBus() spiStartBus() was using spiStopBus() to init the hardware, one of spiStopBus() functions is to unregister the runtime CPU clock speed change callback. But, spiStartBus() only wanted to init the hardware. This patch separates the hardware init into a standalone function spiInitBus() that both spiStartBus() and spiStopBus() call. * Update esp32-hal-spi.c capitalization problem
1 parent b50a175 commit 80f9f9a

File tree

1 file changed

+18
-11
lines changed

1 file changed

+18
-11
lines changed

cores/esp32/esp32-hal-spi.c

+18-11
Original file line numberDiff line numberDiff line change
@@ -384,12 +384,8 @@ static void _on_apb_change(void * arg, apb_change_ev_t ev_type, uint32_t old_apb
384384
}
385385
}
386386

387-
void spiStopBus(spi_t * spi)
387+
static void spiInitBus(spi_t * spi)
388388
{
389-
if(!spi) {
390-
return;
391-
}
392-
SPI_MUTEX_LOCK();
393389
spi->dev->slave.trans_done = 0;
394390
spi->dev->slave.slave_mode = 0;
395391
spi->dev->pin.val = 0;
@@ -399,8 +395,19 @@ void spiStopBus(spi_t * spi)
399395
spi->dev->ctrl1.val = 0;
400396
spi->dev->ctrl2.val = 0;
401397
spi->dev->clock.val = 0;
402-
SPI_MUTEX_UNLOCK();
398+
}
399+
400+
void spiStopBus(spi_t * spi)
401+
{
402+
if(!spi) {
403+
return;
404+
}
405+
403406
removeApbChangeCallback(spi, _on_apb_change);
407+
408+
SPI_MUTEX_LOCK();
409+
spiInitBus(spi);
410+
SPI_MUTEX_UNLOCK();
404411
}
405412

406413
spi_t * spiStartBus(uint8_t spi_num, uint32_t clockDiv, uint8_t dataMode, uint8_t bitOrder)
@@ -431,12 +438,8 @@ spi_t * spiStartBus(uint8_t spi_num, uint32_t clockDiv, uint8_t dataMode, uint8_
431438
DPORT_CLEAR_PERI_REG_MASK(DPORT_PERIP_RST_EN_REG, DPORT_SPI_RST_1);
432439
}
433440

434-
spiStopBus(spi);
435-
spiSetDataMode(spi, dataMode);
436-
spiSetBitOrder(spi, bitOrder);
437-
spiSetClockDiv(spi, clockDiv);
438-
439441
SPI_MUTEX_LOCK();
442+
spiInitBus(spi);
440443
spi->dev->user.usr_mosi = 1;
441444
spi->dev->user.usr_miso = 1;
442445
spi->dev->user.doutdin = 1;
@@ -447,6 +450,10 @@ spi_t * spiStartBus(uint8_t spi_num, uint32_t clockDiv, uint8_t dataMode, uint8_
447450
}
448451
SPI_MUTEX_UNLOCK();
449452

453+
spiSetDataMode(spi, dataMode);
454+
spiSetBitOrder(spi, bitOrder);
455+
spiSetClockDiv(spi, clockDiv);
456+
450457
addApbChangeCallback(spi, _on_apb_change);
451458
return spi;
452459
}

0 commit comments

Comments
 (0)