11
11
#include " SPI_Class.h"
12
12
13
13
SPIClass::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 )
15
15
{
16
16
// Empty
17
17
}
18
18
19
19
void SPIClass::begin () {
20
- initCb ();
21
- SPI_Configure (spi, id, SPI_MR_MSTR | SPI_MR_PS | SPI_MR_MODFDIS);
22
- SPI_Enable (spi);
20
+ init ();
23
21
24
22
// NPCS control is left to the user
25
23
@@ -30,9 +28,7 @@ void SPIClass::begin() {
30
28
}
31
29
32
30
void 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 ();
36
32
37
33
uint32_t spiPin = BOARD_PIN_TO_SPI_PIN (_pin);
38
34
PIO_Configure (
@@ -47,6 +43,15 @@ void SPIClass::begin(uint8_t _pin) {
47
43
setBitOrder (_pin, MSBFIRST);
48
44
}
49
45
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
+
50
55
void SPIClass::end (uint8_t _pin) {
51
56
uint32_t spiPin = BOARD_PIN_TO_SPI_PIN (_pin);
52
57
// Setting the pin as INPUT will disconnect it from SPI peripheral
@@ -55,6 +60,7 @@ void SPIClass::end(uint8_t _pin) {
55
60
56
61
void SPIClass::end () {
57
62
SPI_Disable (spi);
63
+ initialized = false ;
58
64
}
59
65
60
66
void SPIClass::setBitOrder (uint8_t _pin, BitOrder _bitOrder) {
0 commit comments