//This is a demo code example for using SPI without a //predefined library on the chipKIT uC32 //globals int chipSelect = 3; int masterOutSlaveIn = 5; int masterInSlaveOut = 7; int serialClock = 9; int dataInput [8]; int arrayLocation; int receivedValue; //This code operates under the presumption that SPI is operating //on the popular style of having the data be transmitted MSB //first and to be "picked up" by the other device on the //falling edge of the clock void setup(){ pinMode(chipSelect, OUTPUT); pinMode(masterOutSlaveIn, OUTPUT); pinMode(masterInSlaveOut, INPUT); pinMode(serialClock, OUTPUT); } void loop(){ digitalWrite(chipSelect, LOW); sendLargeValue(); digitalWrite(chipSelect, HIGH); delay(1); digitalWrite(chipSelect, LOW); sendSmallValue(); digitalWrite(chipSelect, HIGH); delay(1); } void sendLargeValue(){ arrayLocation = 0; digitalWrite(serialClock, HIGH); digitalWrite(masterOutSlaveIn, HIGH); //1 collectBit(); digitalWrite(serialClock, LOW); //transfer delay(1); digitalWrite(serialClock, HIGH); digitalWrite(masterOutSlaveIn, HIGH); //1 collectBit(); digitalWrite(serialClock, LOW); //transfer delay(1); digitalWrite(serialClock, HIGH); digitalWrite(masterOutSlaveIn, HIGH); //1 collectBit(); digitalWrite(serialClock, LOW); //transfer delay(1); digitalWrite(serialClock, HIGH); digitalWrite(masterOutSlaveIn, HIGH); //1 collectBit(); digitalWrite(serialClock, LOW); //transfer delay(1); digitalWrite(serialClock, HIGH); digitalWrite(masterOutSlaveIn, HIGH); //1 collectBit(); digitalWrite(serialClock, LOW); //transfer delay(1); digitalWrite(serialClock, HIGH); digitalWrite(masterOutSlaveIn, HIGH); //1 collectBit(); digitalWrite(serialClock, LOW); //transfer delay(1); digitalWrite(serialClock, HIGH); digitalWrite(masterOutSlaveIn, HIGH); //1 collectBit(); digitalWrite(serialClock, LOW); //transfer delay(1); digitalWrite(serialClock, HIGH); digitalWrite(masterOutSlaveIn, HIGH); //1 collectBit(); digitalWrite(serialClock, LOW); //transfer delay(1); receiveValue(); } void sendSmallValue(){ arrayLocation = 0; digitalWrite(serialClock, HIGH); digitalWrite(masterOutSlaveIn, LOW); //0 collectBit(); digitalWrite(serialClock, LOW); //transfer delay(1); digitalWrite(serialClock, HIGH); digitalWrite(masterOutSlaveIn, LOW); //0 collectBit(); digitalWrite(serialClock, LOW); //transfer delay(1); digitalWrite(serialClock, HIGH); digitalWrite(masterOutSlaveIn, LOW); //0 collectBit(); digitalWrite(serialClock, LOW); //transfer delay(1); digitalWrite(serialClock, HIGH); digitalWrite(masterOutSlaveIn, LOW); //0 collectBit(); digitalWrite(serialClock, LOW); //transfer delay(1); digitalWrite(serialClock, HIGH); digitalWrite(masterOutSlaveIn, LOW); //0 collectBit(); digitalWrite(serialClock, LOW); //transfer delay(1); digitalWrite(serialClock, HIGH); digitalWrite(masterOutSlaveIn, LOW); //0 collectBit(); digitalWrite(serialClock, LOW); //transfer delay(1); digitalWrite(serialClock, HIGH); digitalWrite(masterOutSlaveIn, LOW); //0 collectBit(); digitalWrite(serialClock, LOW); //transfer delay(1); digitalWrite(serialClock, HIGH); digitalWrite(masterOutSlaveIn, LOW); //0 collectBit(); digitalWrite(serialClock, LOW); //transfer delay(1); receiveValue(); } void collectBit(){ dataInput[arrayLocation] = digitalRead(masterInSlaveOut); arrayLocation++; } void receiveValue(){ //presuming the MSB was received first receivedValue = 0; for(int i=0; i<8; i++){ receivedValue = receivedValue + dataInput[i]<<(7-i); } }