Skip to content

Instantly share code, notes, and snippets.

@Swap-File
Last active October 29, 2020 19:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Swap-File/77a81159ae9dd2e2d77f1298e0b0d39b to your computer and use it in GitHub Desktop.
Save Swap-File/77a81159ae9dd2e2d77f1298e0b0d39b to your computer and use it in GitHub Desktop.
#include "SPI.h" // include the SPI library:
#define SPI_TCR 0x60
#define SPI_TDR 0x64
#define SPI_RSR 0x70
#define SPI_RDR 0x74
#define mmio32(x) (*(volatile unsigned long *)(0x403A0000 + x))
#define PAYLOAD 5096
uint16_t dac[PAYLOAD];
void setup()
{
// set the slaveSelectPin as an output:
pinMode(6, OUTPUT);
// initialize SPI:
SPI.begin();
SPI.beginTransaction(SPISettings(32000000, LSBFIRST, SPI_MODE0));
for (int i = 0; i < PAYLOAD; i++)
{
dac[i] = i % 0xFFFF;
}
}
void loop()
{
mmio32(SPI_TCR) = (mmio32(SPI_TCR) & 0xfffff000) | LPSPI_TCR_FRAMESZ(15); // turn on 16 bit mode
digitalWriteFast(6, LOW);
for (int i = 0; i < PAYLOAD; i++)
{
mmio32(SPI_TDR) = dac[i]; // output 16 bit data.
digitalWriteFast(6, LOW);
//while ((mmio32(SPI_RSR) & LPSPI_RSR_RXEMPTY)) ; // wait while the RSR fifo is empty...
delayNanoseconds(560);
volatile int junk = mmio32(SPI_RDR);
digitalWriteFast(6, HIGH);
}
digitalWriteFast(6, HIGH);
delay(10);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment