8 state implementation, still not working
This commit is contained in:
@@ -93,19 +93,22 @@ void USB1_IRQHandler(void)
|
|||||||
#define NEO_EVENT_NEXT 3
|
#define NEO_EVENT_NEXT 3
|
||||||
#define NEO_EVENT_START 4
|
#define NEO_EVENT_START 4
|
||||||
#define NEO_SCT_OUTPUT 6
|
#define NEO_SCT_OUTPUT 6
|
||||||
#define NEO_STATE_IDLE 24
|
#define NEO_STATE_IDLE 8
|
||||||
|
#define NEO_ARRAY_SIZE (3 * NEOPIXEL_NUMBER)
|
||||||
|
|
||||||
volatile uint32_t _neopixel_array[NEOPIXEL_NUMBER] = {0x202020, 0x101010};
|
volatile uint32_t _neopixel_array[NEO_ARRAY_SIZE] = {0x10, 0x20, 0x30, 0x40, 0x50, 0x60};
|
||||||
volatile uint32_t _neopixel_count = 0;
|
volatile uint32_t _neopixel_count = 0;
|
||||||
|
|
||||||
void neopixel_int_handler(void){
|
void neopixel_int_handler(void){
|
||||||
uint32_t eventFlag = NEO_SCT->EVFLAG;
|
uint32_t eventFlag = NEO_SCT->EVFLAG;
|
||||||
if ((eventFlag == (1 << NEO_EVENT_NEXT)) && (_neopixel_count < (NEOPIXEL_NUMBER))) {
|
if ((eventFlag == (1 << NEO_EVENT_NEXT)) && (_neopixel_count < (NEO_ARRAY_SIZE))) {
|
||||||
NEO_SCT->EV[NEO_EVENT_FALL_0].STATE = 0xFFFFFF & (~_neopixel_array[_neopixel_count]);
|
NEO_SCT->EV[NEO_EVENT_FALL_0].STATE = 0xFF & (~_neopixel_array[_neopixel_count]);
|
||||||
_neopixel_count += 1;
|
_neopixel_count += 1;
|
||||||
|
NEO_SCT->EVFLAG = eventFlag;
|
||||||
|
NEO_SCT->CTRL &= ~(SCT_CTRL_HALT_L_MASK);
|
||||||
|
} else {
|
||||||
|
NEO_SCT->EVFLAG = eventFlag;
|
||||||
}
|
}
|
||||||
NEO_SCT->EVFLAG = eventFlag;
|
|
||||||
NEO_SCT->CTRL &= ~(SCT_CTRL_HALT_L_MASK);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SCT0_DriverIRQHandler(void){
|
void SCT0_DriverIRQHandler(void){
|
||||||
@@ -115,15 +118,13 @@ void SCT0_DriverIRQHandler(void){
|
|||||||
|
|
||||||
void neopixel_update(uint32_t pixel, uint32_t color){
|
void neopixel_update(uint32_t pixel, uint32_t color){
|
||||||
if (pixel < NEOPIXEL_NUMBER) {
|
if (pixel < NEOPIXEL_NUMBER) {
|
||||||
/*
|
|
||||||
uint32_t index = 3*pixel;
|
uint32_t index = 3*pixel;
|
||||||
_neopixel_array[index++] = color>>8; // green first
|
_neopixel_array[index++] = color>>8; // green first
|
||||||
_neopixel_array[index++] = color>>16; // red
|
_neopixel_array[index++] = color>>16; // red
|
||||||
_neopixel_array[index] = color; // blue
|
_neopixel_array[index] = color; // blue
|
||||||
*/
|
// _neopixel_array[pixel] = color;
|
||||||
_neopixel_array[pixel] = color;
|
|
||||||
_neopixel_count = 0;
|
_neopixel_count = 0;
|
||||||
NEO_SCT->EV[NEO_EVENT_FALL_0].STATE = 0xFFFFFF & (~_neopixel_array[0]);
|
NEO_SCT->EV[NEO_EVENT_FALL_0].STATE = 0xFF & (~_neopixel_array[0]);
|
||||||
NEO_SCT->CTRL &= ~(SCT_CTRL_HALT_L_MASK);
|
NEO_SCT->CTRL &= ~(SCT_CTRL_HALT_L_MASK);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -146,8 +147,8 @@ void neopixel_init(void) {
|
|||||||
NEO_SCT->EV[NEO_EVENT_START].STATE = (1 << NEO_STATE_IDLE);
|
NEO_SCT->EV[NEO_EVENT_START].STATE = (1 << NEO_STATE_IDLE);
|
||||||
NEO_SCT->EV[NEO_EVENT_START].CTRL = (
|
NEO_SCT->EV[NEO_EVENT_START].CTRL = (
|
||||||
kSCTIMER_OutputLowEvent | SCT_EV_CTRL_IOSEL(NEO_SCT_OUTPUT) |
|
kSCTIMER_OutputLowEvent | SCT_EV_CTRL_IOSEL(NEO_SCT_OUTPUT) |
|
||||||
SCT_EV_CTRL_STATELD(1) | SCT_EV_CTRL_STATEV(23));
|
SCT_EV_CTRL_STATELD(1) | SCT_EV_CTRL_STATEV(7));
|
||||||
NEO_SCT->EV[NEO_EVENT_RISE].STATE = 0xFFFFFE;
|
NEO_SCT->EV[NEO_EVENT_RISE].STATE = 0xFE;
|
||||||
NEO_SCT->EV[NEO_EVENT_RISE].CTRL = (
|
NEO_SCT->EV[NEO_EVENT_RISE].CTRL = (
|
||||||
kSCTIMER_MatchEventOnly | SCT_EV_CTRL_MATCHSEL(NEO_MATCH_PERIOD) |
|
kSCTIMER_MatchEventOnly | SCT_EV_CTRL_MATCHSEL(NEO_MATCH_PERIOD) |
|
||||||
SCT_EV_CTRL_STATELD(0) | SCT_EV_CTRL_STATEV(31));
|
SCT_EV_CTRL_STATELD(0) | SCT_EV_CTRL_STATEV(31));
|
||||||
@@ -155,7 +156,7 @@ void neopixel_init(void) {
|
|||||||
NEO_SCT->EV[NEO_EVENT_FALL_0].CTRL = (
|
NEO_SCT->EV[NEO_EVENT_FALL_0].CTRL = (
|
||||||
kSCTIMER_MatchEventOnly | SCT_EV_CTRL_MATCHSEL(NEO_MATCH_0) |
|
kSCTIMER_MatchEventOnly | SCT_EV_CTRL_MATCHSEL(NEO_MATCH_0) |
|
||||||
SCT_EV_CTRL_STATELD(0) | SCT_EV_CTRL_STATEV(31));
|
SCT_EV_CTRL_STATELD(0) | SCT_EV_CTRL_STATEV(31));
|
||||||
NEO_SCT->EV[NEO_EVENT_FALL_1].STATE = 0xFFFFFF;
|
NEO_SCT->EV[NEO_EVENT_FALL_1].STATE = 0xFF;
|
||||||
NEO_SCT->EV[NEO_EVENT_FALL_1].CTRL = (
|
NEO_SCT->EV[NEO_EVENT_FALL_1].CTRL = (
|
||||||
kSCTIMER_MatchEventOnly | SCT_EV_CTRL_MATCHSEL(NEO_MATCH_1) |
|
kSCTIMER_MatchEventOnly | SCT_EV_CTRL_MATCHSEL(NEO_MATCH_1) |
|
||||||
SCT_EV_CTRL_STATELD(0) | SCT_EV_CTRL_STATEV(31));
|
SCT_EV_CTRL_STATELD(0) | SCT_EV_CTRL_STATEV(31));
|
||||||
|
Reference in New Issue
Block a user