Add squeak4

main
Michael Hayes 15 years ago
parent 0373ac2a1d
commit 662d0781d9

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

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

@ -0,0 +1,42 @@
# File: Makefile
# Author: M. P. Hayes, UCECE
# Date: 11 Sep 2010
# Descr: Makefile for squeak2 docs
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 --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,162 @@
/** @file squeak4.c
@author M.P. Hayes
@date 30 Aug 2011
*/
#include "system.h"
#include "button.h"
#include "led.h"
#include "pio.h"
#include "task.h"
#include "tweeter.h"
#include "squeaker.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 100
#define BUTTON_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 "mysterex.mmel"
#include "electric.mmel"
" >"
};
void
note_play (tweeter_t tweeter, tweeter_note_t note, uint8_t velocity)
{
tinygl_clear ();
if (note != 0)
tinygl_draw_string (note_names[note % 12], tinygl_point (0, 0), 1);
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);
mmelody_play (melody, tune1);
}
static void tune_task (__unused__ void *data)
{
mmelody_update (melody);
}
static void button_task_init (void)
{
button_init ();
}
static void button_task (__unused__ void *data)
{
button_update ();
if (button_push_event_p (BUTTON1))
{
if (mmelody_active_p (melody))
mmelody_play (melody, 0);
else
mmelody_play (melody, tune1);
}
}
static void display_task_init (void)
{
tinygl_init (DISPLAY_TASK_RATE);
tinygl_font_set (&font3x5_1);
tinygl_text_mode_set (TINYGL_TEXT_MODE_ROTATE_STEP);
}
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 = button_task, .period = TASK_RATE / BUTTON_TASK_RATE, .data = 0},
};
system_init ();
led_flash_task_init ();
tweeter_task_init ();
tune_task_init ();
display_task_init ();
button_task_init ();
task_schedule (tasks, 4);
return 0;
}
Loading…
Cancel
Save