diff --git a/hw/bsp/double_m33_express/double_m33_express.c b/hw/bsp/double_m33_express/double_m33_express.c index d0a097bf0..190f74066 100644 --- a/hw/bsp/double_m33_express/double_m33_express.c +++ b/hw/bsp/double_m33_express/double_m33_express.c @@ -93,19 +93,22 @@ void USB1_IRQHandler(void) #define NEO_EVENT_NEXT 3 #define NEO_EVENT_START 4 #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; void neopixel_int_handler(void){ uint32_t eventFlag = NEO_SCT->EVFLAG; - if ((eventFlag == (1 << NEO_EVENT_NEXT)) && (_neopixel_count < (NEOPIXEL_NUMBER))) { - NEO_SCT->EV[NEO_EVENT_FALL_0].STATE = 0xFFFFFF & (~_neopixel_array[_neopixel_count]); + if ((eventFlag == (1 << NEO_EVENT_NEXT)) && (_neopixel_count < (NEO_ARRAY_SIZE))) { + NEO_SCT->EV[NEO_EVENT_FALL_0].STATE = 0xFF & (~_neopixel_array[_neopixel_count]); _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){ @@ -115,15 +118,13 @@ void SCT0_DriverIRQHandler(void){ void neopixel_update(uint32_t pixel, uint32_t color){ if (pixel < NEOPIXEL_NUMBER) { -/* uint32_t index = 3*pixel; _neopixel_array[index++] = color>>8; // green first _neopixel_array[index++] = color>>16; // red _neopixel_array[index] = color; // blue -*/ - _neopixel_array[pixel] = color; +// _neopixel_array[pixel] = color; _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); } } @@ -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].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; + SCT_EV_CTRL_STATELD(1) | SCT_EV_CTRL_STATEV(7)); + NEO_SCT->EV[NEO_EVENT_RISE].STATE = 0xFE; 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)); @@ -155,7 +156,7 @@ void neopixel_init(void) { NEO_SCT->EV[NEO_EVENT_FALL_0].CTRL = ( kSCTIMER_MatchEventOnly | SCT_EV_CTRL_MATCHSEL(NEO_MATCH_0) | 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 = ( kSCTIMER_MatchEventOnly | SCT_EV_CTRL_MATCHSEL(NEO_MATCH_1) | SCT_EV_CTRL_STATELD(0) | SCT_EV_CTRL_STATEV(31));