moved neopixel driver to submodule shared with tinyUSB and other projects
This commit is contained in:
parent
caf9d99743
commit
a42ac5e1b6
5 changed files with 20 additions and 105 deletions
3
.gitmodules
vendored
3
.gitmodules
vendored
|
|
@ -22,3 +22,6 @@
|
|||
[submodule "lib/uf2"]
|
||||
path = lib/uf2
|
||||
url = https://github.com/microsoft/uf2.git
|
||||
[submodule "lib/sct_neopixel"]
|
||||
path = lib/sct_neopixel
|
||||
url = https://github.com/gsteiert/sct_neopixel
|
||||
|
|
|
|||
1
lib/sct_neopixel
Submodule
1
lib/sct_neopixel
Submodule
|
|
@ -0,0 +1 @@
|
|||
Subproject commit 497ca8974927e3b853fd80c8fc35f4e557af79b9
|
||||
|
|
@ -29,110 +29,11 @@
|
|||
#include "fsl_gpio.h"
|
||||
#include "fsl_power.h"
|
||||
#include "fsl_iocon.h"
|
||||
#include "fsl_sctimer.h"
|
||||
#include "sct_neopixel.h"
|
||||
|
||||
#include "clock_config.h"
|
||||
|
||||
//--------------------------------------------------------------------+
|
||||
// Neopixel Driver
|
||||
//--------------------------------------------------------------------+
|
||||
#define NEO_SCT SCT0
|
||||
#define NEO_MATCH_PERIOD 0
|
||||
#define NEO_MATCH_0 1
|
||||
#define NEO_MATCH_1 2
|
||||
#define NEO_EVENT_RISE 2
|
||||
#define NEO_EVENT_FALL_0 0
|
||||
#define NEO_EVENT_FALL_1 1
|
||||
#define NEO_EVENT_NEXT 3
|
||||
#define NEO_EVENT_START 4
|
||||
#define NEO_SCT_OUTPUT 6
|
||||
#define NEO_STATE_IDLE 24
|
||||
|
||||
volatile uint32_t _neopixel_array[NEOPIXEL_NUMBER] = {0};
|
||||
volatile uint32_t _neopixel_count = NEOPIXEL_NUMBER;
|
||||
|
||||
void neopixel_int_handler(void){
|
||||
uint32_t eventFlag = NEO_SCT->EVFLAG;
|
||||
if (eventFlag & (1 << NEO_EVENT_NEXT)) {
|
||||
_neopixel_count += 1;
|
||||
if (_neopixel_count < (NEOPIXEL_NUMBER)) {
|
||||
NEO_SCT->EV[NEO_EVENT_FALL_0].STATE = 0xFFFFFF & (~_neopixel_array[_neopixel_count]);
|
||||
NEO_SCT->CTRL &= ~(SCT_CTRL_HALT_L_MASK);
|
||||
}
|
||||
}
|
||||
NEO_SCT->EVFLAG = eventFlag;
|
||||
}
|
||||
|
||||
void SCT0_DriverIRQHandler(void){
|
||||
neopixel_int_handler();
|
||||
SDK_ISR_EXIT_BARRIER;
|
||||
}
|
||||
|
||||
void neopixel_set(uint32_t pixel, uint32_t color){
|
||||
if (pixel < NEOPIXEL_NUMBER) {
|
||||
_neopixel_array[pixel] = color;
|
||||
}
|
||||
}
|
||||
|
||||
void neopixel_update(void){
|
||||
_neopixel_count = 0;
|
||||
NEO_SCT->EV[NEO_EVENT_FALL_0].STATE = 0xFFFFFF & (~_neopixel_array[0]);
|
||||
NEO_SCT->CTRL &= ~(SCT_CTRL_HALT_L_MASK);
|
||||
}
|
||||
|
||||
void neopixel_init(void) {
|
||||
CLOCK_EnableClock(kCLOCK_Sct0);
|
||||
RESET_PeripheralReset(kSCT0_RST_SHIFT_RSTn);
|
||||
|
||||
NEO_SCT->CONFIG = (
|
||||
SCT_CONFIG_UNIFY(1) |
|
||||
SCT_CONFIG_CLKMODE(kSCTIMER_System_ClockMode) |
|
||||
SCT_CONFIG_NORELOAD_L(1) );
|
||||
NEO_SCT->CTRL = (
|
||||
SCT_CTRL_HALT_L(1) |
|
||||
SCT_CTRL_CLRCTR_L(1) );
|
||||
|
||||
NEO_SCT->MATCH[NEO_MATCH_PERIOD] = 120;
|
||||
NEO_SCT->MATCH[NEO_MATCH_0] = 30;
|
||||
NEO_SCT->MATCH[NEO_MATCH_1] = 60;
|
||||
NEO_SCT->EV[NEO_EVENT_START].STATE = (1 << NEO_STATE_IDLE);
|
||||
NEO_SCT->EV[NEO_EVENT_START].CTRL = (
|
||||
kSCTIMER_OutputLowEvent | SCT_EV_CTRL_IOSEL(NEO_SCT_OUTPUT) |
|
||||
SCT_EV_CTRL_STATELD(1) | SCT_EV_CTRL_STATEV(23));
|
||||
NEO_SCT->EV[NEO_EVENT_RISE].STATE = 0xFFFFFE;
|
||||
NEO_SCT->EV[NEO_EVENT_RISE].CTRL = (
|
||||
kSCTIMER_MatchEventOnly | SCT_EV_CTRL_MATCHSEL(NEO_MATCH_PERIOD) |
|
||||
SCT_EV_CTRL_STATELD(0) | SCT_EV_CTRL_STATEV(31));
|
||||
NEO_SCT->EV[NEO_EVENT_FALL_0].STATE = 0x0;
|
||||
NEO_SCT->EV[NEO_EVENT_FALL_0].CTRL = (
|
||||
kSCTIMER_MatchEventOnly | SCT_EV_CTRL_MATCHSEL(NEO_MATCH_0) |
|
||||
SCT_EV_CTRL_STATELD(0) );
|
||||
NEO_SCT->EV[NEO_EVENT_FALL_1].STATE = 0xFFFFFF;
|
||||
NEO_SCT->EV[NEO_EVENT_FALL_1].CTRL = (
|
||||
kSCTIMER_MatchEventOnly | SCT_EV_CTRL_MATCHSEL(NEO_MATCH_1) |
|
||||
SCT_EV_CTRL_STATELD(0) );
|
||||
NEO_SCT->EV[NEO_EVENT_NEXT].STATE = 0x1;
|
||||
NEO_SCT->EV[NEO_EVENT_NEXT].CTRL = (
|
||||
kSCTIMER_MatchEventOnly | SCT_EV_CTRL_MATCHSEL(NEO_MATCH_PERIOD) |
|
||||
SCT_EV_CTRL_STATELD(1) | SCT_EV_CTRL_STATEV(NEO_STATE_IDLE));
|
||||
|
||||
NEO_SCT->LIMIT = (1 << NEO_EVENT_START) | (1 << NEO_EVENT_RISE) | (1 << NEO_EVENT_NEXT);
|
||||
NEO_SCT->HALT = (1 << NEO_EVENT_NEXT);
|
||||
NEO_SCT->START = (1 << NEO_EVENT_START);
|
||||
|
||||
NEO_SCT->OUT[NEO_SCT_OUTPUT].SET = (1 << NEO_EVENT_START) | (1 << NEO_EVENT_RISE);
|
||||
NEO_SCT->OUT[NEO_SCT_OUTPUT].CLR = (1 << NEO_EVENT_FALL_0) | (1 << NEO_EVENT_FALL_1) | (1 << NEO_EVENT_NEXT);
|
||||
|
||||
NEO_SCT->STATE = NEO_STATE_IDLE;
|
||||
NEO_SCT->OUTPUT = 0x0;
|
||||
NEO_SCT->RES = SCT_RES_O6RES(0x2);
|
||||
NEO_SCT->EVEN = (1 << NEO_EVENT_NEXT);
|
||||
EnableIRQ(SCT0_IRQn);
|
||||
|
||||
neopixel_set(0, 0x101000);
|
||||
neopixel_set(1, 0x101000);
|
||||
neopixel_update();
|
||||
}
|
||||
uint32_t _pixelData[NEOPIXEL_NUMBER] = {0};
|
||||
|
||||
//--------------------------------------------------------------------+
|
||||
// Board Pin Initialization
|
||||
|
|
@ -157,7 +58,11 @@ void board_pin_init(void)
|
|||
|
||||
GPIO_PinInit(GPIO, LED_PORT, LED_PIN, &(gpio_pin_config_t){kGPIO_DigitalOutput, 1});
|
||||
|
||||
neopixel_init();
|
||||
sctpix_init(NEOPIXEL_TYPE);
|
||||
sctpix_addCh(NEOPIXEL_CH, _pixelData, NEOPIXEL_NUMBER);
|
||||
sctpix_setPixel(NEOPIXEL_CH, 0, 0x101000);
|
||||
sctpix_setPixel(NEOPIXEL_CH, 1, 0x101000);
|
||||
sctpix_show();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------+
|
||||
|
|
@ -176,9 +81,9 @@ void board_rgb_write(uint8_t const rgb[]) {
|
|||
if (rgb[0]) { color += (NEOPIXEL_BRIGHTNESS <<16); }
|
||||
if (rgb[1]) { color += (NEOPIXEL_BRIGHTNESS <<8); }
|
||||
if (rgb[2]) { color += (NEOPIXEL_BRIGHTNESS); }
|
||||
neopixel_set(0, color);
|
||||
neopixel_set(1, color);
|
||||
neopixel_update();
|
||||
sctpix_setPixel(NEOPIXEL_CH, 0, color);
|
||||
sctpix_setPixel(NEOPIXEL_CH, 1, color);
|
||||
sctpix_show();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------+
|
||||
|
|
|
|||
|
|
@ -51,6 +51,8 @@
|
|||
#define NEOPIXEL_NUMBER 2
|
||||
#define NEOPIXEL_PORT 0
|
||||
#define NEOPIXEL_PIN 27
|
||||
#define NEOPIXEL_CH 6
|
||||
#define NEOPIXEL_TYPE 0
|
||||
|
||||
#define USE_RGB NEOPIXEL_NUMBER
|
||||
|
||||
|
|
|
|||
|
|
@ -2,6 +2,10 @@ MCU = LPC55S69
|
|||
MCU_CORE = $(MCU)_cm33_core0
|
||||
CFLAGS += -DCPU_LPC55S69JBD100_cm33_core0
|
||||
|
||||
SRC_C += $(TOP)/lib/sct_neopixel/sct_neopixel.c
|
||||
|
||||
INC += $(TOP)/lib/sct_neopixel
|
||||
|
||||
# For flash-pyocd
|
||||
PYOCD_TARGET = $(MCU)
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue