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