mirror of
https://github.com/arduino/Arduino.git
synced 2025-03-14 11:29:26 +01:00
SPI initialization fix. Seems working need more testing
This commit is contained in:
parent
e484f0712a
commit
fdcb017d41
@ -10,13 +10,16 @@
|
|||||||
|
|
||||||
#include "SPI.h"
|
#include "SPI.h"
|
||||||
|
|
||||||
SPIClass::SPIClass(Spi *_spi, uint32_t _id) : spi(_spi), id(_id) {
|
SPIClass::SPIClass(Spi *_spi, uint32_t _id, void(*_initCb)(void)) :
|
||||||
|
spi(_spi), id(_id), initCb(_initCb) {
|
||||||
// Empty
|
// Empty
|
||||||
}
|
}
|
||||||
|
|
||||||
void SPIClass::begin() {
|
void SPIClass::begin() {
|
||||||
|
initCb();
|
||||||
|
|
||||||
// Set CS on NPCS3
|
// Set CS on NPCS3
|
||||||
SPI_Configure(spi, id, SPI_MR_MSTR | SPI_MR_PS | SPI_MR_PCS(0x07));
|
SPI_Configure(spi, id, SPI_MR_MSTR | SPI_MR_PCS(0x07));
|
||||||
SPI_Enable( spi);
|
SPI_Enable( spi);
|
||||||
setClockDivider(1);
|
setClockDivider(1);
|
||||||
}
|
}
|
||||||
@ -53,5 +56,20 @@ void SPIClass::detachInterrupt(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if SPI_INTERFACES_COUNT > 0
|
#if SPI_INTERFACES_COUNT > 0
|
||||||
SPIClass SPI0(SPI_INTERFACE, SPI_INTERFACE_ID);
|
static void SPI0_Init(void) {
|
||||||
|
PIO_Configure(g_APinDescription[PIN_SPI_MOSI].pPort,
|
||||||
|
g_APinDescription[PIN_SPI_MOSI].ulPinType,
|
||||||
|
g_APinDescription[PIN_SPI_MOSI].ulPin,
|
||||||
|
g_APinDescription[PIN_SPI_MOSI].ulPinConfiguration);
|
||||||
|
PIO_Configure(g_APinDescription[PIN_SPI_MISO].pPort,
|
||||||
|
g_APinDescription[PIN_SPI_MISO].ulPinType,
|
||||||
|
g_APinDescription[PIN_SPI_MISO].ulPin,
|
||||||
|
g_APinDescription[PIN_SPI_MISO].ulPinConfiguration);
|
||||||
|
PIO_Configure(g_APinDescription[PIN_SPI_SCK].pPort,
|
||||||
|
g_APinDescription[PIN_SPI_SCK].ulPinType,
|
||||||
|
g_APinDescription[PIN_SPI_SCK].ulPin,
|
||||||
|
g_APinDescription[PIN_SPI_SCK].ulPinConfiguration);
|
||||||
|
}
|
||||||
|
|
||||||
|
SPIClass SPI0(SPI_INTERFACE, SPI_INTERFACE_ID, SPI0_Init);
|
||||||
#endif
|
#endif
|
||||||
|
@ -34,7 +34,7 @@
|
|||||||
|
|
||||||
class SPIClass {
|
class SPIClass {
|
||||||
public:
|
public:
|
||||||
SPIClass(Spi *_spi, uint32_t _id);
|
SPIClass(Spi *_spi, uint32_t _id, void(*_initCb)(void));
|
||||||
|
|
||||||
byte transfer(byte _data);
|
byte transfer(byte _data);
|
||||||
|
|
||||||
@ -53,6 +53,7 @@ class SPIClass {
|
|||||||
private:
|
private:
|
||||||
Spi *spi;
|
Spi *spi;
|
||||||
uint32_t id, divider, mode;
|
uint32_t id, divider, mode;
|
||||||
|
void (*initCb)(void);
|
||||||
};
|
};
|
||||||
|
|
||||||
#if SPI_INTERFACES_COUNT > 0
|
#if SPI_INTERFACES_COUNT > 0
|
||||||
|
Loading…
x
Reference in New Issue
Block a user