Hey, I am trying to configure SPI in non FIFO mode for Picolo f28027 but it seems that interrupt is never raised, I configured in slave mode and my master is an arduino mega with continuously sending data in a loop. I tried to configure interrupt as well.
Here's the code
#include "DSP28x_Project.h"
interrupt void spi_rcs_isr();
void main()
{
InitSysCtrl();
/*Interrupt config*/
DINT;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
EALLOW;
PieVectTable.SPIRXINTA = &spi_rcs_isr;
PieCtrlRegs.PIECTRL.bit.ENPIE =1;
PieCtrlRegs.PIEIER1.bit.INTx1 = 1; // for spircs
PieCtrlRegs.PIECTRL.bit.PIEVECT= 0x0D90;
IER |= M_INT6; // cpu interrupt 6 for spirx
EINT;
ERTM;
/* GPIO pull up enable*/
GpioCtrlRegs.GPAPUD.bit.GPIO16 = 0;
GpioCtrlRegs.GPAPUD.bit.GPIO17 = 0;
GpioCtrlRegs.GPAPUD.bit.GPIO18 = 0;
GpioCtrlRegs.GPAPUD.bit.GPIO19 = 0;
/*Qualification Select*/
GpioCtrlRegs.GPAQSEL2.bit.GPIO16 = 3;
GpioCtrlRegs.GPAQSEL2.bit.GPIO17 = 3;
GpioCtrlRegs.GPAQSEL2.bit.GPIO18 = 3;
GpioCtrlRegs.GPAQSEL2.bit.GPIO19 = 3;
/*Setting up GPIO pins in SPI mode*/
GpioCtrlRegs.GPAMUX2.bit.GPIO16 = 1;
GpioCtrlRegs.GPAMUX2.bit.GPIO17 = 1;
GpioCtrlRegs.GPAMUX2.bit.GPIO18 = 1;
GpioCtrlRegs.GPAMUX2.bit.GPIO19 = 1;
/* SPI config */
SpiaRegs.SPICCR.bit.SPISWRESET = 0; // reset
SpiaRegs.SPICTL.bit.MASTER_SLAVE = 0; // slave mode
SpiaRegs.SPICCR.bit.CLKPOLARITY = 0; // data out on rising and in on falling
SpiaRegs.SPICTL.bit.CLK_PHASE = 0; // no delay
//SpiaRegs.SPIBRR = 127; // lowest baud rate
SpiaRegs.SPICCR.bit.SPICHAR = 7; // 8 bit word
SpiaRegs.SPISTS.bit.OVERRUN_FLAG = 0;
SpiaRegs.SPISTS.bit.INT_FLAG = 0;
SpiaRegs.SPIPRI.bit.TRIWIRE = 0;
SpiaRegs.SPIFFRX.bit.RXFFIENA = 0;
SpiaRegs.SPICTL.bit.OVERRUNINTENA = 1; //enable reciever overrun
SpiaRegs.SPICTL.bit.SPIINTENA = 1; // tx and rx interrupt enable
SpiaRegs.SPICCR.bit.SPISWRESET = 1; //release from reset
/* data transmission */
uint16_t data_rx =0;
// SpiaRegs.SPICTL.bit.TALK = 0; // transmission off
while(SpiaRegs.SPISTS.bit.INT_FLAG !=1); // Waits until data rx’d
data_rx = SpiaRegs.SPIRXBUF;
while(1);
}
interrupt void spi_rcs_isr()
{
int data_rx;
data_rx = SpiaRegs.SPIRXBUF;
}