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);
}