32
Serial Peripheral Interface (SPI) Last updated 6/17/19

Serial Peripheral Interface (SPI) - faculty-web.msoe.edu · EE 2920 4 © tj SPI •Overview • 8 bit synchronous shift register used to communicate externally • Most often used

  • Upload
    builiem

  • View
    223

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Serial Peripheral Interface (SPI) - faculty-web.msoe.edu · EE 2920 4 © tj SPI •Overview • 8 bit synchronous shift register used to communicate externally • Most often used

Serial Peripheral Interface (SPI)

Last updated 6/17/19

Page 2: Serial Peripheral Interface (SPI) - faculty-web.msoe.edu · EE 2920 4 © tj SPI •Overview • 8 bit synchronous shift register used to communicate externally • Most often used

2 © tjEE 2920

SPI

• MSP432 SPI

eUSCI = enhanced Universal Serial Communications Interface

Page 3: Serial Peripheral Interface (SPI) - faculty-web.msoe.edu · EE 2920 4 © tj SPI •Overview • 8 bit synchronous shift register used to communicate externally • Most often used

3 © tjEE 2920

SPI

• MSP432 SPI

• ARM (AMBA Compliant)

• 7/8 bit transmission

• Master/Slave

• LSB/MSB first

• Separate RX/TX registers

• 4 A modules and 4 B modules

Page 4: Serial Peripheral Interface (SPI) - faculty-web.msoe.edu · EE 2920 4 © tj SPI •Overview • 8 bit synchronous shift register used to communicate externally • Most often used

4 © tjEE 2920

SPI

• Overview

• 8 bit synchronous shift register used to communicate externally

• Most often used to communicate with peripherals• displays, sensors, converters

• Can be used for inter-processor communication

• Two modes of operation• Master – responsible for providing the clock

• Slave – receives clock from the master

Page 5: Serial Peripheral Interface (SPI) - faculty-web.msoe.edu · EE 2920 4 © tj SPI •Overview • 8 bit synchronous shift register used to communicate externally • Most often used

5 © tjEE 2920

SPI

• Overview

Master Slave

SPI CLOCK GENERATOR

LATCH

SHIFTREGISTER

MISO

MOSI

SCK

SSSPI CLOCK GENERATOR

LATCH

SHIFTREGISTER

MISO

MOSI

SCK

SS

MISO – Master:IN or Slave:OUT

MOSI – Master:OUT or Slave:IN

SCK – SPI CLK

SS – Slave Select Bar

Page 6: Serial Peripheral Interface (SPI) - faculty-web.msoe.edu · EE 2920 4 © tj SPI •Overview • 8 bit synchronous shift register used to communicate externally • Most often used

6 © tjEE 2920

SPI

• Operation

Master Slave

SPI CLOCK GENERATOR

LATCH

SHIFTREGISTER

MISO

MOSI

SCK

SS

X

SPI CLOCK GENERATOR

LATCH

SHIFTREGISTER

MISO

MOSI

SCK

SS

0

Latch → Shift Register in both master and slaveMaster generates 8 clocks → shifts both registers (swaps content)Shift Register → Latch in both master and slave

Page 7: Serial Peripheral Interface (SPI) - faculty-web.msoe.edu · EE 2920 4 © tj SPI •Overview • 8 bit synchronous shift register used to communicate externally • Most often used

7 © tjEE 2920

SPI

• Operation

• Configure 1 device as master

• Configure 1 or more devices as

slaves

• Load values into register(s)

• Pull SSbar low on the desired slave device

• Initiate transfer by writing to the data register• The master will generate the appropriate clocks

• If interrupts are enabled – an interrupt will be generated on completion

Page 8: Serial Peripheral Interface (SPI) - faculty-web.msoe.edu · EE 2920 4 © tj SPI •Overview • 8 bit synchronous shift register used to communicate externally • Most often used

8 © tjEE 2920

SPI

• Operation

• 2 options for clock polarity• CPOL = 0 → rising edge triggered

• CPOL = 1 → falling edge triggered

• 2 options for clock phase• CPHA = 0 → leading edge triggered

• CPHA = 1 → trailing edge triggered

• 2 options on transfer direction• DORD = 0 →MSB transferred first

• DORD = 1 → LSB transferred firstM

sb

SHIFTREGISTER

Lsb

MISO

MOSI

DORD=1

DORD=0

DORD=0

DORD=1

DORD = 1

DORD = 0

Page 9: Serial Peripheral Interface (SPI) - faculty-web.msoe.edu · EE 2920 4 © tj SPI •Overview • 8 bit synchronous shift register used to communicate externally • Most often used

9 © tjEE 2920

SPI

• Operation

• CPHA = 0

Values active on pins

as soon as SSbar

goes low

Captured in register

on leading clock edge

New values placed on

pins on trailing clock edge

Page 10: Serial Peripheral Interface (SPI) - faculty-web.msoe.edu · EE 2920 4 © tj SPI •Overview • 8 bit synchronous shift register used to communicate externally • Most often used

10 © tjEE 2920

SPI

• Operation

• CPHA = 1

Values active on pins

on first clock edge

Captured in register

on trailing clock edge

New values placed on

pins on leading clock edge

Page 11: Serial Peripheral Interface (SPI) - faculty-web.msoe.edu · EE 2920 4 © tj SPI •Overview • 8 bit synchronous shift register used to communicate externally • Most often used

11 © tjEE 2920

SPI

• Operation

• Multiple Slave Configuration

Page 12: Serial Peripheral Interface (SPI) - faculty-web.msoe.edu · EE 2920 4 © tj SPI •Overview • 8 bit synchronous shift register used to communicate externally • Most often used

12 © tjEE 2920

SPI

• Operation

• Multiple Slave – Extended Shift Configuration

Page 13: Serial Peripheral Interface (SPI) - faculty-web.msoe.edu · EE 2920 4 © tj SPI •Overview • 8 bit synchronous shift register used to communicate externally • Most often used

13 © tjEE 2920

SPI

• Implementation

• Separate RX/TX registers

• Separate RX/TX buffers

• State Machine

• Clock divider

• Control register

• Status register

Page 14: Serial Peripheral Interface (SPI) - faculty-web.msoe.edu · EE 2920 4 © tj SPI •Overview • 8 bit synchronous shift register used to communicate externally • Most often used

14 © tjEE 2920

SPI

• Master Mode• Receive/Transmit initiated by writing to TX buffer

• Data is moved to the TX shift register as soon as it is empty – UCTXIFG flag set – transfer is NOT complete

• Transfer is controlled by the state machine

• When complete RX data moved to the RX buffer –UCRXIFG flag is set – transfer is complete

Page 15: Serial Peripheral Interface (SPI) - faculty-web.msoe.edu · EE 2920 4 © tj SPI •Overview • 8 bit synchronous shift register used to communicate externally • Most often used

15 © tjEE 2920

SPI

• Slave Mode• External clock controls the transfer

• Data is moved to the TX shift register as soon as it is empty – UCTXIFG flag set – transfer is NOT complete

• When complete, RX data moved to the RX buffer –UCRXIFG flag is set

• UCOE flag is set if the RX buffer has not been read prior to a new completed transfer

Page 16: Serial Peripheral Interface (SPI) - faculty-web.msoe.edu · EE 2920 4 © tj SPI •Overview • 8 bit synchronous shift register used to communicate externally • Most often used

16 © tjEE 2920

SPI

• MSP432 SPI Registers

Page 17: Serial Peripheral Interface (SPI) - faculty-web.msoe.edu · EE 2920 4 © tj SPI •Overview • 8 bit synchronous shift register used to communicate externally • Most often used

17 © tjEE 2920

SPI

• MSP432 SPI Control Register 0 EUCSI_nx_SPI->CTLW0n = A or Bx = 0, 1, 2, 3

Page 18: Serial Peripheral Interface (SPI) - faculty-web.msoe.edu · EE 2920 4 © tj SPI •Overview • 8 bit synchronous shift register used to communicate externally • Most often used

18 © tjEE 2920

SPI

• MSP432 SPI Control Register 0

Page 19: Serial Peripheral Interface (SPI) - faculty-web.msoe.edu · EE 2920 4 © tj SPI •Overview • 8 bit synchronous shift register used to communicate externally • Most often used

19 © tjEE 2920

SPI

• MSP432 SPI Bit Rate Control Register

• SPI transfer bit rate: fBitClock = fBRCLK/UCBRx

• BRCLK: ACLK or SMCLK

EUCSI_nx_SPI->BRWn = A or Bx = 0, 1, 2, 3

Page 20: Serial Peripheral Interface (SPI) - faculty-web.msoe.edu · EE 2920 4 © tj SPI •Overview • 8 bit synchronous shift register used to communicate externally • Most often used

20 © tjEE 2920

SPI

• MSP432 SPI Status Register EUCSI_nx_SPI->STATWn = A or Bx = 0, 1, 2, 3

Page 21: Serial Peripheral Interface (SPI) - faculty-web.msoe.edu · EE 2920 4 © tj SPI •Overview • 8 bit synchronous shift register used to communicate externally • Most often used

21 © tjEE 2920

SPI

• MSP432 SPI Receive Buffer EUCSI_nx_SPI->RXBUFn = A or Bx = 0, 1, 2, 3

Page 22: Serial Peripheral Interface (SPI) - faculty-web.msoe.edu · EE 2920 4 © tj SPI •Overview • 8 bit synchronous shift register used to communicate externally • Most often used

22 © tjEE 2920

SPI

• MSP432 SPI Transmit Buffer EUCSI_nx_SPI->TXBUFn = A or Bx = 0, 1, 2, 3

Page 23: Serial Peripheral Interface (SPI) - faculty-web.msoe.edu · EE 2920 4 © tj SPI •Overview • 8 bit synchronous shift register used to communicate externally • Most often used

23 © tjEE 2920

SPI

• MSP432 SPI Interrupt Enable Register EUCSI_nx_SPI->IEn = A or Bx = 0, 1, 2, 3

Page 24: Serial Peripheral Interface (SPI) - faculty-web.msoe.edu · EE 2920 4 © tj SPI •Overview • 8 bit synchronous shift register used to communicate externally • Most often used

24 © tjEE 2920

SPI

• MSP432 SPI Interrupt Flag Register EUCSI_nx_SPI->IFGn = A or Bx = 0, 1, 2, 3

Page 25: Serial Peripheral Interface (SPI) - faculty-web.msoe.edu · EE 2920 4 © tj SPI •Overview • 8 bit synchronous shift register used to communicate externally • Most often used

25 © tjEE 2920

SPI

• MSP432 SPI Interrupt Vector RegisterEUCSI_nx_SPI->IV

n = A or Bx = 0, 1, 2, 3

Page 26: Serial Peripheral Interface (SPI) - faculty-web.msoe.edu · EE 2920 4 © tj SPI •Overview • 8 bit synchronous shift register used to communicate externally • Most often used

26 © tjEE 2920

SPI

• MSP432 SPI Registers

• Module B similar to module A

Page 27: Serial Peripheral Interface (SPI) - faculty-web.msoe.edu · EE 2920 4 © tj SPI •Overview • 8 bit synchronous shift register used to communicate externally • Most often used

27 © tjEE 2920

SPI

• MSP432 SPI Config

Page 28: Serial Peripheral Interface (SPI) - faculty-web.msoe.edu · EE 2920 4 © tj SPI •Overview • 8 bit synchronous shift register used to communicate externally • Most often used

28 © tjEE 2920

SPI

• MSP432 SPI Config

Page 29: Serial Peripheral Interface (SPI) - faculty-web.msoe.edu · EE 2920 4 © tj SPI •Overview • 8 bit synchronous shift register used to communicate externally • Most often used

29 © tjEE 2920

SPI

• MSP432 SPI• Loopback example

• Note – EUSCI_B3 pins are wired up to the onboard RGB LEDs /*

* spi_example.c** Created on: Aug 7, 2018* Author: johnsontimoj*/

////////////////////////////////////// use 2 spi interfaces to loopback//// input none//// output - printf of spi register values//// Transfer a count value back and forth/////////////////////////////////////

// includes#include <stdio.h>#include "msp432.h"#include "msoe_lib_all.h"

void pin_setup(void);void spi_master_setup(void);void spi_slave_setup(void);

Page 30: Serial Peripheral Interface (SPI) - faculty-web.msoe.edu · EE 2920 4 © tj SPI •Overview • 8 bit synchronous shift register used to communicate externally • Most often used

30 © tjEE 2920

SPI

• MSP432 SPI• Loopback example

int main(void){//// setup counteruint8_t count = 0;

// Configure pinspin_setup();

// Setup SPIsspi_master_setup();spi_slave_setup();

while(1){// Load slave with a value to returnEUSCI_B3_SPI->TXBUF = 0xFF - count;// Write to master buffer to initiate transferEUSCI_A1_SPI->TXBUF = count;// wait for transfer to completeDelay_3MHz_ms(10);// Print rcvd valuesprintf("Master sent %i - Slave sent %i\n", EUSCI_B3_SPI->RXBUF, EUSCI_A1_SPI->RXBUF);// Update count and waitcount ++;Delay_3MHz_ms(1000);

}return 0;

} // end main

Page 31: Serial Peripheral Interface (SPI) - faculty-web.msoe.edu · EE 2920 4 © tj SPI •Overview • 8 bit synchronous shift register used to communicate externally • Most often used

31 © tjEE 2920

SPI

• MSP432 SPI• Loopback example

void pin_setup(void){// Setup USCIA1 as master// Setup USCIB0 as slave// Transfer data from Master to slave in a while loop//// USCIA1 --> P2.0-STE, P2.1- CLK, P2.2-SOMI, P2.3-SIMO// USCIB3 --> P10.0-STE, P10.1-CLK, P10.3-SOMI, P10.2-SIMO//P2->SEL0 |= 0x0F; // Set to USC modeP2->SEL1 &= ~0x0F; // 0-1 modeP10->SEL0 |= 0x0F;P10->SEL1 &= ~0x0F;

// Nothing else needed - the module sets directionsreturn;

} // end pin_setup

Page 32: Serial Peripheral Interface (SPI) - faculty-web.msoe.edu · EE 2920 4 © tj SPI •Overview • 8 bit synchronous shift register used to communicate externally • Most often used

32 © tjEE 2920

SPI

• MSP432 SPI• Loopback example

void spi_master_setup(void){// USCIA1 - master// CPOL-0, CPHA-0, 8 bit, LSB first//// CTLW0// PH POL LSB 8b master 4/ssb sync Aclk ss rst// 0 0 0 0 1 10 1 01 xxxx 1 1// 0D42EUSCI_A1_SPI->CTLW0 = 0x0D43;//// BRW// 0000 0000 0100 0000// 0040EUSCI_A1_SPI->BRW = 0x0040;//// No interrupts for now//// Release resetEUSCI_A1_SPI->CTLW0 &= ~0x0001;

return;} // end spi_master_setup

void spi_slave_setup(void){// USCIB3 - master// CPOL-0, CPHA-0, 8 bit, LSB first//// CTLW0// PH POL LSB 8b slave 4/ssb sync Aclk ss no rst// 0 0 0 0 0 10 1 01 xxxx 1 0// 0542EUSCI_B3_SPI->CTLW0 = 0x0542;//// No interrupts for now

return;} // end spi_slave_setup