add main.cpp header comments describing expected operation
This commit is contained in:
parent
5f0a0feed1
commit
5b73fd93d3
|
@ -1,3 +1,29 @@
|
||||||
|
/*
|
||||||
|
|
||||||
|
hackspacecon wand firmware
|
||||||
|
|
||||||
|
initially written by true
|
||||||
|
rgb programs and further hacking by 000000widow
|
||||||
|
|
||||||
|
operation workflow:
|
||||||
|
- at poweron, set up GPIO and used peripherals, then go into standby mode.
|
||||||
|
- when button interrupt happens, wake up and process. if button is pushed,
|
||||||
|
prepare to run RGB program.
|
||||||
|
- enable the TCB0 periodic timer, which will interrupt every ~61Hz.
|
||||||
|
- initialize the rgb program. idle the CPU.
|
||||||
|
- timer will interrupt every ~61Hz and the program function will be called
|
||||||
|
again, until prog function returns 0.
|
||||||
|
- run the RGB program. if program returns 0, disable periodic timer, and
|
||||||
|
wait for the next button event to wake us up and run a program again.
|
||||||
|
|
||||||
|
todo:
|
||||||
|
- test the code
|
||||||
|
- actually process the RGB data in the sample rainbow puke program
|
||||||
|
- add more programs
|
||||||
|
- support incrementing or randomly selecting the next program on each button push
|
||||||
|
- run TCB0 in standby mode to save a little more power
|
||||||
|
*/
|
||||||
|
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include <avr/io.h>
|
#include <avr/io.h>
|
||||||
#include <avr/interrupt.h>
|
#include <avr/interrupt.h>
|
||||||
|
@ -43,11 +69,12 @@ void loop() {
|
||||||
case 1: { // just started running a program
|
case 1: { // just started running a program
|
||||||
digitalWrite(PIN_PA6, HIGH); // enable LED power supply,
|
digitalWrite(PIN_PA6, HIGH); // enable LED power supply,
|
||||||
delay(10); // wait a moment for LEDs to stabilize,
|
delay(10); // wait a moment for LEDs to stabilize,
|
||||||
enable_rgb_timer(); // then start the RGB program timebase.
|
|
||||||
|
|
||||||
rgb_program[0](1); // initialize the program,
|
rgb_program[0](1); // initialize the program,
|
||||||
run_rgb_program++; // and set to running mode.
|
run_rgb_program++; // and set to running mode.
|
||||||
|
|
||||||
|
enable_rgb_timer(); // then start the RGB program timebase.
|
||||||
|
|
||||||
// we can idle the CPU after running the program
|
// we can idle the CPU after running the program
|
||||||
SLPCTRL.CTRLA = SLPCTRL_SMODE_IDLE_gc | SLPCTRL_SEN_bm;
|
SLPCTRL.CTRLA = SLPCTRL_SMODE_IDLE_gc | SLPCTRL_SEN_bm;
|
||||||
__asm("sleep");
|
__asm("sleep");
|
||||||
|
|
Loading…
Reference in New Issue