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.

MSP432P401R (launchpad): SPI transfer not happening properly

Part Number: SIMPLELINK-MSP432-SDK

Hi, I am trying to figure out why my SPI timing diagram looks like below:

As you can see, the clocks don't look proper and there are not even enough of them.

Here is my SPI config code for EUSCI_B0:

static const eUSCI_SPI_MasterConfig SD_SPI_Config =
{
     EUSCI_B_SPI_CLOCKSOURCE_SMCLK,
     3000000,   //Source clk (SMCLK) speed
     200000,    //Desired SPI clk spd
     EUSCI_SPI_MSB_FIRST,
     EUSCI_SPI_PHASE_DATA_CAPTURED_ONFIRST_CHANGED_ON_NEXT,
     EUSCI_SPI_CLOCKPOLARITY_INACTIVITY_LOW,                
     EUSCI_SPI_3PIN
};

static void power_on (void)
{

    UCB0CTLW0 |= BIT0; //UCSWRST = 1    //SPI_disableModule()?


	/* Configure MOSI/MISO/SCLK/CS pins */
	/*
	 * eUSCI B0:
	 *
	 * OUT - MOSI: P1.6
	 * IN  - MISO: P1.7
	 * OUT - SCLK: P1.5
	 * OUT - CS  : P4.6
	 * IN  - CD  : P4.7
	 */

    P4->OUT |= BIT6;            //Set CS default value to high

    P4->DIR |= BIT6;            //Set CS as output
    //P4->DIR &= ~BIT7;           //Set CD (card detect) as input

    P1SEL1 &= (~BIT7 & ~BIT6 & ~BIT5);
    P1SEL0 |= BIT7 | BIT6 | BIT5;       //Set SPI pins to use primary function instead of GPIO

    //debug: add pullup resistor to MISO
    //P1->OUT |= BIT7;
    //P1->REN |= BIT7;


    SPI_initMaster(EUSCI_B0_BASE, &SD_SPI_Config);  //Set eUSCI B0 SPI registers

    UCB0CTLW0 &= ~BIT0; //UCSWRST = 0   //SPI_enableModule()?
}

And here is my SPI transfer function:

/* Exchange a byte */

static
BYTE xchg_spi (		/* Returns received data */
	BYTE dat		/* Data to be sent */
)
{
	SPI_transmitData(EUSCI_B0_BASE, dat);
	while(!EUSCI_B_SPI_getInterruptStatus(EUSCI_B0_BASE, EUSCI_B_SPI_RECEIVE_INTERRUPT));
	//while(EUSCI_B_SPI_isBusy(EUSCI_B0_BASE));

	return EUSCI_B_SPI_receiveData(EUSCI_B0_BASE);

}

And lastly, here is my driver code:

power_on();

while(1){
    CS_LOW();   //Chip select goes low
    xchg_spi(0xAA);
    CS_HIGH();  //Chip select goes high
}

Also for background, while I don't think this should matter, I am trying to initialize/communicate with a MMC card in SPI mode. I am trying first to ensure that I am using SPI correctly.

Any ideas for what could be going wrong?