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.

evm5515 - spi interface - write function

Other Parts Discussed in Thread: CC2500

Hi folks,

 

I rewrite the CSL SPI_write() function to send the required address before transmitting the data , in my case the address is 0x3F (TXFIFO),

I'm running the function with debuger and I don't see the data written into address 0x3F

can someone advice ...

Thanks

Talmor

CSL_Status SPI_write (SPI_HwMode cs,Uint16 addr,Uint16 *writeBuffer,Uint16 bufLen)
{
Uint16 getWLen;
volatile
Uint16 bufIndex;
Uint16 spiStatusReg;
volatile
Uint16 spiBusyStatus;
volatile
Uint16 spiWcStaus;
volatile
Uint16 delay;

bufIndex =
0;
if
((NULL == writeBuffer) || (0 == bufLen))
{
return
(CSL_ESYS_INVPARAMS);
}

CSL_FINS(CSL_SPI_REGS->
SPICMD1,SPI_SPICMD1_FLEN, bufLen/*+1-1*/);

CSL_FINS(CSL_SPI_REGS->
SPICMD2, SPI_SPICMD2_CLEN, SPI_WORD_LENGTH_8);

/* Read the word length form the register */
getWLen =
CSL_FEXT(CSL_SPI_REGS->SPICMD2, SPI_SPICMD2_CLEN) + 1;

if
(getWLen >= SPI_MAX_WORD_LEN)
{
return
(CSL_ESYS_INVPARAMS);
}
//set address
CSL_SPI_REGS->
SPIDR2 = (Uint16)(addr <<0x08);
CSL_SPI_REGS->
SPIDR1 = 0x0000;


CSL_FINS(CSL_SPI_REGS->
SPICMD2, SPI_SPICMD2_CSNUM, cs);
CSL_FINS(CSL_SPI_REGS->
SPICMD2, SPI_SPICMD2_CMD,CSL_SPI_SPICMD2_CMD_WRITE);

do

{
spiStatusReg =
CSL_SPI_REGS->SPISTAT1;
spiBusyStatus =
(spiStatusReg & CSL_SPI_SPISTAT1_BSY_MASK);
spiWcStaus =
(spiStatusReg & CSL_SPI_SPISTAT1_CC_MASK);
}while
((spiBusyStatus == CSL_SPI_SPISTAT1_BSY_BUSY) &&(spiWcStaus != CSL_SPI_SPISTAT1_CC_MASK));


/* Write Word length set by the user */
while
(bufIndex < bufLen)
{
/* Write to registers more then 16 bit word length */
if
(getWLen == 16)
{
CSL_SPI_REGS->
SPIDR2 = writeBuffer[bufIndex];
CSL_SPI_REGS->
SPIDR1 = 0x0000;
bufIndex ++
;
}
/* Write to register less then or equal to 16 bit word length */
else
if(getWLen == 8)
{
CSL_SPI_REGS->
SPIDR2 = (Uint16)(writeBuffer[bufIndex] << 0x08);
CSL_SPI_REGS->
SPIDR1 = 0x0000;
bufIndex++
;
}

CSL_FINS(CSL_SPI_REGS->
SPICMD2, SPI_SPICMD2_CSNUM, cs);
/* Set command for Writting to registers */
CSL_FINS(CSL_SPI_REGS->
SPICMD2, SPI_SPICMD2_CMD, SPI_WRITE_CMD);

for
(delay = 0; delay < 100; delay++);

do

{
spiStatusReg =
CSL_SPI_REGS->SPISTAT1;
spiBusyStatus =
(spiStatusReg & CSL_SPI_SPISTAT1_BSY_MASK);
spiWcStaus =
(spiStatusReg & CSL_SPI_SPISTAT1_CC_MASK);
}while
((spiBusyStatus == CSL_SPI_SPISTAT1_BSY_BUSY) &&
(spiWcStaus != CSL_SPI_SPISTAT1_CC_MASK));
}
return
(CSL_SOK);
}