Updated upload command to also work with latest openocd, gamma correction for ws2811 LEDs

This commit is contained in:
Benjamin Vedder 2014-12-27 23:24:20 +01:00
parent 8dc8ffe2c7
commit c3dec34d72
3 changed files with 16 additions and 5 deletions

View File

@ -275,7 +275,7 @@ build/$(PROJECT).bin: build/$(PROJECT).elf
# Program
upload: build/$(PROJECT).bin
#qstlink2 --cli --erase --write build/$(PROJECT).bin
openocd -f interface/stlink-v2.cfg -c "set WORKAREASIZE 0x2000" -f target/stm32f4x_stlink.cfg -c "program build/$(PROJECT).elf verify reset"
openocd -f board/stm32f4discovery.cfg -c "program build/$(PROJECT).elf verify reset" -c "reset_config trst_only combined"
debug-start:
openocd -f stm32-bv_openocd.cfg

View File

@ -120,8 +120,8 @@ static msg_t led_thread(void *arg) {
while (state == state_last && rev_last == reverse_leds && !HAS_FAULT()) {
if ((chTimeNow() / (CH_FREQUENCY / 2)) % 2) {
set_led_wrapper(WS2811_LED_NUM / 2 - 1, 0xFF9900);
set_led_wrapper(WS2811_LED_NUM / 2, 0xFF9900);
set_led_wrapper(WS2811_LED_NUM / 2 - 1, COLOR_ORANGE);
set_led_wrapper(WS2811_LED_NUM / 2, COLOR_ORANGE);
} else {
set_led_wrapper(WS2811_LED_NUM / 2 - 1, COLOR_BLACK);
set_led_wrapper(WS2811_LED_NUM / 2, COLOR_BLACK);
@ -143,8 +143,8 @@ static msg_t led_thread(void *arg) {
while (state == state_last && rev_last == reverse_leds && !HAS_FAULT()) {
if ((chTimeNow() / (CH_FREQUENCY / 2)) % 2) {
set_led_wrapper(0, 0xFF9900);
set_led_wrapper(WS2811_LED_NUM - 1, 0xFF9900);
set_led_wrapper(0, COLOR_ORANGE);
set_led_wrapper(WS2811_LED_NUM - 1, COLOR_ORANGE);
} else {
set_led_wrapper(0, COLOR_BLACK);
set_led_wrapper(WS2811_LED_NUM - 1, COLOR_BLACK);

View File

@ -22,6 +22,7 @@
* Author: benjamin
*/
#include <math.h>
#include "ws2811.h"
#include "stm32f4xx_conf.h"
#include "ch.h"
@ -38,6 +39,7 @@
// Private variables
static uint16_t bitbuffer[BITBUFFER_LEN];
static uint32_t RGBdata[LED_BUFFER_LEN];
static uint8_t gamma_table[256];
// Private function prototypes
static uint32_t rgb_to_local(uint32_t color);
@ -73,6 +75,11 @@ void ws2811_init(void) {
bitbuffer[BITBUFFER_LEN - BITBUFFER_PAD - 1 + i] = 0;
}
// Generate gamma correction table
for (int i = 0;i < 256;i++) {
gamma_table[i] = (int)roundf(powf((float)i / 255.0, 1.0 / 0.45) * 255.0);
}
#if WS2811_USE_CH2
palSetPadMode(GPIOB, 7,
PAL_MODE_ALTERNATE(GPIO_AF_TIM4) |
@ -224,5 +231,9 @@ static uint32_t rgb_to_local(uint32_t color) {
uint32_t g = (color >> 8) & 0xFF;
uint32_t b = color & 0xFF;
r = gamma_table[r];
g = gamma_table[g];
b = gamma_table[b];
return (g << 16) | (r << 8) | b;
}