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.

LAUNCHXL-F28379D: LAUNCHXL-F28379D: SPI communication between two f28379D launchpads

Part Number: LAUNCHXL-F28379D
Other Parts Discussed in Thread: C2000WARE

hi everyone

I am a beginner in the CCS area and I need help. I am trying to communicate between two f28379D launchpads with SPI. I want to send data from master to slave. However, the problem is coming. Everything is great in the master. I observed the waveform in the master with an oscilloscope. 

but I am unable to receive the data on the slave side.

////////////////////////// master code ///////

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include "F28x_Project.h"
#include "F2837xD_device.h"
#include "F2837xD_Examples.h"

#include "device.h"
#include "driverlib.h"

void SPI_GPIO_Init();
void spi_init();
void spi_xmit(Uint16 a);
void spi_fifo_init();
uint16_t sdata =0;

void main(void)
{

Device_init();
Device_initGPIO();
DINT;

Interrupt_initModule();

//
// Initialize the PIE vector table with pointers to the shell Interrupt
// Service Routines (ISR).
//
Interrupt_initVectorTable();

// Disable CPU __interrupts and clear all CPU __interrupt flags:
//
IER = 0x0000;
IFR = 0x0000;

SPI_GPIO_Init();
spi_fifo_init();
spi_init();

while(1)
{
spi_xmit(sdata);
DEVICE_DELAY_US(100000);
sdata++;
}

}

void spi_xmit(Uint16 a)
{
SpiaRegs.SPITXBUF = a;
}

void SPI_GPIO_Init()
{

EALLOW;
GPIO_setPinConfig(GPIO_58_SPISIMOA);
GPIO_setPinConfig(GPIO_59_SPISOMIA);
GPIO_setPinConfig(GPIO_60_SPICLKA);
GPIO_setPinConfig(GPIO_61_SPISTEA);
EDIS;

}

void spi_init()
{

SpiaRegs.SPICCR.bit.SPISWRESET = 0; // Reset on
SpiaRegs.SPICCR.bit.SPICHAR = 15; // 16-bit char bits
SpiaRegs.SPICCR.bit.CLKPOLARITY = 0; // rising edge
SpiaRegs.SPICCR.bit.SPILBK = 0; // Loopback disabled

SpiaRegs.SPIBRR.all =0x0063; // baud rate setting for master

SpiaRegs.SPICTL.bit.TALK = 1; // enable talk
SpiaRegs.SPICTL.bit.SPIINTENA = 0; // SPI int disabled
SpiaRegs.SPICTL.bit.MASTER_SLAVE = 1; // Master mode
SpiaRegs.SPICTL.bit.CLK_PHASE = 1; // delay half cycle

SpiaRegs.SPICCR.bit.SPISWRESET = 1; // Relinquish SPI from Reset
SpiaRegs.SPIPRI.bit.FREE = 1; // Set so breakpoints don't disturb xmission
}

void spi_fifo_init()
{
// Initialize SPI TX FIFO registers for now
SpiaRegs.SPIFFTX.bit.TXFIFO = 1; // Enable Tx fifo
SpiaRegs.SPIFFTX.bit.SPIFFENA = 1; // Enable SPI fifo
SpiaRegs.SPIFFTX.bit.TXFIFO = 1; // Enable Tx fifo
SpiaRegs.SPIFFTX.bit.TXFFIL = 0; // Tx fifo level is zero
SpiaRegs.SPIFFTX.bit.TXFFIENA = 0; // Disable tx fifo interrupt
SpiaRegs.SPIFFTX.bit.TXFFINTCLR = 1; // clear tx interrupt flag
SpiaRegs.SPIFFTX.bit.SPIRST = 1; // release SPI fifo TX
SpiaRegs.SPIFFCT.all=0x0; // TX delay = 0
}

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////// slave code ///////////////////////////////////////////


#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include "F28x_Project.h"
#include "F2837xD_device.h"
#include "F2837xD_Examples.h"

#include "device.h"
#include "driverlib.h"

void SPI_GPIO_Init();
void spi_init();
void spi_fifo_init();
void spi_xmit(Uint16 a);

Uint16 sdata; // send data
Uint16 rdata; // received data

void main(void)
{


Device_init();
Device_initGPIO();
DINT;

Interrupt_initModule();

//
// Initialize the PIE vector table with pointers to the shell Interrupt
// Service Routines (ISR).
//
Interrupt_initVectorTable();

// Disable CPU __interrupts and clear all CPU __interrupt flags:
//
IER = 0x0000;
IFR = 0x0000;

SPI_GPIO_Init();
spi_fifo_init();
spi_init();

//

while(1)

{
while(SpiaRegs.SPIFFRX.bit.RXFFST !=1) { }

//
// Check against sent data
//
rdata = SpiaRegs.SPIRXBUF;

rdata++;

}

}

void SPI_GPIO_Init()
{

EALLOW;
GPIO_setPinConfig(GPIO_58_SPISIMOA);
GPIO_setPinConfig(GPIO_59_SPISOMIA);
GPIO_setPinConfig(GPIO_60_SPICLKA);
GPIO_setPinConfig(GPIO_61_SPISTEA);
EDIS;

}

void spi_init()
{

SpiaRegs.SPICCR.bit.SPISWRESET = 0; // Reset on
SpiaRegs.SPICCR.bit.SPICHAR = 15; // 16-bit char bits
SpiaRegs.SPICCR.bit.CLKPOLARITY = 0; // rising edge
SpiaRegs.SPICCR.bit.SPILBK = 0; // Loopback disabled

SpiaRegs.SPIBRR.all =0x0063; // baud rate setting for master

SpiaRegs.SPICTL.bit.TALK = 1; // enable talk
SpiaRegs.SPICTL.bit.SPIINTENA = 0; // SPI int disabled
SpiaRegs.SPICTL.bit.MASTER_SLAVE = 0; // Slave mode
SpiaRegs.SPICTL.bit.CLK_PHASE = 1; // delay half cycle

SpiaRegs.SPICCR.bit.SPISWRESET = 1; // Relinquish SPI from Reset
SpiaRegs.SPIPRI.bit.FREE = 1; // Set so breakpoints don't disturb xmission
}


void spi_fifo_init()
{

// Initialize SPI TX FIFO registers for now
EALLOW;
SpiaRegs.SPICCR.bit.SPISWRESET=0; // Reset SPI
SpiaRegs.SPICCR.all=0x00F; //16-bit character, disable Loopback
SpiaRegs.SPICTL.all=0x0013;
// SpiaRegs.SPICTL.bit.CLK_PHASE=1;
SpiaRegs.SPISTS.all=0x0000;

SpiaRegs.SPIFFTX.all=0xC008; //Enable FIFO's, set TX FIFO level to 8,disable tX FIFO
SpiaRegs.SPIFFRX.all=0x0028; //Set RX FIFO level to 8

SpiaRegs.SPIFFCT.all=0x00;
SpiaRegs.SPIPRI.all=0x0010;
// SpiaRegs.SPICCR.all=0x01F;
SpiaRegs.SPICCR.bit.SPISWRESET=1; // Enable SPI
SpiaRegs.SPIFFTX.bit.TXFIFO=1;
SpiaRegs.SPIFFRX.bit.RXFIFORESET=1;
EDIS;

}

void spi_xmit(Uint16 a)
{
SpiaRegs.SPITXBUF = a;
}

/////////////////////////////////   output of the master