spimaster

Example Summary

Demonstrates how to use SPI driver in master mode to communicate with another SimpleLink device. To run this example successfully, another SimpleLink device running the spislave example is required.

Peripherals & Pin Assignments

When this project is built, the SysConfig tool will generate the TI-Driver configurations into the ti_drivers_config.c and ti_drivers_config.h files. Information on pins and resources used is present in both generated files. Additionally, the System Configuration file (*.syscfg) present in the project may be opened with SysConfig’s graphical user interface to determine pins and resources used.

BoosterPacks, Board Resources & Jumper Settings

This example requires 2 LaunchPads.

For board specific jumper settings, resources and BoosterPack modifications, refer to the Board.html file.

If you’re using an IDE such as Code Composer Studio (CCS) or IAR, please refer to Board.html in your project directory for resources used and board-specific jumper settings.

The Board.html can also be found in your SDK installation:

    <SDK_INSTALL_DIR>/source/ti/boards/<BOARD>

Before running the example the following pins must be connected between master & slave devices.

SPI Master LaunchPad SPI Slave LaunchPad
CONFIG_SPI_MASTER CLK CONFIG_SPI_SLAVE CLK
CONFIG_SPI_MASTER MOSI CONFIG_SPI_SLAVE MOSI
CONFIG_SPI_MASTER MISO CONFIG_SPI_SLAVE MISO
CONFIG_SPI_MASTER CS CONFIG_SPI_SLAVE CS
CONFIG_SPI_MASTER_READY CONFIG_SPI_MASTER_READY
CONFIG_SPI_SLAVE_READY CONFIG_SPI_SLAVE_READY

The SPI can be used in 4-pin or 3-pin modes (chip select is optional). When running this example SPI peripherals on both SimpleLink devices must align on chip select use. Users must verify before running the example.

Although not in the table above, a ground jumper must also be connected between both boards.

Example Usage

The connection will have the following settings:

    Baud-rate:     115200
    Data bits:          8
    Stop bits:          1
    Parity:          None
    Flow Control:    None

Messages should appear as follows:

    Starting the SPI master example
    This example requires external wires to be connected to the header pins. Please see the Board.html for details.

    Master SPI initialized

    Master received: Hello from slave, msg#: 0
    Master received: Hello from slave, msg#: 1
    Master received: Hello from slave, msg#: 2
    Master received: Hello from slave, msg#: 3
    Master received: Hello from slave, msg#: 4
    Master received: Hello from slave, msg#: 5
    Master received: Hello from slave, msg#: 6
    Master received: Hello from slave, msg#: 7
    Master received: Hello from slave, msg#: 8
    Master received: Hello from slave, msg#: 9

    Done

Application Design Details

This application uses a single thread:

masterThread - creates the master SPI message, opens CONFIG_SPI_MASTER and waits for the slave to be ready for a SPI transfer. When the slave is ready it starts the transfer. Once complete, the master prepares the next transaction & waits for the slave once more. A total of MAX_LOOP SPI transactions are performed in this manner.

The masterThread performs the following actions:

  1. Before performing transfers, we must make sure both, spimaster & spislave applications are synchronized with each other. The master will set CONFIG_SPI_MASTER_READY to 1 to notify the slave it is ready to synchronize. The master will then wait for the slave to pull CONFIG_SPI_SLAVE_READY high in acknowledgment.

  2. Opens CONFIG_SPI_MASTER & sets CONFIG_SPI_MASTER_READY to 0. Setting CONFIG_SPI_MASTER_READY will notify the slave CONFIG_SPI_MASTER has been opened.

  3. Waits for the slave to be ready for the SPI transfer. The slave will pull CONFIG_SPI_SLAVE_READY low when ready for a transfer.

  4. Creates a SPI transaction structure and sets txBuffer to Hello from master, msg# n, where n is the iteration number.

  5. Toggles CONFIG_GPIO_LED_1.

  6. Transfers the message. If the transfer is successful, the message received from the slave SPI is printed. Otherwise, an error message is printed.

  7. Sleeps for 3 seconds.

  8. Repeats from step 3 for MAX_LOOP iterations.

  9. Closes the SPI driver object and terminates execution.

TI-RTOS:

FreeRTOS: