/* * ---------------------------------------------------------------------------- * "THE BEER-WARE LICENSE" (Revision 42): * wrote this file. As long as you retain this notice you * can do whatever you want with this stuff. If we meet some day, and you think * this stuff is worth it, you can buy me a beer in return. * (c) 2014 Stefan Rupp * ---------------------------------------------------------------------------- */ #include #include "led1642gw.h" #include #include "led1642gw_config.h" #define NUM_LED1642GW_CHANNELS (16) #define NUM_LED_CHANNELS (NUM_LED1642GW_CHANNELS*NUM_LED1642GW_ICs) static uint16_t ledbuffer[NUM_LED_CHANNELS]; static void write_data(uint16_t data, uint8_t le_clocks) { uint16_t mask = 0x8000; int8_t bit; SET_LE_L(); for (bit=15; bit>=le_clocks; bit--) { SET_CLK_L(); if(data&mask) { SET_SDI_H(); } else { SET_SDI_L(); } SET_CLK_H(); mask >>= 1; } SET_LE_H(); for (/*noting to initialize*/; bit>=0; bit--) { SET_CLK_L(); if(data&mask) { SET_SDI_H(); } else { SET_SDI_L(); } SET_CLK_H(); mask >>= 1; } SET_CLK_L(); SET_LE_L(); SET_SDI_L(); } static void write_data_latch(uint16_t data) { write_data(data, 4); } static void write_global_latch(uint16_t data) { write_data(data, 6); } static void write_no_command(uint16_t data) { write_data(data, 0); } void led1642gw_turn_all_on(void) { write_data(0xffff, 2); _delay_us(10); write_data(0xffff, 2); _delay_us(10); write_data(0xffff, 2); _delay_us(10); } void led1642gw_turn_all_off(void) { write_data(0x0000, 2); _delay_us(10); write_data(0x0000, 2); _delay_us(10); write_data(0x0000, 2); _delay_us(10); } void led1642gw_init(void) { SET_CLK_L(); SET_SDI_L(); SET_LE_L(); DDR_CLK |= (1<