#include "driverlib.h" #include "device.h" // Globals // volatile uint16_t sData[2]; // Send data buffer volatile uint16_t rData[2]; // Receive data buffer volatile uint16_t rDataPoint = 0; // To keep track of where we are in the // data stream to check received data // Function Prototypes void initSPIBMaster(void); void initSPIASlave(void); void configGPIOs(void); __interrupt void spibTxFIFOISR(void); __interrupt void spiaRxFIFOISR(void); void main(void) { uint16_t i; Device_init(); Device_initGPIO(); Interrupt_initModule(); Interrupt_initVectorTable(); Interrupt_register(INT_SPIB_TX, &spibTxFIFOISR); Interrupt_register(INT_SPIA_RX, &spiaRxFIFOISR); configGPIOs(); initSPIBMaster(); initSPIASlave(); for(i = 0; i < 2; i++) { sData[i] = i; rData[i]= 0; } Interrupt_enable(INT_SPIA_RX); Interrupt_enable(INT_SPIB_TX); EINT; ERTM; } // Function to configure SPI B as master with FIFO enabled. void initSPIBMaster(void) { SPI_disableModule(SPIB_BASE); // Must put SPI into reset before configuring it // SPI configuration. Use a 500kHz SPICLK and 16-bit word size. SPI_setConfig(SPIB_BASE, DEVICE_LSPCLK_FREQ, SPI_PROT_POL0PHA0, SPI_MODE_MASTER, 500000, 16); SPI_disableLoopback(SPIB_BASE); SPI_setEmulationMode(SPIB_BASE, SPI_EMULATION_FREE_RUN); SPI_enableFIFO(SPIB_BASE); // FIFO and interrupt configuration SPI_clearInterruptStatus(SPIB_BASE, SPI_INT_TXFF); SPI_setFIFOInterruptLevel(SPIB_BASE, SPI_FIFO_TX2, SPI_FIFO_RX2); SPI_enableInterrupt(SPIB_BASE, SPI_INT_TXFF); SPI_enableModule(SPIB_BASE); // Configuration complete. Enable the module. } // Function to configure SPI A as slave with FIFO enabled. void initSPIASlave(void) { // Must put SPI into reset before configuring it // SPI_disableModule(SPIA_BASE); SPI_reset(SPIA_BASE); // SPI configuration. Use a 500kHz SPICLK and 16-bit word size. SPI_setConfig(SPIA_BASE, DEVICE_LSPCLK_FREQ, SPI_PROT_POL0PHA0,SPI_MODE_SLAVE, 500000, 16); SPI_disableLoopback(SPIA_BASE); SPI_setEmulationMode(SPIA_BASE, SPI_EMULATION_FREE_RUN); // FIFO and interrupt configuration SPI_enableFIFO(SPIA_BASE); SPI_clearInterruptStatus(SPIA_BASE, SPI_INT_RXFF); SPI_setFIFOInterruptLevel(SPIA_BASE, SPI_FIFO_TX2, SPI_FIFO_RX2); SPI_enableInterrupt(SPIA_BASE, SPI_INT_RXFF); SPI_resetRxFIFO(SPIA_BASE); SPI_resetTxFIFO(SPIA_BASE); // Configuration complete. Enable the module. SPI_enableModule(SPIA_BASE); } // Configure GPIOs for external loopback. void configGPIOs(void) { GPIO_setPinConfig(GPIO_59_SPISOMIA); GPIO_setPinConfig(GPIO_58_SPISIMOA); GPIO_setPinConfig(GPIO_61_SPISTEA); GPIO_setPinConfig(GPIO_60_SPICLKA); GPIO_setPinConfig(GPIO_66_SPISTEB); GPIO_setPinConfig(GPIO_63_SPISIMOB); GPIO_setPinConfig(GPIO_64_SPISOMIB); GPIO_setPinConfig(GPIO_65_SPICLKB); } // SPI A Transmit FIFO ISR // __interrupt void spibTxFIFOISR(void) { uint16_t i; // Send data // for(i = 0; i < 2; i++) { SPI_writeDataNonBlocking(SPIB_BASE, sData[i]); } // Increment data for next cycle // for(i = 0; i < 2; i++) { sData[i] = sData[i] + 1; } // Clear interrupt flag and issue ACK SPI_clearInterruptStatus(SPIB_BASE, SPI_INT_TXFF); Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP6); } // SPI B Receive FIFO ISR // __interrupt void spiaRxFIFOISR(void) { uint16_t i; // // Read data // for(i = 0; i < 2; i++) { rData[i] = SPI_readDataNonBlocking(SPIA_BASE); } // // Check received data // for(i = 0; i < 2; i++) { if(rData[i] != (rDataPoint + i)) { // Something went wrong. rData doesn't contain expected data. Example_Fail = 1; // ESTOP0; } } rDataPoint++; // Clear interrupt flag and issue ACK SPI_clearInterruptStatus(SPIA_BASE, SPI_INT_RXFF); Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP6); Example_PassCount++; }this is similar kind of example as ex3 SPI external lookback mode given, but I have changed the SPI A and B pin as per my launchpad f28379d but in debug section proprer data is not received by slave (only -1 and 0 I can see in rData array).
Please look into the code and let me know what i am missing.
Thanks & Regards,
Jay