1111#include " SPI_Class.h"
1212
1313SPIClass::SPIClass (Spi *_spi, uint32_t _id, void (*_initCb)(void )) :
14- spi(_spi), id(_id), initCb(_initCb)
14+ spi(_spi), id(_id), initCb(_initCb), initialized( false )
1515{
1616 // Empty
1717}
1818
1919void SPIClass::begin () {
20- initCb ();
21- SPI_Configure (spi, id, SPI_MR_MSTR | SPI_MR_PS | SPI_MR_MODFDIS);
22- SPI_Enable (spi);
20+ init ();
2321
2422 // NPCS control is left to the user
2523
@@ -30,9 +28,7 @@ void SPIClass::begin() {
3028}
3129
3230void SPIClass::begin (uint8_t _pin) {
33- initCb ();
34- SPI_Configure (spi, id, SPI_MR_MSTR | SPI_MR_PS | SPI_MR_MODFDIS);
35- SPI_Enable (spi);
31+ init ();
3632
3733 uint32_t spiPin = BOARD_PIN_TO_SPI_PIN (_pin);
3834 PIO_Configure (
@@ -47,6 +43,15 @@ void SPIClass::begin(uint8_t _pin) {
4743 setBitOrder (_pin, MSBFIRST);
4844}
4945
46+ void SPIClass::init () {
47+ if (initialized)
48+ return ;
49+ initCb ();
50+ SPI_Configure (spi, id, SPI_MR_MSTR | SPI_MR_PS | SPI_MR_MODFDIS);
51+ SPI_Enable (spi);
52+ initialized = true ;
53+ }
54+
5055void SPIClass::end (uint8_t _pin) {
5156 uint32_t spiPin = BOARD_PIN_TO_SPI_PIN (_pin);
5257 // Setting the pin as INPUT will disconnect it from SPI peripheral
@@ -55,6 +60,7 @@ void SPIClass::end(uint8_t _pin) {
5560
5661void SPIClass::end () {
5762 SPI_Disable (spi);
63+ initialized = false ;
5864}
5965
6066void SPIClass::setBitOrder (uint8_t _pin, BitOrder _bitOrder) {
0 commit comments