Introducing TLC_DC_ONCE.
authorMalte S. Stretz <mss@apache.org>
Thu, 12 Mar 2009 16:32:40 +0000 (16:32 +0000)
committerMalte S. Stretz <mss@apache.org>
Thu, 12 Mar 2009 16:32:40 +0000 (16:32 +0000)
src/main.c
src/tlc.c
src/tlc.h

index e6aa21f..01d0114 100644 (file)
@@ -60,6 +60,10 @@ static inline void main_exec(void)
   // Signal that we're running.
   pin_out(PIN_LED_ON);
   pin_on(PIN_LED_ON);
+
+  // Start TLC.
+  tlc_exec();
+
   // Start DMX processing.
   dmx_exec();
 }
@@ -73,7 +77,7 @@ static inline void main_loop(void)
   while (1) {
     // FIXME
     // TODO: Don't store more data than necessary.
-    tlc_send_data();
+    tlc_update();
   }
 }
 
index 75ee0e3..2f7df85 100644 (file)
--- a/src/tlc.c
+++ b/src/tlc.c
@@ -17,6 +17,8 @@
 
 #define TLC_N_CHANNELS (N_PAINTER * TLC_N_CHANNELS_PER_PAINTER)
 
+//#define TLC_DC_ONCE
+
 
 /*********************************************************************/
 /* Declaration of private global variables.                          */
@@ -43,6 +45,9 @@ static void set_vprg_dc_mode(void);
 
 static void send_data(void);
 
+static void send_dc_data(void);
+static void send_gs_data(void);
+
 
 /*********************************************************************/
 /* Implementation of public interrupts.                              */
@@ -121,12 +126,35 @@ void tlc_init(void)
   pin_in( PIN_TLC_SRTN);
 }
 
-void tlc_send_data(void)
+void tlc_exec(void)
+{
+  // If enabled, shift out DC once.
+  #ifdef TLC_DC_ONCE
+    send_dc_data();
+    clock_xlat();
+  #endif
+}
+
+void tlc_update(void)
 {
+  // Don't send anything if PWM is still active.
   if (data_shifting_) return;
-  send_data();
+
+  // If not disabled, always shift out DC first.
+  #ifndef TLC_DC_ONCE
+    send_dc_data();
+    clock_xlat();
+  #endif
+
+  // No extra SCLK needed, just shift out all GS data.
+  send_gs_data();
+  clock_xlat();
+
+  // A final SCLK to notify 
+  clock_sclk();
+
+  // Start PWM and continue in background...
   start_gscycle();
-  // Continue in background...
 }
 
 
@@ -297,15 +325,7 @@ static void send_dc_data(void)
 
 static void send_data(void)
 {
-  // Always shift out DC first.
-  send_dc_data();
-  clock_xlat();
 
-  // No extra SCLK needed, just shift out all GS data.
-  send_gs_data();
-  clock_xlat();
-
-  clock_sclk();
 }
 
 /*********************************************************************/
index 9a7249f..89c398b 100644 (file)
--- a/src/tlc.h
+++ b/src/tlc.h
@@ -1,5 +1,6 @@
 #pragma once
 
 void tlc_init(void);
+void tlc_exec(void);
 
-void tlc_send_data(void);
+void tlc_update(void);