TLC5940 library which supports SWSPI, has API to specify grayscale PWM period and has API like Arduino library.

Fork of TLC5940 by Stefan Nielsen

Revision:
3:2c0af5f5fa13
Parent:
2:b411648dfe54
Child:
5:c35b2b62f2f3
diff -r b411648dfe54 -r 2c0af5f5fa13 TLC5940.cpp
--- a/TLC5940.cpp	Tue Oct 13 12:20:23 2015 +0000
+++ b/TLC5940.cpp	Sat Oct 17 01:36:58 2015 +0000
@@ -1,20 +1,17 @@
 #include "TLC5940.h"
-#define GSCLK_PERIOD 5
 
-TLC5940::TLC5940(PinName mosi, PinName miso, PinName sck, PinName xlat, PinName blank, PinName gsclk):
-    _spi(SWSPI(mosi, miso, sck)),
-    _gsclk(PwmOut(gsclk)),
-    _sclk(DigitalOut(sck)),
-    _xlat(DigitalOut(xlat)),
-    _blank(DigitalOut(blank)),
-    _t(Ticker())
+TLC5940::TLC5940(PinName mosi, PinName miso, PinName sck, PinName xlat, PinName blank, PinName gsclk,
+                 int gspwmcycle_us, bool gspwmcycle_repeat):
+    _spi(mosi, miso, sck),
+    _gsclk(gsclk),
+    _xlat(xlat),
+    _blank(blank),
+    _gspwmcycle_us(gspwmcycle_us),
+    _gspwmcycle_repeat(gspwmcycle_repeat)
 {
     _spi.format(12,0);
     _spi.frequency(30000000);
-
-    // Turn off GSCLK
-    _gsclk.write(0.0f);
-    _gsclk.period_us(GSCLK_PERIOD);
+    _gsclk.period_us(gspwmcycle_us / 4096);
 
     // Reset to 0
     for(int i = 0; i < 16; i++)
@@ -42,14 +39,18 @@
         _spi.write(gs_data[i]);
     }
 
+    _blank.write(1);
     _xlat.write(1);
     _xlat.write(0);
+    _blank.write(0);
 }
 
 void TLC5940::run()
 {
+    if (_gspwmcycle_repeat) {
+        _t.attach_us(this, &TLC5940::refresh, _gspwmcycle_us);
+    }
     _gsclk.write(0.5f);
-    _t.attach_us(this, &TLC5940::refresh, GSCLK_PERIOD*4096);
 }
 
 void TLC5940::refresh()