Add jukebox1

main
Michael Hayes 12 years ago
parent b8d8dc6884
commit 32aa46a0e8

@ -0,0 +1,86 @@
# File: Makefile
# Author: M. P. Hayes, UCECE
# Date: 12 Sep 2010
# Descr: Makefile for jukebox1
# Definitions.
CC = avr-gcc
CFLAGS = -mmcu=atmega32u2 -Os -Wall -Wstrict-prototypes -Wextra -g -I../../drivers/avr -I../../extra -I../../drivers -I../../fonts -I../../utils
OBJCOPY = avr-objcopy
SIZE = avr-size
DEL = rm
# Default target.
all: jukebox1.out
# Compile: create object files from C source files.
jukebox1.o: jukebox1.c ../../drivers/avr/pio.h ../../drivers/avr/system.h ../../drivers/avr/timer.h ../../drivers/display.h ../../drivers/led.h ../../drivers/navswitch.h ../../extra/mmelody.h ../../extra/ticker.h ../../extra/tweeter.h ../../fonts/font3x5_1.h ../../utils/font.h ../../utils/task.h ../../utils/tinygl.h
$(CC) -c $(CFLAGS) $< -o $@
pio.o: ../../drivers/avr/pio.c ../../drivers/avr/pio.h ../../drivers/avr/system.h
$(CC) -c $(CFLAGS) $< -o $@
system.o: ../../drivers/avr/system.c ../../drivers/avr/system.h
$(CC) -c $(CFLAGS) $< -o $@
timer.o: ../../drivers/avr/timer.c ../../drivers/avr/system.h ../../drivers/avr/timer.h
$(CC) -c $(CFLAGS) $< -o $@
display.o: ../../drivers/display.c ../../drivers/avr/system.h ../../drivers/display.h ../../drivers/ledmat.h
$(CC) -c $(CFLAGS) $< -o $@
led.o: ../../drivers/led.c ../../drivers/avr/pio.h ../../drivers/avr/system.h ../../drivers/led.h
$(CC) -c $(CFLAGS) $< -o $@
ledmat.o: ../../drivers/ledmat.c ../../drivers/avr/pio.h ../../drivers/avr/system.h ../../drivers/ledmat.h
$(CC) -c $(CFLAGS) $< -o $@
navswitch.o: ../../drivers/navswitch.c ../../drivers/avr/delay.h ../../drivers/avr/pio.h ../../drivers/avr/system.h ../../drivers/navswitch.h
$(CC) -c $(CFLAGS) $< -o $@
mmelody.o: ../../extra/mmelody.c ../../drivers/avr/system.h ../../extra/mmelody.h
$(CC) -c $(CFLAGS) $< -o $@
ticker.o: ../../extra/ticker.c
$(CC) -c $(CFLAGS) $< -o $@
tweeter.o: ../../extra/tweeter.c ../../drivers/avr/system.h ../../extra/ticker.h ../../extra/tweeter.h
$(CC) -c $(CFLAGS) $< -o $@
font.o: ../../utils/font.c ../../drivers/avr/system.h ../../utils/font.h
$(CC) -c $(CFLAGS) $< -o $@
task.o: ../../utils/task.c ../../drivers/avr/system.h ../../drivers/avr/timer.h ../../utils/task.h
$(CC) -c $(CFLAGS) $< -o $@
tinygl.o: ../../utils/tinygl.c ../../drivers/avr/system.h ../../drivers/display.h ../../utils/font.h ../../utils/tinygl.h
$(CC) -c $(CFLAGS) $< -o $@
# Link: create output file (executable) from object files.
jukebox1.out: jukebox1.o pio.o system.o timer.o display.o led.o ledmat.o navswitch.o mmelody.o ticker.o tweeter.o font.o task.o tinygl.o
$(CC) $(CFLAGS) $^ -o $@ -lm
$(SIZE) $@
# Create hex file for programming from executable file.
jukebox1.hex: jukebox1.out
$(OBJCOPY) -O ihex jukebox1.out jukebox1.hex
# Target: clean project.
.PHONY: clean
clean:
-$(DEL) *.o *.out *.hex
# Target: program project.
.PHONY: program
program: jukebox1.hex
dfu-programmer atmega32u2 erase; dfu-programmer atmega32u2 flash jukebox1.hex; dfu-programmer atmega32u2 start

@ -0,0 +1,76 @@
# File: Makefile
# Author: M. P. Hayes, UCECE
# Date: 11 Sep 2010
# Descr: Makefile for jukebox1
CC = gcc
CFLAGS = -Wall -Wstrict-prototypes -Wextra -g -I../../drivers/test -I../../drivers -I../../extra -I../../fonts -I../../utils
DEL = rm
# Default target.
all: jukebox1
# Compile: create object files from C source files.
jukebox1-test.o: jukebox1.c ../../drivers/display.h ../../drivers/led.h ../../drivers/navswitch.h ../../drivers/test/avrtest.h ../../drivers/test/pio.h ../../drivers/test/system.h ../../drivers/test/timer.h ../../extra/mmelody.h ../../extra/ticker.h ../../extra/tweeter.h ../../fonts/font3x5_1.h ../../utils/font.h ../../utils/task.h ../../utils/tinygl.h
$(CC) -c $(CFLAGS) $< -o $@
display-test.o: ../../drivers/display.c ../../drivers/display.h ../../drivers/ledmat.h ../../drivers/test/system.h
$(CC) -c $(CFLAGS) $< -o $@
led-test.o: ../../drivers/led.c ../../drivers/led.h ../../drivers/test/avrtest.h ../../drivers/test/pio.h ../../drivers/test/system.h
$(CC) -c $(CFLAGS) $< -o $@
ledmat-test.o: ../../drivers/ledmat.c ../../drivers/ledmat.h ../../drivers/test/avrtest.h ../../drivers/test/pio.h ../../drivers/test/system.h
$(CC) -c $(CFLAGS) $< -o $@
navswitch-test.o: ../../drivers/navswitch.c ../../drivers/navswitch.h ../../drivers/test/avrtest.h ../../drivers/test/delay.h ../../drivers/test/pio.h ../../drivers/test/system.h
$(CC) -c $(CFLAGS) $< -o $@
mgetkey-test.o: ../../drivers/test/mgetkey.c ../../drivers/test/mgetkey.h
$(CC) -c $(CFLAGS) $< -o $@
pio-test.o: ../../drivers/test/pio.c ../../drivers/test/avrtest.h ../../drivers/test/pio.h ../../drivers/test/system.h
$(CC) -c $(CFLAGS) $< -o $@
system-test.o: ../../drivers/test/system.c ../../drivers/test/avrtest.h ../../drivers/test/mgetkey.h ../../drivers/test/pio.h ../../drivers/test/system.h
$(CC) -c $(CFLAGS) $< -o $@
timer-test.o: ../../drivers/test/timer.c ../../drivers/test/system.h ../../drivers/test/timer.h
$(CC) -c $(CFLAGS) $< -o $@
mmelody-test.o: ../../extra/mmelody.c ../../drivers/test/system.h ../../extra/mmelody.h
$(CC) -c $(CFLAGS) $< -o $@
ticker-test.o: ../../extra/ticker.c
$(CC) -c $(CFLAGS) $< -o $@
tweeter-test.o: ../../extra/tweeter.c ../../drivers/test/system.h ../../extra/ticker.h ../../extra/tweeter.h
$(CC) -c $(CFLAGS) $< -o $@
font-test.o: ../../utils/font.c ../../drivers/test/system.h ../../utils/font.h
$(CC) -c $(CFLAGS) $< -o $@
task-test.o: ../../utils/task.c ../../drivers/test/system.h ../../drivers/test/timer.h ../../utils/task.h
$(CC) -c $(CFLAGS) $< -o $@
tinygl-test.o: ../../utils/tinygl.c ../../drivers/display.h ../../drivers/test/system.h ../../utils/font.h ../../utils/tinygl.h
$(CC) -c $(CFLAGS) $< -o $@
# Link: create executable file from object files.
jukebox1: jukebox1-test.o display-test.o led-test.o ledmat-test.o navswitch-test.o mgetkey-test.o pio-test.o system-test.o timer-test.o mmelody-test.o ticker-test.o tweeter-test.o font-test.o task-test.o tinygl-test.o
$(CC) $(CFLAGS) $^ -o $@ -lrt
# Clean: delete derived files.
.PHONY: clean
clean:
-$(DEL) jukebox1 jukebox1-test.o display-test.o led-test.o ledmat-test.o navswitch-test.o mgetkey-test.o pio-test.o system-test.o timer-test.o mmelody-test.o ticker-test.o tweeter-test.o font-test.o task-test.o tinygl-test.o

@ -0,0 +1,45 @@
# File: Makefile
# Author: M. P. Hayes, UCECE
# Date: 11 Sep 2010
# Descr: Makefile for squeak4 docs
# The scripts used to make the graphs require the program dot; this
# is part of the graphviz package.
DEL = rm
all: file_dependencies.pdf module_dependencies.pdf makefile_dependencies.pdf build_dependencies.pdf callgraph.pdf
file_dependencies.pdf: files.d
../../../etc/graphdeps.py $< --out $@
module_dependencies.pdf: modules.d
../../../etc/graphdeps.py $< --modules --rotate --out $@
makefile_dependencies.pdf: ../Makefile
../../../etc/graphdeps.py $< --out $@
build_dependencies.pdf: ../Makefile
../../../etc/graphdeps.py $< --out $@ --showops
callgraph.pdf: callgraph.d
../../../etc/graphdeps.py --calls --modules $< --out $@ --showops
files.d: ../Makefile
(cd ..; ../../etc/makemake.py --relpath --files . . ../../drivers ../../drivers/avr ../../utils ../../extra --exclude system.h > doc/files.d)
modules.d: ../Makefile
(cd ..; ../../etc/makemake.py --relpath --modules . . ../../drivers ../../drivers/avr ../../utils ../../extra --exclude system > doc/modules.d)
callgraph.d: ../Makefile
(cd ..; ../../etc/makemake.py --cc="avr-gcc" --cflags="-Os -mmcu=atmega32u2" --relpath --calls . . ../../drivers ../../drivers/avr ../../utils ../../extra --exclude system.h > doc/callgraph.d)
# Clean: delete derived files.
.PHONY: clean
clean:
-$(DEL) *.d *.pdf

@ -0,0 +1,16 @@
Running make in this directory will generate a number of PDF graphs.
In the callgraph, the arrows means "calls". In the dependency graphs,
the arrows means "requires" (or "depends upon").
callgraph.pdf This shows the callgraph, i.e., what functions each
function in the program calls.
module_dependencies.pdf This shows the dependencies between the modules.
file_dependencies.pdf This shows the dependencies between the files.
makefile_dependencies.pdf This shows the dependencies required by make when
building the program.
build_dependencies.pdf This is like makefile_dependencies.pdf but shows
the operations performed to generate the new file.
callgraph.d This shows the callgraph in text format.
files.d This shows the file dependencies in text format.
modules.d This shows the module dependencies in text format.

@ -0,0 +1 @@
"<C3CG/A#2A#F3/CCG/A#2A#A#4E>6<F2FE3CF2FF3CF2FG3CF2FA3C>2<C3CG/A#2A#F3/CCG/A#2A#A#4E>6<F2FE3CF2FF3CF2FG3CF2FA3C>2<G2D3FD/DAC4A3/FC4ECC3GC4B3>6<G3D4GF/DFE/CCB3C4B3C4B3>3GD4GF/DFE/<C3CG/A#2A#F3/CCG/A#2A#A#4E>6<F2FE3CF2FF3CF2FG3CF2FA3C>2<C3CG/A#2A#F3/CCG/A#2A#A#4E>6<F2FE3CF2FF3CF2FG3CF2FA3C>2CCG/A#2A#F3/CCG/A#2A#A#4E<F2FE3CF2FF3CF2FG3CF2FA3C>2<G2D3FD/DAC4A3/FC4ECC3GC4B3>6<G3D4GFD/FE/CCB3C4B3C4B3>2GD4GFDFE<C3CG/A#2A#F3/CCG/A#2A#A#4E>3C3GA#2F3CGA#2A#3AA#AFD#"

@ -0,0 +1 @@
"*8<G///>3<D#//A#G///>2 ///D+///D+///D+///D#+//A#F#///D#//A#G/// ///"

@ -0,0 +1,171 @@
/** @file squeak4.c
@author M.P. Hayes
@date 30 Aug 2011
*/
#include "system.h"
#include "navswitch.h"
#include "led.h"
#include "pio.h"
#include "task.h"
#include "tweeter.h"
#include "mmelody.h"
#include "tinygl.h"
#include "../fonts/font3x5_1.h"
/* Connect piezo tweeter to outermost pins of UCFK4 P1 connector. */
#define PIEZO_PIO PIO_DEFINE (PORT_D, 6)
/* Define polling rates in Hz. */
#define TWEETER_TASK_RATE 20000
#define TUNE_TASK_RATE 200
#define NAVSWITCH_TASK_RATE 10
#define TUNE_BPM_RATE 200
#define LED_TASK_RATE (TUNE_BPM_RATE / 60.0)
#define DISPLAY_TASK_RATE 200
static tweeter_scale_t scale_table[] = TWEETER_SCALE_TABLE (TWEETER_TASK_RATE);
static tweeter_t tweeter;
static mmelody_t melody;
static mmelody_obj_t melody_info;
static tweeter_obj_t tweeter_info;
static char *note_names[] = {"C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"};
static const char tune1[] =
{
#include "electric.mmel"
};
static const char tune2[] =
{
#include "temple_of_love.mmel"
};
static const char tune3[] =
{
#include "electric.mmel"
};
void
note_play (tweeter_t tweeter, tweeter_note_t note, uint8_t velocity)
{
tinygl_clear ();
if (note != 0 && velocity != 0)
tinygl_text (note_names[note % 12]);
tweeter_note_play (tweeter, note, velocity);
}
static void led_flash_task_init (void)
{
led_init ();
}
static void led_flash_task (__unused__ void *data)
{
static uint8_t state = 0;
led_set (LED1, state);
state = !state;
}
static void tweeter_task_init (void)
{
tweeter = tweeter_init (&tweeter_info, TWEETER_TASK_RATE, scale_table);
pio_config_set (PIEZO_PIO, PIO_OUTPUT_LOW);
}
static void tweeter_task (__unused__ void *data)
{
pio_output_set (PIEZO_PIO, tweeter_update (tweeter));
}
static void tune_task_init (void)
{
melody = mmelody_init (&melody_info, TUNE_TASK_RATE,
(mmelody_callback_t) note_play, tweeter);
mmelody_speed_set (melody, TUNE_BPM_RATE);
}
static void tune_task (__unused__ void *data)
{
mmelody_update (melody);
}
static void navswitch_task_init (void)
{
navswitch_init ();
}
static void navswitch_task (__unused__ void *data)
{
navswitch_update ();
if (navswitch_push_event_p (NAVSWITCH_PUSH))
{
mmelody_play (melody, 0);
}
if (navswitch_push_event_p (NAVSWITCH_NORTH))
mmelody_play (melody, tune1);
if (navswitch_push_event_p (NAVSWITCH_EAST))
mmelody_play (melody, tune2);
if (navswitch_push_event_p (NAVSWITCH_SOUTH))
mmelody_play (melody, tune3);
}
static void display_task_init (void)
{
tinygl_init (DISPLAY_TASK_RATE);
tinygl_font_set (&font3x5_1);
tinygl_text_mode_set (TINYGL_TEXT_MODE_STEP);
tinygl_text_dir_set (TINYGL_TEXT_DIR_ROTATE);
}
static void display_task (__unused__ void *data)
{
tinygl_update ();
}
int main (void)
{
task_t tasks[] =
{
{.func = tweeter_task, .period = TASK_RATE / TWEETER_TASK_RATE, .data = 0},
{.func = led_flash_task, .period = TASK_RATE / LED_TASK_RATE, .data = 0},
{.func = tune_task, .period = TASK_RATE / TUNE_TASK_RATE, .data = 0},
{.func = display_task, .period = TASK_RATE / DISPLAY_TASK_RATE, .data = 0},
{.func = navswitch_task, .period = TASK_RATE / NAVSWITCH_TASK_RATE, .data = 0},
};
system_init ();
led_flash_task_init ();
tweeter_task_init ();
tune_task_init ();
display_task_init ();
navswitch_task_init ();
task_schedule (tasks, ARRAY_SIZE (tasks));
return 0;
}

@ -0,0 +1,3 @@
/* E2, D4 */
"*8E3EBBE2EB3BDDAAD4DA3AA2AE3EAABBC4CB3BAAGGEEBBE2EB3BDDAAD4DA3AA2AE3EAABBC4CB3BAABB"
Loading…
Cancel
Save