Merge branch 'master' of eng-git.canterbury.ac.nz:mph/ucfk4

main
Michael Hayes 12 years ago
commit 9c34b36ec7

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

@ -0,0 +1,55 @@
# File: Makefile
# Author: M. P. Hayes, UCECE
# Date: 11 Sep 2010
# Descr: Makefile for beep1
CC = gcc
CFLAGS = -Wall -Wstrict-prototypes -Wextra -g -I../../drivers/test -I../../drivers -I../../utils
DEL = rm
# Default target.
all: beep1
# Compile: create object files from C source files.
beep1-test.o: beep1.c ../../drivers/button.h ../../drivers/led.h ../../drivers/test/avrtest.h ../../drivers/test/delay.h ../../drivers/test/pio.h ../../drivers/test/system.h ../../utils/pacer.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 $@
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 $@
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 $@
pacer-test.o: ../../utils/pacer.c ../../drivers/test/system.h ../../drivers/test/timer.h ../../utils/pacer.h
$(CC) -c $(CFLAGS) $< -o $@
# Link: create executable file from object files.
beep1: beep1-test.o button-test.o led-test.o mgetkey-test.o pio-test.o system-test.o timer-test.o pacer-test.o
$(CC) $(CFLAGS) $^ -o $@ -lrt
# Clean: delete derived files.
.PHONY: clean
clean:
-$(DEL) beep1 beep1-test.o button-test.o led-test.o mgetkey-test.o pio-test.o system-test.o timer-test.o pacer-test.o

@ -0,0 +1,36 @@
/** @file beep1.c
@author M.P. Hayes
@date 17 Sep 2013
*/
#include "system.h"
#include "pio.h"
#include "pacer.h"
/* Connect piezo tweeter to pins 6 and 8 of UCFK4 P1 connector
for push-pull operation. */
#define PIEZO1_PIO PIO_DEFINE (PORT_D, 4)
#define PIEZO2_PIO PIO_DEFINE (PORT_D, 6)
#define TONE_FREQUENCY 440
#define LOOP_RATE (TONE_FREQUENCY * 2)
int main (void)
{
system_init ();
pio_config_set (PIEZO1_PIO, PIO_OUTPUT_LOW);
pio_config_set (PIEZO2_PIO, PIO_OUTPUT_HIGH);
pacer_init (LOOP_RATE);
while (1)
{
pacer_wait ();
/* Generate annoying tone. */
pio_output_toggle (PIEZO1_PIO);
pio_output_toggle (PIEZO2_PIO);
}
return 0;
}

@ -0,0 +1,45 @@
# File: Makefile
# Author: M. P. Hayes, UCECE
# Date: 11 Sep 2010
# Descr: Makefile for squeak1 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,65 @@
# File: Makefile
# Author: M. P. Hayes, UCECE
# Date: 12 Sep 2010
# Descr: Makefile for beep2
# Definitions.
CC = avr-gcc
CFLAGS = -mmcu=atmega32u2 -Os -Wall -Wstrict-prototypes -Wextra -g -I../../drivers/avr -I../../drivers -I../../utils
OBJCOPY = avr-objcopy
SIZE = avr-size
DEL = rm
# Default target.
all: beep2.out
# Compile: create object files from C source files.
beep2.o: beep2.c ../../drivers/avr/delay.h ../../drivers/avr/pio.h ../../drivers/avr/system.h ../../drivers/button.h ../../drivers/led.h ../../utils/pacer.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 $@
led.o: ../../drivers/led.c ../../drivers/avr/pio.h ../../drivers/avr/system.h ../../drivers/led.h
$(CC) -c $(CFLAGS) $< -o $@
pacer.o: ../../utils/pacer.c ../../drivers/avr/system.h ../../drivers/avr/timer.h ../../utils/pacer.h
$(CC) -c $(CFLAGS) $< -o $@
# Link: create output file (executable) from object files.
beep2.out: beep2.o pio.o system.o timer.o button.o led.o pacer.o
$(CC) $(CFLAGS) $^ -o $@ -lm
$(SIZE) $@
# Create hex file for programming from executable file.
beep2.hex: beep2.out
$(OBJCOPY) -O ihex beep2.out beep2.hex
# Target: clean project.
.PHONY: clean
clean:
-$(DEL) *.o *.out *.hex
# Target: program project.
.PHONY: program
program: beep2.hex
dfu-programmer atmega32u2 erase; dfu-programmer atmega32u2 flash beep2.hex; dfu-programmer atmega32u2 start

@ -0,0 +1,55 @@
# File: Makefile
# Author: M. P. Hayes, UCECE
# Date: 11 Sep 2010
# Descr: Makefile for beep2
CC = gcc
CFLAGS = -Wall -Wstrict-prototypes -Wextra -g -I../../drivers/test -I../../drivers -I../../utils
DEL = rm
# Default target.
all: beep2
# Compile: create object files from C source files.
beep2-test.o: beep2.c ../../drivers/button.h ../../drivers/led.h ../../drivers/test/avrtest.h ../../drivers/test/delay.h ../../drivers/test/pio.h ../../drivers/test/system.h ../../utils/pacer.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 $@
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 $@
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 $@
pacer-test.o: ../../utils/pacer.c ../../drivers/test/system.h ../../drivers/test/timer.h ../../utils/pacer.h
$(CC) -c $(CFLAGS) $< -o $@
# Link: create executable file from object files.
beep2: beep2-test.o button-test.o led-test.o mgetkey-test.o pio-test.o system-test.o timer-test.o pacer-test.o
$(CC) $(CFLAGS) $^ -o $@ -lrt
# Clean: delete derived files.
.PHONY: clean
clean:
-$(DEL) beep2 beep2-test.o button-test.o led-test.o mgetkey-test.o pio-test.o system-test.o timer-test.o pacer-test.o

@ -0,0 +1,51 @@
/** @file beep2.c
@author M.P. Hayes
@date 17 Sep 2013
*/
#include "system.h"
#include "pio.h"
#include "pacer.h"
#include "button.h"
/* Connect piezo tweeter to pins 6 and 8 of UCFK4 P1 connector
for push-pull operation. */
#define PIEZO1_PIO PIO_DEFINE (PORT_D, 4)
#define PIEZO2_PIO PIO_DEFINE (PORT_D, 6)
#define TEST_PIO PIO_DEFINE (PORT_D, 3)
#define TONE_FREQUENCY 440
#define LOOP_RATE 10000
int main (void)
{
int tick = 0;
system_init ();
pio_config_set (PIEZO1_PIO, PIO_OUTPUT_LOW);
pio_config_set (PIEZO2_PIO, PIO_OUTPUT_HIGH);
pio_config_set (TEST_PIO, PIO_OUTPUT_HIGH);
pacer_init (LOOP_RATE);
while (1)
{
pacer_wait ();
pio_output_toggle (TEST_PIO);
tick = tick + 1;
if (tick >= (LOOP_RATE / (TONE_FREQUENCY * 2)))
{
tick = 0;
/* Generate annoying tone. */
pio_output_toggle (PIEZO1_PIO);
pio_output_toggle (PIEZO2_PIO);
}
}
return 0;
}

@ -0,0 +1,45 @@
# File: Makefile
# Author: M. P. Hayes, UCECE
# Date: 11 Sep 2010
# Descr: Makefile for squeak1 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,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 @@
"*8<G///>3<D#//A#G///>2 ///D+///D+///D+///D#+//A#F#///D#//A#G/// ///"

@ -0,0 +1,178 @@
/** @file jukebox1.c
@author M.P. Hayes
@date 30 Aug 2013
@note The fidelity of the notes is poor due to jitter
produced by the display task.
@note The tunes are stored in RAM. Adding more tunes can cause
a subtle memory overflow and the program will fail. A solution
would be to store the tunes in flash memory but this requires
some jiggery-pokery due to the Harvard architecture of the AVR.
*/
#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 pins 6 and 8 of UCFK4 P1 connector
for push-pull operation. */
#define PIEZO1_PIO PIO_DEFINE (PORT_D, 4)
#define PIEZO2_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 "are_friends_electric.mmel"
};
static const char tune2[] =
{
#include "imperial_march.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 (PIEZO1_PIO, PIO_OUTPUT_LOW);
pio_config_set (PIEZO2_PIO, PIO_OUTPUT_HIGH);
}
static void tweeter_task (__unused__ void *data)
{
uint8_t state;
state = tweeter_update (tweeter);
pio_output_set (PIEZO1_PIO, state);
pio_output_set (PIEZO2_PIO, !state);
}
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_SOUTH))
mmelody_play (melody, tune2);
}
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"

@ -37,7 +37,7 @@ static tweeter_obj_t tweeter_info;
static const char tune1[] =
{
//#include "mysterex.mmel"
#include "electric.mmel"
#include "are_friends_electric.mmel"
" >"
};

@ -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#"

@ -14,8 +14,10 @@
#include "../fonts/font3x5_1.h"
/* Connect piezo tweeter to outermost pins of UCFK4 P1 connector. */
#define PIEZO_PIO PIO_DEFINE (PORT_D, 6)
/* Connect piezo tweeter to pins 6 and 8 of UCFK4 P1 connector
for push-pull operation. This gives increased volume. */
#define PIEZO1_PIO PIO_DEFINE (PORT_D, 4)
#define PIEZO2_PIO PIO_DEFINE (PORT_D, 6)
/* Define polling rates in Hz. */
#define TWEETER_TASK_RATE 20000
@ -41,7 +43,7 @@ static char *note_names[] = {"C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A
static const char tune1[] =
{
//#include "mysterex.mmel"
#include "electric.mmel"
#include "are_friends_electric.mmel"
" >"
};
@ -76,13 +78,18 @@ static void tweeter_task_init (void)
{
tweeter = tweeter_init (&tweeter_info, TWEETER_TASK_RATE, scale_table);
pio_config_set (PIEZO_PIO, PIO_OUTPUT_LOW);
pio_config_set (PIEZO1_PIO, PIO_OUTPUT_LOW);
pio_config_set (PIEZO2_PIO, PIO_OUTPUT_HIGH);
}
static void tweeter_task (__unused__ void *data)
{
pio_output_set (PIEZO_PIO, tweeter_update (tweeter));
uint8_t state;
state = tweeter_update (tweeter);
pio_output_set (PIEZO1_PIO, state);
pio_output_set (PIEZO2_PIO, !state);
}

@ -97,6 +97,44 @@ typedef enum pio_config_enum
} pio_config_t;
/** Define the pins. */
#define PA0_PIO PIO_DEFINE(PORT_A, 0)
#define PA1_PIO PIO_DEFINE(PORT_A, 1)
#define PA2_PIO PIO_DEFINE(PORT_A, 2)
#define PA3_PIO PIO_DEFINE(PORT_A, 3)
#define PA4_PIO PIO_DEFINE(PORT_A, 4)
#define PA5_PIO PIO_DEFINE(PORT_A, 5)
#define PA6_PIO PIO_DEFINE(PORT_A, 6)
#define PA7_PIO PIO_DEFINE(PORT_A, 7)
#define PB0_PIO PIO_DEFINE(PORT_B, 0)
#define PB1_PIO PIO_DEFINE(PORT_B, 1)
#define PB2_PIO PIO_DEFINE(PORT_B, 2)
#define PB3_PIO PIO_DEFINE(PORT_B, 3)
#define PB4_PIO PIO_DEFINE(PORT_B, 4)
#define PB5_PIO PIO_DEFINE(PORT_B, 5)
#define PB6_PIO PIO_DEFINE(PORT_B, 6)
#define PB7_PIO PIO_DEFINE(PORT_B, 7)
#define PC0_PIO PIO_DEFINE(PORT_C, 0)
#define PC1_PIO PIO_DEFINE(PORT_C, 1)
#define PC2_PIO PIO_DEFINE(PORT_C, 2)
#define PC3_PIO PIO_DEFINE(PORT_C, 3)
#define PC4_PIO PIO_DEFINE(PORT_C, 4)
#define PC5_PIO PIO_DEFINE(PORT_C, 5)
#define PC6_PIO PIO_DEFINE(PORT_C, 6)
#define PC7_PIO PIO_DEFINE(PORT_C, 7)
#define PD0_PIO PIO_DEFINE(PORT_D, 0)
#define PD1_PIO PIO_DEFINE(PORT_D, 1)
#define PD2_PIO PIO_DEFINE(PORT_D, 2)
#define PD3_PIO PIO_DEFINE(PORT_D, 3)
#define PD4_PIO PIO_DEFINE(PORT_D, 4)
#define PD5_PIO PIO_DEFINE(PORT_D, 5)
#define PD6_PIO PIO_DEFINE(PORT_D, 6)
#define PD7_PIO PIO_DEFINE(PORT_D, 7)
#ifdef DEBUG
/* Define PIO as a unique integer. */

@ -51,6 +51,7 @@ typedef uint8_t bool;
/* Navswitch. */
#define NAVSWITCH_PUSH_PIO LEDMAT_COL3_PIO
#define NAVSWITCH_DOWN_PIO NAVSWITCH_PUSH_PIO
#define NAVSWITCH_EAST_PIO LEDMAT_COL1_PIO
#define NAVSWITCH_WEST_PIO LEDMAT_COL2_PIO
#define NAVSWITCH_NORTH_PIO LEDMAT_COL4_PIO

@ -13,7 +13,7 @@ APPDIRS = $(filter-out ../apps/README ../Makefile, $(wildcard ../apps/*/ ))
DOCDIRS = $(addsuffix /doc, $(APPDIRS))
# Don't link against test-scaffold if directly accessing harware
FOO = $(shell grep -l "\<avr/io.h\>" ../lab*/*/*.c)
FOO = $(shell grep -l "\<avr/io.h\>" ../*/*/*.c)
DUDDIRS = $(foreach filename, $(FOO), $(dir $(filename)))
TESTDIRS = $(filter-out $(DUDDIRS), $(APPDIRS))

@ -237,18 +237,25 @@ def makefile_print (options, template, maincfilename, filedeps,
print text
def maincfilename_find (dirname):
def subprocess_command(command):
p = subprocess.Popen (['grep -l "main[ ]*(" ' + dirname + '/*.c'],
shell = True, stdin = subprocess.PIPE,
stdout = subprocess.PIPE,
close_fds = True)
p = subprocess.Popen (command, shell=True,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
close_fds=True)
(child_stdout, child_stdin) = (p.stdout, p.stdin)
child_stdin.close ()
files = child_stdout.read ()
response = child_stdout.read ()
child_stdout.close ()
return response
def maincfilename_find (dirname):
files = subprocess_command('grep -l "main[ ]*(" ' + dirname + '/*.c')
filelist = files.strip ().split (' ')
if not filelist:
return None
@ -265,7 +272,14 @@ def functions_find (filepath, functiondeps, functions, options):
print >> sys.stderr, command
os.system (command)
rtlfilename = os.path.abspath (os.path.basename (filepath)) + '.012t.cfg'
version = subprocess_command(options.compile + ' -dumpversion')
version_parts = version.split('.')
if version_parts[0] >= '5':
ext = '.014t.cfg'
else:
ext = '.012t.cfg'
rtlfilename = os.path.abspath (os.path.basename (filepath)) + ext
if not os.path.exists (rtlfilename):
return

Loading…
Cancel
Save