Skip to content
Snippets Groups Projects
Commit 8b1d9bfd authored by Jonathan BAUDIN's avatar Jonathan BAUDIN
Browse files

SPI implement tested

parent 3589d6c2
No related branches found
No related tags found
No related merge requests found
...@@ -266,9 +266,9 @@ void SERCOM::writeDataSPI(uint8_t data) ...@@ -266,9 +266,9 @@ void SERCOM::writeDataSPI(uint8_t data)
sercom->SPI.DATA.bit.DATA = data; sercom->SPI.DATA.bit.DATA = data;
} }
uint8_t SERCOM::readDataSPI() uint16_t SERCOM::readDataSPI()
{ {
return sercom->SPI.DATA.bit.DATA; return sercom->SPI.DATA.reg;
} }
bool SERCOM::isBufferOverflowErrorSPI() bool SERCOM::isBufferOverflowErrorSPI()
......
...@@ -157,7 +157,7 @@ class SERCOM ...@@ -157,7 +157,7 @@ class SERCOM
void setBaudrateSPI(uint8_t divider); void setBaudrateSPI(uint8_t divider);
void setClockModeSPI(SercomSpiClockMode clockMode); void setClockModeSPI(SercomSpiClockMode clockMode);
void writeDataSPI(uint8_t data); void writeDataSPI(uint8_t data);
uint8_t readDataSPI(); uint16_t readDataSPI();
bool isBufferOverflowErrorSPI(); bool isBufferOverflowErrorSPI();
bool isDataRegisterEmptySPI(); bool isDataRegisterEmptySPI();
bool isTransmitCompleteSPI(); bool isTransmitCompleteSPI();
......
...@@ -10,18 +10,20 @@ ...@@ -10,18 +10,20 @@
#include "SPI.h" #include "SPI.h"
#include "wiring_digital.h" #include "wiring_digital.h"
#include "assert.h"
SPIClass::SPIClass(SERCOM *s) SPIClass::SPIClass(SERCOM *s)
{ {
assert(s != NULL );
sercom = s; sercom = s;
pinPeripheral(18, g_APinDescription[18].ulPinType);
pinPeripheral(20, g_APinDescription[20].ulPinType);
pinPeripheral(21, g_APinDescription[21].ulPinType);
} }
void SPIClass::begin() { void SPIClass::begin() {
// PIO init
pinPeripheral(18, g_APinDescription[18].ulPinType);
pinPeripheral(20, g_APinDescription[20].ulPinType);
pinPeripheral(21, g_APinDescription[21].ulPinType);
// Default speed set to 4Mhz, SPI mode set to MODE 0 and Bit order set to MSB first. // Default speed set to 4Mhz, SPI mode set to MODE 0 and Bit order set to MSB first.
sercom->initSPI(SPI_PAD_2_SCK_3, SERCOM_RX_PAD_0, SPI_CHAR_SIZE_8_BITS, MSB_FIRST); sercom->initSPI(SPI_PAD_2_SCK_3, SERCOM_RX_PAD_0, SPI_CHAR_SIZE_8_BITS, MSB_FIRST);
sercom->initSPIClock(SERCOM_SPI_MODE_0, 4000000); sercom->initSPIClock(SERCOM_SPI_MODE_0, 4000000);
......
...@@ -138,7 +138,7 @@ const PinDescription g_APinDescription[]= ...@@ -138,7 +138,7 @@ const PinDescription g_APinDescription[]=
{ PORTA, 23, PIO_SERCOM, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER }, // SCL: SERCOM3/PAD[1] { PORTA, 23, PIO_SERCOM, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER }, // SCL: SERCOM3/PAD[1]
// 18..23 SPI (ICSP:MISO,SCK,MOSI) // 18..23 SPI (ICSP:MISO,SCK,MOSI)
{ PORTA, 12, PIO_SERCOM, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER }, // MISO: SERCOM4/PAD[0] { PORTA, 12, PIO_SERCOM_ALT, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER }, // MISO: SERCOM4/PAD[0]
{ NOT_A_PORT, 0, PIO_NOT_A_PIN, PIN_ATTR_NONE, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER }, // 5V0 { NOT_A_PORT, 0, PIO_NOT_A_PIN, PIN_ATTR_NONE, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER }, // 5V0
{ PORTB, 11, PIO_SERCOM_ALT, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER }, // SCK: SERCOM4/PAD[3] { PORTB, 11, PIO_SERCOM_ALT, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER }, // SCK: SERCOM4/PAD[3]
{ PORTB, 10, PIO_SERCOM_ALT, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER }, // MOSI: SERCOM4/PAD[2] { PORTB, 10, PIO_SERCOM_ALT, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER }, // MOSI: SERCOM4/PAD[2]
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment