Skip to content

Instantly share code, notes, and snippets.

@cmicali
Last active December 25, 2015 13:39
Show Gist options
  • Save cmicali/6984888 to your computer and use it in GitHub Desktop.
Save cmicali/6984888 to your computer and use it in GitHub Desktop.
PRU SPI Example
#define NOP MOV r0, r0, r0
#define SPI_TX r8.w0
#define SPI1_SCLK R30.t7
#define SPI1_MOSI R30.t14
#define SPI1_MISO R31.t15
#define SPI1_CS0 R30.t0
#define SPI1_CS1 R30.t1
#define SPI1_CS SPI1_CS0
#define LSPD_SPI_SCLK SPI1_SCLK
#define LSPD_SPI_MOSI SPI1_MOSI
#define LSPD_SPI_MISO SPI1_MISO
#define LSPD_SPI_CS0 SPI1_CS0
#define LSPD_SPI_CS1 SPI1_CS1
#define LSPD_SPI_CS LSPD_SPI_CS1
#define LSPD_CNVST R30.t3
.macro SPI_XFER_BIT
.mparam LS_RX, BIT
// Output LSPD control
QBBS MOSI_HIGH, SPI_TX, BIT
CLR LSPD_SPI_MOSI
JMP MOSI_DONE
MOSI_HIGH:
SET LSPD_SPI_MOSI
NOP
MOSI_DONE:
SET LSPD_SPI_SCLK
// Read LSPD - Set b0 of R11 to MISO
QBBC MISO_LOW, LSPD_SPI_MISO
SET LS_RX, LS_RX, BIT
JMP MISO_DONE
MISO_LOW:
NOP
NOP
MISO_DONE:
CLR LSPD_SPI_SCLK
NOP
NOP
.endm
.macro SPI_XFER_WORD
.mparam LS_RX
SPI_XFER_BIT LS_RX, 15
SPI_XFER_BIT LS_RX, 14
SPI_XFER_BIT LS_RX, 13
SPI_XFER_BIT LS_RX, 12
SPI_XFER_BIT LS_RX, 11
SPI_XFER_BIT LS_RX, 10
SPI_XFER_BIT LS_RX, 9
SPI_XFER_BIT LS_RX, 8
SPI_XFER_BIT LS_RX, 7
SPI_XFER_BIT LS_RX, 6
SPI_XFER_BIT LS_RX, 5
SPI_XFER_BIT LS_RX, 4
SPI_XFER_BIT LS_RX, 3
SPI_XFER_BIT LS_RX, 2
SPI_XFER_BIT LS_RX, 1
SPI_XFER_BIT LS_RX, 0
.endm
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment