This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS320F28377S: SPI slave receive Problem

Part Number: TMS320F28377S

HI,

i am trying to send 1 byte of data from master board to another slave board through SPI communication. For example if i am sending 0x1010 i am getting in slave board receive buffer as 0x0101.

SLAVE CONFIGURATION :

void SPI_init(void)
{
EALLOW;
GpioCtrlRegs.GPBPUD.bit.GPIO58 = 0; // Enable pull-up on GPIO58 (SPISIMOA)
GpioCtrlRegs.GPBPUD.bit.GPIO59 = 0; // Enable pull-up on GPIO59 (SPISOMIA)
GpioCtrlRegs.GPBPUD.bit.GPIO60 = 0; // Enable pull-up on GPIO60 (SPICLKA)
GpioCtrlRegs.GPBPUD.bit.GPIO61 = 0; // Enable pull-up on GPIO61 (SPISTEA)

GpioCtrlRegs.GPBQSEL2.bit.GPIO58 = 3; // Asynch input GPIO58 (SPISIMOA)
GpioCtrlRegs.GPBQSEL2.bit.GPIO59 = 3; // Asynch input GPIO59 (SPISOMIA)
GpioCtrlRegs.GPBQSEL2.bit.GPIO60 = 3; // Asynch input GPIO60 (SPICLKA)
GpioCtrlRegs.GPBQSEL2.bit.GPIO61 = 3; // Asynch input GPIO61 (SPISTEA)

GpioCtrlRegs.GPBGMUX2.bit.GPIO58 = 3;
GpioCtrlRegs.GPBGMUX2.bit.GPIO59 = 3;
GpioCtrlRegs.GPBGMUX2.bit.GPIO60 = 3;
GpioCtrlRegs.GPBGMUX2.bit.GPIO61 = 3;

GpioCtrlRegs.GPBMUX2.bit.GPIO58 = 3; // Configure GPIO58 as SPISIMOA
GpioCtrlRegs.GPBMUX2.bit.GPIO59 = 3; // Configure GPIO59 as SPISOMIA
GpioCtrlRegs.GPBMUX2.bit.GPIO60 = 3; // Configure GPIO60 as SPICLKA
GpioCtrlRegs.GPBMUX2.bit.GPIO61 = 3; // Configure GPIO61 as SPISTEA
EDIS;

// SpiaRegs.SPIFFTX.all = 0xC022; // Enable FIFOs, set TX FIFO level to 2
// SpiaRegs.SPIFFRX.all = 0x0022; // Set RX FIFO level to 2
// SpiaRegs.SPIFFCT.all = 0x00;

SpiaRegs.SPIFFTX.all = 0xE040;
SpiaRegs.SPIFFRX.all = 0x2044;
SpiaRegs.SPIFFCT.all = 0x0;

SpiaRegs.SPIFFTX.bit.TXFIFO=1;
SpiaRegs.SPIFFRX.bit.RXFIFORESET=1;
//SpiaRegs.SPIFFRX.bit.RXFFST = 0x10;
SpiaRegs.SPIFFCT.all = 0x00;

SpiaRegs.SPICCR.bit.SPISWRESET = 0; // Set reset low before configuration changes
SpiaRegs.SPICCR.bit.CLKPOLARITY = 0; // Clock polarity (0 == rising, 1 == falling)
SpiaRegs.SPICCR.bit.SPICHAR = (16-1); // 16-bit character
SpiaRegs.SPICCR.bit.SPILBK = 0; // Disable loop-back

SpiaRegs.SPICTL.bit.MASTER_SLAVE = 0; // Enable master (0 == slave, 1 == master)
SpiaRegs.SPICTL.bit.TALK = 1; // Enable transmission (Talk)
SpiaRegs.SPICTL.bit.CLK_PHASE = 0; // Clock phase (0 == normal, 1 == delayed)
SpiaRegs.SPICTL.bit.SPIINTENA = 1; // SPI interrupts are disabled

SpiaRegs.SPIBRR.bit.SPI_BIT_RATE = SPI_BRR; // Set the baud rate

/*********************** Halting on a breakpoint will not halt the SPI*********************/

SpiaRegs.SPIPRI.bit.FREE = 1; // Set FREE bit

SpiaRegs.SPICCR.bit.SPISWRESET = 1; // Release the SPI from reset

PieCtrlRegs.PIECTRL.bit.ENPIE = 1; // Enable the PIE block
PieCtrlRegs.PIEIER6.bit.INTx1 = 1; // Enable PIE Group 6, INT 1
IER=0x20; // Enable CPU INT6
EINT; // Enable Global Interrupts

}

void vSPI_RECEIVE(Uint16 Rxdata)
{
//SpiaRegs.SPIFFRX.bit.RXFIFORESET = 1 ;

while(SpiaRegs.SPIFFRX.bit.RXFFST != 1)
{}
Rxdata = SpiaRegs.SPIRXBUF;
Rxdata++;
}

please help us to resolve the issue.

Regards,

Jagadeesh s