/*
* LS7366R COMMUNICATION TEST
*
* LS7366R Teensy
* 4 SS 10 SS
* 5 SCK 14 ALT SCK
* 6 MISO 11 MOSI
* 7 MOSI 12 MISO
13 Builtin LED
*/
#include <SPI.h>
#define CLR B00000000
#define RD B01000000
#define WR B10000000
#define LOAD B11000000
#define MDR0 B00001000
#define MDR1 B00010000
#define DTR B00011000
#define CNTR B00100000
#define OTR B00101000
#define STR B00110000
#define SS 10 // Slave Select Pin
#define LED 13 // Teensy 3 Builtin LED
// filter factor 1
// async index
// no index
// free-running
// 4x quadrature
#define MDR0_CONF B00000011
// no flag
// enabled
// 32 bits
#define MDR1_CONF B00000000
SPISettings settings(16000000, MSBFIRST, SPI_MODE1);
void setup() {
Serial.begin(9600);
pinMode(LED, OUTPUT);
pinMode(SS, OUTPUT);
SPI.setSCK(14); //redefine SCK from Pin 13 to Pin 14 for Teensy3.2
//SPI.setMOSI(7); //alternate Teensy 3X MOSI pin, pin 11 is default
//SPI.setMISO(8); //alternate Teensy 3X MISO pin, pin 12 is default
SPI.begin();
pinMode(SS, OUTPUT);
SPI.beginTransaction(settings);
digitalWrite(SS, LOW);
SPI.transfer(WR | MDR0);
SPI.transfer(MDR0_CONF);
digitalWrite(SS, HIGH);
digitalWrite(SS, LOW);
SPI.transfer(WR | MDR1);
SPI.transfer(MDR1_CONF);
digitalWrite(SS, HIGH);
digitalWrite(SS, LOW);
SPI.transfer(CLR | CNTR);
digitalWrite(SS, HIGH);
SPI.endTransaction();
}
long count = 0;
void loop() {
for (byte COUNTER = B00000000; COUNTER <= B11111111; COUNTER++){
// Write Numbers to DTR then parallel shift to CNTR
SPI.beginTransaction(settings);
digitalWrite(SS, LOW);
SPI.transfer(WR|DTR);
SPI.transfer(COUNTER);
SPI.transfer(COUNTER);
SPI.transfer(COUNTER);
SPI.transfer(COUNTER);
digitalWrite(SS, HIGH);
delayMicroseconds(10);
digitalWrite(SS, LOW);
SPI.transfer(LOAD|CNTR);
digitalWrite(SS, HIGH);
delayMicroseconds(10);
digitalWrite(SS, LOW);
// Read Numbers from CNTR
SPI.transfer((byte) RD | CNTR);
count = SPI.transfer(0x00);
count <<= 8;
count |= SPI.transfer(0x00);
count <<= 8;
count |= SPI.transfer(0x00);
count <<= 8;
count |= SPI.transfer(0x00);
digitalWrite(SS, HIGH);
SPI.endTransaction();
Serial.print(count);
Serial.println();
digitalWrite(13,!digitalRead(13));
delayMicroseconds(50000);
}
}