merge led1642gw fixes into patterns branch

This commit is contained in:
Stefan Rupp 2014-06-23 03:51:34 +02:00
commit ff58cfa596

View File

@ -16,6 +16,7 @@
#include "led1642gw_config.h" #include "led1642gw_config.h"
#define NUM_LED1642GW_CHANNELS (16) // number of LED channels per IC #define NUM_LED1642GW_CHANNELS (16) // number of LED channels per IC
//total numer of channels. needed to calculate the buffer size. //total numer of channels. needed to calculate the buffer size.
@ -40,26 +41,28 @@ static void write_data(uint16_t data, uint8_t le_clocks)
{ {
uint16_t mask = 0x8000; uint16_t mask = 0x8000;
int8_t bit; int8_t bit;
SET_CLK_L();
SET_LE_L(); SET_LE_L();
for (bit=15; bit>=le_clocks; bit--) { for (bit=15; bit>=le_clocks; bit--) {
SET_CLK_L();
if(data&mask) { SET_SDI_H(); } if(data&mask) { SET_SDI_H(); }
else { SET_SDI_L(); } else { SET_SDI_L(); }
SET_CLK_H(); SET_CLK_H();
mask >>= 1; mask >>= 1;
SET_CLK_L();
} }
SET_LE_H(); SET_LE_H();
for (/*noting to initialize*/; bit>=0; bit--) { for (/*noting to initialize*/; bit>=0; bit--) {
SET_CLK_L();
if(data&mask) { SET_SDI_H(); } if(data&mask) { SET_SDI_H(); }
else { SET_SDI_L(); } else { SET_SDI_L(); }
SET_CLK_H(); SET_CLK_H();
mask >>= 1; mask >>= 1;
SET_CLK_L();
} }
// set all pins to low after transmission // set all pins to low after transmission
SET_CLK_L(); //SET_CLK_L();
SET_LE_L(); SET_LE_L();
SET_SDI_L(); SET_SDI_L();
@ -148,9 +151,11 @@ void led1642gw_set_gain(uint8_t gain)
gain = 0x3f; gain = 0x3f;
} }
for (uint8_t ic=0; ic<(NUM_LED1642GW_ICs-1); ic++) { uint16_t g = gain;
for (uint8_t ic=0; ic<(NUM_LED1642GW_ICs); ic++) {
config_reg[ic] &= ~(0x003f); config_reg[ic] &= ~(0x003f);
config_reg[ic] |= gain; config_reg[ic] |= g;
} }
} }
@ -158,9 +163,11 @@ void led1642gw_set_gain(uint8_t gain)
void led1642gw_set_current_mode(uint8_t mode) void led1642gw_set_current_mode(uint8_t mode)
{ {
for (uint8_t ic=0; ic<(NUM_LED1642GW_ICs-1); ic++) { uint16_t mask = (1<<6);
if (mode) { config_reg[ic] |= (1<<6); }
else { config_reg[ic] &= ~(1<<6); } for (uint8_t ic=0; ic<(NUM_LED1642GW_ICs); ic++) {
if (mode) { config_reg[ic] |= mask; }
else { config_reg[ic] &= ~mask; }
} }
} }
@ -209,7 +216,7 @@ void led1642gw_flush(void)
// then, when the brightness data has propagated through the // then, when the brightness data has propagated through the
// shift registers, write all data into the DATA LATCH of // shift registers, write all data into the DATA LATCH of
// all of the ICs. // all of the ICs.
write_data_latch(ledbuffer[channel+(ic*NUM_LED1642GW_CHANNELS)]); write_data_latch(ledbuffer[channel+(NUM_LED1642GW_CHANNELS*ic)]);
} }
// for the 16th channel, we don't write to the DATA LATCH, but // for the 16th channel, we don't write to the DATA LATCH, but
// to the CLOBAL data latch. // to the CLOBAL data latch.