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.

TMS320C28346: /SPISTE Signal Stays Low & SPI Clk Never Stops

Part Number: TMS320C28346

I programmed a C28346 Delfino microcontroller with a Simulink model someone else developed. I have the SPID port configured as a master and setup to send 16-bit data. I am getting SPI data out and the SPI Clock output is always running. The SPI Slave Select line stays low as well. This signal should return high and the SPI Clock output should stop after 16-bits have been transferred.

The Simulink model has the following code to initialize the SPI port.

 

//init_SPID_GPIO

GpioCtrlRegs.GPBPUD.bit.GPIO48 = 0; // Enable pull-up on GPIO48 (SPISIMOD)

GpioCtrlRegs.GPBMUX2.bit.GPIO48 = 3; // Configure GPIO48 as SPISIMOD

GpioCtrlRegs.GPBPUD.bit.GPIO49 = 0; // Enable pull-up on GPIO49 (SPISOMID)

GpioCtrlRegs.GPBMUX2.bit.GPIO49 = 3; // Configure GPIO49 as SPISOMID

GpioCtrlRegs.GPBPUD.bit.GPIO50 = 0; // Enable pull-up on GPIO50 (SPICLKD)

GpioCtrlRegs.GPBMUX2.bit.GPIO50 = 3; // Configure GPIO50 as SPICLKD

GpioCtrlRegs.GPBPUD.bit.GPIO51 = 0; // Enable pull-up on GPIO51 (SPISTED)

GpioCtrlRegs.GPBMUX2.bit.GPIO51 = 3; // Configure GPIO51 as SPISTED

// init spi D (current to super)

SpidRegs.SPICCR.bit.SPISWRESET = 0;

SpidRegs.SPICCR.bit.SPICHAR = 16-1; //16 databits; formula=DataBits-1; // Character length control

SpidRegs.SPICCR.bit.SPILBK = 0; //disable loopback

SpidRegs.SPICCR.bit.CLKPOLARITY = 0;// 1:Data is output on falling edge and input on rising edge; 0:Data is output on rising edge and input on falling edge.

SpidRegs.SPICTL.bit.TALK = 1; // Master/Slave transmit enable, 1=enabled, 0=disabled

SpidRegs.SPICTL.bit.MASTER_SLAVE = 1; // 0=slave, 1=master

SpidRegs.SPICTL.bit.CLK_PHASE = 0;// Clock phase ; 0: Data is output on the rising/falling edge (no delay); 1: Data is output one half-cycle before the first rising/falling edge

SpidRegs.SPIPRI.bit.FREE = 1; //Free run enabled, continue SPI operation regardless of suspend

SpidRegs.SPIBRR = 127; // Baud rate factor (for master only)

SpidRegs.SPIFFTX.bit.SPIFFENA = 1; // enable FIFO (both tx and rx)

SpidRegs.SPIFFRX.bit.RXFFIENA = 1; // enable rx fifo interrupts

SpidRegs.SPIFFTX.bit.TXFFIENA = 1; // enable tx fifo interrupts

SpidRegs.SPIFFRX.bit.RXFFIL = 14;//1; // Rx FIFO Interrupt Level

SpidRegs.SPIFFTX.bit.TXFFIL = 2; // Tx FIFO Interrupt Level

SpidRegs.SPIFFCT.all = 0;// no FIFO transmit delay

SpidRegs.SPICCR.bit.SPISWRESET = 1; // Enable SPI

  • Tim,

    Without looking at your transmit code, it looks like you are probably just keeping data in the TXFIFO. As long as there is data to transmit, SPISTE will stay low. If you want to force SPISTE to return high after each 16-bit word, you can disable the FIFO and send one word at a time until the SPI_INT bit is set, indicating that 16 bits have been transmitted.

    This is the expected behavior of the SPI.

    Regards,
    Mark
  • Tim,

    Did my reply answer your question? Do you have any followups?

    Thanks,
    Mark
  • Mark,

    Yes this answers my question.

    Thanks

    Tim