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
	
	Block a user