I am getting the above result as an output of the data out pin, the manual says that the clk out will stop when the data output is over. But in my case it is continuous.
the code is as below:
#include "DSP28x_project.h"
#include "dsp2834x_cputimers.h"
#include "dsp2834x_gpio.h"
#include "DSP2834x_spi.h"
void delay_loop(void);
void spi_xmit(Uint16 a);
void spi_fifo_init(void);
void spi_init(void);
void error(void);
void main(void)
{
int16 sdata1,sdata2; // send data
int16 rdata;// received data
InitSysCtrl();
InitSpiaGpio();
DINT;
SysCtrlRegs.PCLKCR0.bit.SPIAENCLK = 1;
//GpioCtrlRegs.GPAMUX2.all =0xFFFF;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
EALLOW;
spi_fifo_init(); // Initialize the Spi FIFO
spi_init(); // init SPI
sdata1 = 0x8017;
sdata2 = 0xF001;
SpiaRegs.SPIBRR=50;
for(;;)
{
// Transmit data
SpiaRegs.SPICTL.bit.TALK=1;
spi_xmit(sdata1);
delay_loop();
while(SpiaRegs.SPIFFRX.bit.RXFFST !=1) { }
// Check against sent data
rdata = SpiaRegs.SPIRXBUF;
if(rdata != sdata1) error();
sdata1++;
spi_xmit(sdata2);
// Wait until data is received
while(SpiaRegs.SPIFFRX.bit.RXFFST !=1) { }
// Check against sent data
rdata = SpiaRegs.SPIRXBUF;
if(rdata != sdata2) error();
sdata2++;
}
}
void delay_loop()
{
long i;
for (i = 0; i < 1000000; i++) {}
}
void error(void)
{
asm(" ESTOP0"); // Test failed!! Stop!
for (;;);
}
void spi_init()
{
SpiaRegs.SPICCR.all =0x000F; // Reset on, rising edge, 16-bit char bits
SpiaRegs.SPICTL.all =0x0006; // Enable master mode, normal phase,
// enable talk, and SPI int disabled.
SpiaRegs.SPIBRR =0x007F;
SpiaRegs.SPICCR.all =0x009F; // Relinquish SPI from Reset
SpiaRegs.SPIPRI.bit.FREE = 1; // Set so breakpoints don't disturb xmission
}
void spi_xmit(Uint16 a)
{
SpiaRegs.SPITXBUF=a;
}
void spi_fifo_init()
{
// Initialize SPI FIFO registers
SpiaRegs.SPIFFTX.all=0xE040;
SpiaRegs.SPIFFRX.all=0x204f;
SpiaRegs.SPIFFCT.all=0x0;
}