Routines to drive a chain of APA102 Leds.

Dependents:   FRDM-K46Z_APA102

Fork of APA102a by Joel Rosiene

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers APA102a.cpp Source File

APA102a.cpp

00001 #include "APA102a.h"
00002 #include "mbed.h"
00003 
00004 APA102a::APA102a(PinName mosi,PinName miso,PinName sclk,int rate)
00005         : _spi(mosi, miso, sclk)
00006       
00007         {
00008             // Setup the spi for 8 bit data, low steady state clock,
00009             // second edge capture, with clock rate, clock active low, rising edge
00010             _spi.format(8,0);
00011             _spi.frequency(rate);
00012         } 
00013         
00014 void APA102a::SetBuffer(unsigned int Buffer[],int Rows,int Cols, int Stride,int Offset, bool ZigZag,bool Wrap)
00015 {
00016     Buf = Buffer;
00017     NR = Rows;
00018     NC = Cols;
00019     NS = Stride;
00020     off = Offset;
00021     ZF = ZigZag;
00022     WF = Wrap;
00023     }
00024     
00025 void APA102a::Repaint()
00026 {   
00027     int index;
00028     int end_count;
00029     unsigned int val;
00030     
00031     _spi.write(0X00);  // Start
00032     _spi.write(0X00);
00033     _spi.write(0X00);
00034     _spi.write(0X00);
00035     
00036     for(int r = 0;r<NR;r++)
00037     {
00038         for(int c = off;c<(NC+off);c++)
00039         {
00040          //   int cc = (WF)?(c%NS):((c<NS)?c:NS);
00041          //   if (ZF) 
00042          //     { if((r&0x01)>0)
00043          //           index = r*NS + NC+off-cc;
00044          //      else
00045          //           index = r*NS + cc;}
00046          //   else 
00047                 index = r*NS + c;
00048                 
00049             val = Buf[index];
00050             _spi.write((val>>24)&0xFF);  
00051             _spi.write((val>>16)&0xFF);  
00052             _spi.write((val>>8)&0xFF);  
00053             _spi.write(val&0xFF);  
00054         }
00055     }
00056     
00057     end_count = ((NR*NC)>>1);
00058     while (end_count>0){
00059         _spi.write(0XFF); // Stop
00060         end_count = end_count-8;
00061         }
00062    // _spi.write(0XFF);
00063    // _spi.write(0XFF);
00064    // _spi.write(0XFF);
00065     
00066 }