mirror of https://github.com/rusefi/bldc.git
Updated upload command to also work with latest openocd, gamma correction for ws2811 LEDs
This commit is contained in:
parent
8dc8ffe2c7
commit
c3dec34d72
2
Makefile
2
Makefile
|
@ -275,7 +275,7 @@ build/$(PROJECT).bin: build/$(PROJECT).elf
|
||||||
# Program
|
# Program
|
||||||
upload: build/$(PROJECT).bin
|
upload: build/$(PROJECT).bin
|
||||||
#qstlink2 --cli --erase --write 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:
|
debug-start:
|
||||||
openocd -f stm32-bv_openocd.cfg
|
openocd -f stm32-bv_openocd.cfg
|
||||||
|
|
|
@ -120,8 +120,8 @@ static msg_t led_thread(void *arg) {
|
||||||
|
|
||||||
while (state == state_last && rev_last == reverse_leds && !HAS_FAULT()) {
|
while (state == state_last && rev_last == reverse_leds && !HAS_FAULT()) {
|
||||||
if ((chTimeNow() / (CH_FREQUENCY / 2)) % 2) {
|
if ((chTimeNow() / (CH_FREQUENCY / 2)) % 2) {
|
||||||
set_led_wrapper(WS2811_LED_NUM / 2 - 1, 0xFF9900);
|
set_led_wrapper(WS2811_LED_NUM / 2 - 1, COLOR_ORANGE);
|
||||||
set_led_wrapper(WS2811_LED_NUM / 2, 0xFF9900);
|
set_led_wrapper(WS2811_LED_NUM / 2, COLOR_ORANGE);
|
||||||
} else {
|
} else {
|
||||||
set_led_wrapper(WS2811_LED_NUM / 2 - 1, COLOR_BLACK);
|
set_led_wrapper(WS2811_LED_NUM / 2 - 1, COLOR_BLACK);
|
||||||
set_led_wrapper(WS2811_LED_NUM / 2, 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()) {
|
while (state == state_last && rev_last == reverse_leds && !HAS_FAULT()) {
|
||||||
if ((chTimeNow() / (CH_FREQUENCY / 2)) % 2) {
|
if ((chTimeNow() / (CH_FREQUENCY / 2)) % 2) {
|
||||||
set_led_wrapper(0, 0xFF9900);
|
set_led_wrapper(0, COLOR_ORANGE);
|
||||||
set_led_wrapper(WS2811_LED_NUM - 1, 0xFF9900);
|
set_led_wrapper(WS2811_LED_NUM - 1, COLOR_ORANGE);
|
||||||
} else {
|
} else {
|
||||||
set_led_wrapper(0, COLOR_BLACK);
|
set_led_wrapper(0, COLOR_BLACK);
|
||||||
set_led_wrapper(WS2811_LED_NUM - 1, COLOR_BLACK);
|
set_led_wrapper(WS2811_LED_NUM - 1, COLOR_BLACK);
|
||||||
|
|
11
ws2811.c
11
ws2811.c
|
@ -22,6 +22,7 @@
|
||||||
* Author: benjamin
|
* Author: benjamin
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <math.h>
|
||||||
#include "ws2811.h"
|
#include "ws2811.h"
|
||||||
#include "stm32f4xx_conf.h"
|
#include "stm32f4xx_conf.h"
|
||||||
#include "ch.h"
|
#include "ch.h"
|
||||||
|
@ -38,6 +39,7 @@
|
||||||
// Private variables
|
// Private variables
|
||||||
static uint16_t bitbuffer[BITBUFFER_LEN];
|
static uint16_t bitbuffer[BITBUFFER_LEN];
|
||||||
static uint32_t RGBdata[LED_BUFFER_LEN];
|
static uint32_t RGBdata[LED_BUFFER_LEN];
|
||||||
|
static uint8_t gamma_table[256];
|
||||||
|
|
||||||
// Private function prototypes
|
// Private function prototypes
|
||||||
static uint32_t rgb_to_local(uint32_t color);
|
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;
|
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
|
#if WS2811_USE_CH2
|
||||||
palSetPadMode(GPIOB, 7,
|
palSetPadMode(GPIOB, 7,
|
||||||
PAL_MODE_ALTERNATE(GPIO_AF_TIM4) |
|
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 g = (color >> 8) & 0xFF;
|
||||||
uint32_t b = color & 0xFF;
|
uint32_t b = color & 0xFF;
|
||||||
|
|
||||||
|
r = gamma_table[r];
|
||||||
|
g = gamma_table[g];
|
||||||
|
b = gamma_table[b];
|
||||||
|
|
||||||
return (g << 16) | (r << 8) | b;
|
return (g << 16) | (r << 8) | b;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue