Nick Lowyck / Mbed 2 deprecated Ledcube

Dependencies:   mbed mbed-rtos

Committer:
sNICKer1103
Date:
Fri May 02 18:26:40 2014 +0000
Revision:
3:da30c350c339
Parent:
2:f2700008c9d9
Child:
4:a091b8f8216d
Refactoring part 2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sNICKer1103 2:f2700008c9d9 1 #include "SPIDriver.h"
sNICKer1103 2:f2700008c9d9 2 #include "mbed.h"
sNICKer1103 2:f2700008c9d9 3
sNICKer1103 2:f2700008c9d9 4 SPIDriver::SPIDriver(PinName pin1, PinName pin2, PinName pin3, PinName latchpin, PinName cspin, const int freq) : spi(pin1, pin2, pin3){
sNICKer1103 2:f2700008c9d9 5 spi.format(8, 3);
sNICKer1103 2:f2700008c9d9 6 spi.frequency(freq);
sNICKer1103 2:f2700008c9d9 7
sNICKer1103 2:f2700008c9d9 8 latch = new DigitalOut(latchpin);
sNICKer1103 2:f2700008c9d9 9 cs = new DigitalOut(cspin);
sNICKer1103 2:f2700008c9d9 10
sNICKer1103 2:f2700008c9d9 11 *latch = 0;
sNICKer1103 2:f2700008c9d9 12 *cs = 1;
sNICKer1103 2:f2700008c9d9 13 }
sNICKer1103 2:f2700008c9d9 14
sNICKer1103 3:da30c350c339 15 SPIDriver::~SPIDriver(){
sNICKer1103 3:da30c350c339 16 }
sNICKer1103 3:da30c350c339 17
sNICKer1103 2:f2700008c9d9 18 void SPIDriver::write(uint8_t ledcolor){
sNICKer1103 2:f2700008c9d9 19 *cs = 0;
sNICKer1103 2:f2700008c9d9 20 spi.write(ledcolor);
sNICKer1103 2:f2700008c9d9 21 *cs = 1;
sNICKer1103 2:f2700008c9d9 22 }
sNICKer1103 2:f2700008c9d9 23
sNICKer1103 3:da30c350c339 24 void SPIDriver::reversedwrite(uint8_t ledcolor){
sNICKer1103 3:da30c350c339 25 *cs = 0;
sNICKer1103 3:da30c350c339 26 spi.write(reverse_byte(ledcolor));
sNICKer1103 3:da30c350c339 27 *cs = 1;
sNICKer1103 3:da30c350c339 28 }
sNICKer1103 3:da30c350c339 29
sNICKer1103 2:f2700008c9d9 30 void SPIDriver::pulseLatch(){
sNICKer1103 2:f2700008c9d9 31 *latch = 1;
sNICKer1103 2:f2700008c9d9 32 *latch = 0;
sNICKer1103 3:da30c350c339 33 }
sNICKer1103 3:da30c350c339 34
sNICKer1103 3:da30c350c339 35 void SPIDriver::sendFrame(LedCube* ledc){
sNICKer1103 3:da30c350c339 36 for(int i = 0; i < 8; i++) { //eerst laag selecteren, SPI zendt normaalgezien MSB first
sNICKer1103 3:da30c350c339 37 write(ledc->getNextValue());
sNICKer1103 3:da30c350c339 38 for(int j = 0; j < 24; j++) {
sNICKer1103 3:da30c350c339 39 write(ledc->getNextValue()); //ledwaarden zelf nog altijd apart, omdat ze mogelijk gespiegeld moeten doorgestuurd worden
sNICKer1103 3:da30c350c339 40 } //(LSB first)
sNICKer1103 3:da30c350c339 41 wait(0.00125); //voor 100 Hz
sNICKer1103 3:da30c350c339 42 pulseLatch();
sNICKer1103 3:da30c350c339 43 }//end outer for loop
sNICKer1103 3:da30c350c339 44 }
sNICKer1103 3:da30c350c339 45
sNICKer1103 3:da30c350c339 46 void SPIDriver::sendTest(LedCube* ledc, int frames){
sNICKer1103 3:da30c350c339 47 printf("Testing...\n\r");
sNICKer1103 3:da30c350c339 48 for(int i = 0; i < frames; i++) {
sNICKer1103 3:da30c350c339 49 sendFrame(ledc);
sNICKer1103 3:da30c350c339 50 }
sNICKer1103 3:da30c350c339 51 }
sNICKer1103 3:da30c350c339 52
sNICKer1103 3:da30c350c339 53 void SPIDriver::testPhase(int xframes){
sNICKer1103 3:da30c350c339 54 printf("Initiating Test phase\n\r");
sNICKer1103 3:da30c350c339 55
sNICKer1103 3:da30c350c339 56 LedCube* testledcube1 = new LedCube();
sNICKer1103 3:da30c350c339 57 LedCube* testledcube2 = new LedCube();
sNICKer1103 3:da30c350c339 58
sNICKer1103 3:da30c350c339 59 testledcube1->testMode(LedCube::firsthalfwhite);
sNICKer1103 3:da30c350c339 60 testledcube2->testMode(LedCube::secondhalfwhite);
sNICKer1103 3:da30c350c339 61
sNICKer1103 3:da30c350c339 62 sendTest(testledcube1, xframes);
sNICKer1103 3:da30c350c339 63 sendTest(testledcube2, xframes);
sNICKer1103 3:da30c350c339 64
sNICKer1103 3:da30c350c339 65 printf("Test phase terminated!\n\r");
sNICKer1103 3:da30c350c339 66 }
sNICKer1103 3:da30c350c339 67
sNICKer1103 3:da30c350c339 68 void SPIDriver::stream(LedCube* ledc){
sNICKer1103 3:da30c350c339 69 printf("Initiating stream from following matrices\n\r");
sNICKer1103 3:da30c350c339 70 ledc->printAll();
sNICKer1103 3:da30c350c339 71 printf("Streaming...\n\r");
sNICKer1103 3:da30c350c339 72 while(true){
sNICKer1103 3:da30c350c339 73 sendFrame(ledc);
sNICKer1103 3:da30c350c339 74 }
sNICKer1103 3:da30c350c339 75 }
sNICKer1103 3:da30c350c339 76
sNICKer1103 3:da30c350c339 77 uint8_t SPIDriver::reverse_byte(uint8_t byte)
sNICKer1103 3:da30c350c339 78 {
sNICKer1103 3:da30c350c339 79 return (__rbit(byte) >> 24) & 0xFF; // reverse a byte in a 32-bit value, and extract the byte
sNICKer1103 2:f2700008c9d9 80 }