This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

How to Configure SSP0 for 13 bit clock

Hi...

I have interfaced LPC2366 with vinculum VDrive Module - VDrive2 on SPI (SSP0)

after referring the datasheet of vinculum(DS_VNC1L_V201.pdf) for SPI communication they have mentioned

" The SPI interface differs from most other implementations in that it uses a 13
clock sequence to transfer a single byte of data. "

Hence in my code I have made the configuration for the same, but instead of getting proper Data I am getting garbage values.

The configurations done in my code are :-


// Init..... SSP

void InitSSPUSB(void)
 {
        INT8U ucDummy;
        INT8U ucCntr;

        // Configure pins for SSP interface
        PINSEL3 |= 0x0003C300;
        // Power ON SPI control
        PCONP |= PCSSP0;
        // Set DSS data to 8-bit, Frame format SPI, CPOL = 0, CPHA = 0, and SCR is 15
//      SSP0CR0 = 0x0007;
        SSP0CR0 = 0x0707;

        // SSPCPSR clock prescale register, master mode, minimum divisor is 0x02
        SSP0CPSR = 0x02;
//      SSP0CPSR = 0xFE; // for LOW Speed max ... 400kHz
        // Loop till FIFO size
        for( ucCntr = 0; ucCntr < FIFOSIZE; ucCntr++ )
        {
          // Flush RX FIFO
          ucDummy = SSP0DR;
        }
        ucDummy = ucDummy;
        // Configure SSEL pin output direction
        IODIR1 |= SSEL;
        // Pull the pin high
        IOPIN1 |= SSEL;
        // Enable SSE
        SSP0CR1 = 0x02;
 }

// Receive data over SPI
void TestSPIReceiveUSB( INT8U *SPIRxData, INT16U uiLenght )
{
        INT16U uiCntr;

        for( uiCntr = 0; uiCntr < uiLenght; uiCntr++ )
        {
          // This is important if not then NO resposne
          SSP0DR = 0xFF;
          // Wait until Receive FIFO is empty
          while ( !( SSP0SR & SSPSR_RNE ) );
          // Read SSP port data
          *SPIRxData = SSP0DR;
          // Increment address of the poiter to point to next byte
          SPIRxData++;
        }
}

void main()
 {
    // call SPI receive handler function
    TestSPIReceiveUSB((INT8U *)&SPIRxData[0], 8);
    // Call a function to display the received data on UART
 }

Does I am making a mistake in setting 13 clock
sequence ( SSP0CR0 = 0x0707) to transfer a single byte of data ?