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.

TMS320F28062: TMS320F28062

Part Number: TMS320F28062

Dear sir

      In my own design of TMS320F28062, i want communicate with TMC429-LI via SPI-B Channel (8bit), but some problem. When i transmit data will stored TX BUFF but SPIDAT Register garbage value.then after receive value in RX BUFF garbage.   SPI parameter and function Given below.

void InitSpibGpio(void)
{
EALLOW;

GpioCtrlRegs.GPAPUD.bit.GPIO12 = 0; // Enable pull-up on GPIO12 (SPISIMOB)
GpioCtrlRegs.GPAPUD.bit.GPIO13 = 0; // Enable pull-up on GPIO13 (SPISOMIB)
GpioCtrlRegs.GPAPUD.bit.GPIO14 = 0; // Enable pull-up on GPIO14 (SPICLKB)
GpioCtrlRegs.GPAPUD.bit.GPIO15 = 0; // Enable pull-up on GPIO15 (SPISTEB)

GpioCtrlRegs.GPAQSEL1.bit.GPIO12 = 3; // Asynch input GPIO12 (SPISIMOB)
GpioCtrlRegs.GPAQSEL1.bit.GPIO13 = 3; // Asynch input GPIO13 (SPISOMIB)
GpioCtrlRegs.GPAQSEL1.bit.GPIO14 = 3; // Asynch input GPIO14 (SPICLKB)
GpioCtrlRegs.GPAQSEL1.bit.GPIO15 = 3; // Asynch input GPIO15 (SPISTEB)

GpioCtrlRegs.GPAMUX1.bit.GPIO12 = 3; // Configure GPIO12 as SPISIMOB
GpioCtrlRegs.GPAMUX1.bit.GPIO13 = 3; // Configure GPIO13 as SPISOMIB
GpioCtrlRegs.GPAMUX1.bit.GPIO14 = 3; // Configure GPIO14 as SPICLKB
GpioCtrlRegs.GPAMUX1.bit.GPIO15 = 3; // Configure GPIO15 as SPISTEB

EDIS;
}

void spi_initB(void)
{
SpibRegs.SPICCR.all =0x0007; 
SpibRegs.SPICTL.all =0x0006; 

SpibRegs.SPIBRR =0x007F;       // SPI Baud Rate = LSPCLK/(SPIBRR+1) =32/16 =2MHz
SpibRegs.SPICCR.all =0x00C7; 

SpibRegs.SPIPRI.bit.FREE = 1;    // Set so breakpoints don't disturb xmission

}

void spi_fifo_initB()
{

SpibRegs.SPIFFTX.all=0xE040; 

SpibRegs.SPIFFRX.all=0x2044; 
SpibRegs.SPIFFCT.all=0x0000; 
}

void InitSPI429(void)
{
InitSpibGpio();

// Initialize the Spi FIFO
spi_fifo_initB();

// init SPI
spi_initB();

}

void Write428Short(Uint8 Address, int32 Value)
{
Uint8 Write[4], Read[4];

Write[0]=Address;
Write[1]=0;
Write[2]=Value >> 8;
Write[3]=Value & 0xff;

ReadWrite428(Read, Write);

}

int32 Read428Short(Uint8 Address)
{
Uint8 Read[4], Write[4];
int32 Result;

Write[0]=Address|TMC428_READ;    TMC428_READ is 1 
Write[1]=0;
Write[2]=0;
Write[3]=0;

ReadWrite428(Read, Write);

Result=(Read[2]<<8)|(Read[3]);
if(Read[2] & 0x08) Result|=0xf000;

return Result;
}

void ReadWrite428(Uint8 *Read, Uint8 *Write)
{

int i;

for(i=0;i<4;i++)
{
SpibRegs.SPITXBUF=((Uint16)Write[i]<<8);

while(SpibRegs.SPIFFRX.bit.RXFFST !=1) { } // Wait until data is received

Read[i]=(SpibRegs.SPIRXBUF & 0xFFFF); // get data in Rx Buffer

}
}

#include "DSP28x_Project.h" // Device Headerfile and Examples Include File
#include "F2806x_Device.h"
#include "TMC429_Register.h"
int32 Amax;

 void main(void)

{

InitSysCtrl();

DINT;

InitPieCtrl();

IER = 0x0000;
IFR = 0x0000;

InitPieVectTable();

TMC429_Enbl();     // TMC429 Clock enable 16MHz

InitSPI429();       // SPI B initialization

Write428Short(IDX_AMAX|MOTOR0, 2047);     // IDX_AMAX 12, MOTOR0 0, value

Amax=Read428Short(IDX_AMAX);         // Read value

}

Please any suggestion.

Divyesh.