Hi everyone, i'm trying to set up the mkr gsm 1400 to be a slave on an spi network with a stm8l as the master.
I have tried to set up the SPI periheral on the SAMD21 microcontroller with ss mapped to pin B22 however the ss low interrupt always fires regardless on whats on the line.
Hopefully someone can see an issue in my setup, Thanks!
void setup()
{
Serial.begin(9600); // start serial for output
while (!Serial) { }
Serial.println("Starting setup");
SERCOM5->SPI.CTRLA.bit.ENABLE = 0;
SERCOM5->SPI.CTRLA.bit.MODE = 0x2; // SPI Slave Mode
SERCOM5->SPI.CTRLA.bit.CPOL = 1; // clock idle high
SERCOM5->SPI.CTRLA.bit.CPHA = 0; // on falling edge
SERCOM5->SPI.CTRLA.bit.FORM = 0; // NO ADDRESS
SERCOM5->SPI.CTRLA.bit.DORD = 1; // data order: LSB first
SERCOM5->SPI.CTRLB.bit.CHSIZE = 0x0; // 8-bit character
PORT->Group[PORTB].PINCFG[22].bit.PMUXEN = 1;
PORT->Group[PORTB].PMUX[11].reg |= 0x03; //set ss to be pin b22
SERCOM5->SPI.CTRLB.bit.RXEN = 1; // enable receiver
SERCOM5->SPI.CTRLB.bit.SSDE = 1; // wake up on ss low detect
SERCOM5->SPI.INTENSET.bit.RXC = 1; // enable receive complete interrupt
SERCOM5->SPI.CTRLA.bit.ENABLE = 1;
}
void loop()
{
delay(1000);
if (SERCOM5->SPI.INTFLAG.bit.RXC == 1) { // wait for a character in the receive buffer
Serial.print("got data");
Serial.println(SERCOM5->SPI.DATA.reg);
}
if (SERCOM5->SPI.INTFLAG.bit.ERROR == 1) { // wait for a character in the receive buffer
Serial.println("got error");
}
if (SERCOM5->SPI.INTFLAG.bit.SSL == 1) { // wait for a character in the receive buffer
Serial.println("got ssl");
}
}