fix not sending last frame to LEDs
also, clarified comments a bit
This commit is contained in:
parent
d8d2677f54
commit
8a0430f137
@ -10,6 +10,9 @@
|
|||||||
|
|
||||||
the resulting binary at time of porting takes an additional
|
the resulting binary at time of porting takes an additional
|
||||||
531 bytes of flash and 8 bytes of SRAM. I do not know why.
|
531 bytes of flash and 8 bytes of SRAM. I do not know why.
|
||||||
|
but I suspect it is due to the inability to get -flto working
|
||||||
|
properly on libraries. oh well; can figure it out later.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
operation workflow:
|
operation workflow:
|
||||||
@ -17,21 +20,21 @@
|
|||||||
- at initial reset (battery inserted), set up GPIO and peripherals. this
|
- at initial reset (battery inserted), set up GPIO and peripherals. this
|
||||||
includes setting up button wake interrupt. sleep MCU into standby mode.
|
includes setting up button wake interrupt. sleep MCU into standby mode.
|
||||||
|
|
||||||
- when button state changes, MCU will wake up and process the interrupt.
|
- when button is pushed (pin goes low), MCU will wake up and process the
|
||||||
if button is pushed (btn gpio is low), prepare to run next RGB program.
|
button interrupt. prepare to run next RGB program.
|
||||||
|
|
||||||
- rgb program setup involves turning on power to the LEDs and enabling
|
- rgb program setup involves turning on power to the LEDs and enabling
|
||||||
TCB0 periodic timer to interrupt every ~61Hz. this timer interrupt
|
TCB0 periodic timer to interrupt every ~61Hz. (this timer interrupt
|
||||||
does not handle the rgb program, but will wake the CPU which resumes
|
does not handle the rgb program directly, but will wake the CPU which
|
||||||
processing in the loop() function.
|
resumes processing in the loop() function.
|
||||||
|
|
||||||
- call the rgb program with the `init` parameter set to 1. idle the CPU.
|
- call the rgb program with the `init` parameter set to 1. idle the CPU.
|
||||||
|
|
||||||
- rgb prog timer will interrupt every ~61Hz. this will wake the CPU and
|
- rgb prog timer will interrupt every ~61Hz. this will wake the CPU and
|
||||||
send the previously rendered LED data, then call the rgb prog function.
|
send the previously rendered LED data, then call the rgb prog function.
|
||||||
afterward, the CPU idles. process repeats until the rgb prog fn returns 0.
|
afterward, the CPU idles. process repeats until the rgb program returns 0.
|
||||||
|
|
||||||
- every time the rgb program is run, the rgb data to send is updated.
|
- every time the rgb program is run, the rgb data to send can be updated.
|
||||||
the data is not actually sent until next wakeup in less than 16.4ms.
|
the data is not actually sent until next wakeup in less than 16.4ms.
|
||||||
this allows the functions to have variable processing time, but the
|
this allows the functions to have variable processing time, but the
|
||||||
output to have a consistent ~61Hz (~16.4ms) timing.
|
output to have a consistent ~61Hz (~16.4ms) timing.
|
||||||
@ -62,7 +65,8 @@
|
|||||||
enum {
|
enum {
|
||||||
RGB_IDLE,
|
RGB_IDLE,
|
||||||
RGB_INIT,
|
RGB_INIT,
|
||||||
RGB_RUNNING
|
RGB_RUNNING,
|
||||||
|
RGB_STOPPING
|
||||||
};
|
};
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
@ -140,7 +144,7 @@ void loop() {
|
|||||||
rgb.show(); // send updates to the led
|
rgb.show(); // send updates to the led
|
||||||
// then process the next program frame
|
// then process the next program frame
|
||||||
if (!rgb_program[rgbprog_idx](PROG_RUN)) {
|
if (!rgb_program[rgbprog_idx](PROG_RUN)) {
|
||||||
run_rgbprog = RGB_IDLE; // until the program says it's done
|
run_rgbprog = RGB_STOPPING; // until the program says it's done
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -149,6 +153,15 @@ void loop() {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case RGB_STOPPING: {
|
||||||
|
rgb.show(); // send final updates to the led
|
||||||
|
run_rgbprog = RGB_IDLE;
|
||||||
|
|
||||||
|
idle_cpu(); // we can idle CPU after running the program
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
default: { // no longer running a program
|
default: { // no longer running a program
|
||||||
disable_rgb_timer(); // disable RGB program timer,
|
disable_rgb_timer(); // disable RGB program timer,
|
||||||
digitalWrite(PIN_LED_PWRENA, LOW); // disable LED power supply,
|
digitalWrite(PIN_LED_PWRENA, LOW); // disable LED power supply,
|
||||||
|
Loading…
Reference in New Issue
Block a user