trivial avr-gcc hello skeleton using qmsk-arduino: debug timer
authorTero Marttila <terom@paivola.fi>
Wed, 24 Sep 2014 22:41:46 +0300
changeset 0 cae83b7bfcf4
child 1 dc293f9aa873
trivial avr-gcc hello skeleton using qmsk-arduino: debug timer
.hgignore
Makefile
README
src/hello.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.hgignore	Wed Sep 24 22:41:46 2014 +0300
@@ -0,0 +1,14 @@
+syntax: glob
+
+.*.swo
+.*.swp
+
+build/
+
+*.hex
+*.s.*
+
+*.pyc
+
+docs/
+opt/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Makefile	Wed Sep 24 22:41:46 2014 +0300
@@ -0,0 +1,84 @@
+QMSK_ARDUINO = qmsk
+
+PROG = hello
+
+ELF = build/src/$(PROG).elf
+HEX = build/src/$(PROG).hex
+
+build/src/hello.elf: build/src/hello.o \
+	build/qmsk/src/timer.o
+
+##
+all: $(HEX)
+
+build:
+	mkdir -p build/src build/qmsk/src
+
+clean:
+	rm -rf build/
+
+## Compiler
+MCU = atmega328p
+
+# CPU clock frequency
+CPU = 16000000
+STD = c99
+
+CC = avr-gcc
+CPPFLAGS = -DF_CPU=$(CPU)UL -I$(QMSK_ARDUINO)/include
+CFLAGS = -mmcu=$(MCU) -std=$(STD) -Os -g
+LDFLAGS = -mmcu=$(MCU)
+LDLIBS = -lc
+
+build/%.o: %.c
+	$(CC) -c $(CPPFLAGS) $(CFLAGS) -o $@ $<
+	$(CC) -MM $(CPPFLAGS) -MT $@ -MF build/$*.d $<
+
+build/%.elf:
+	$(CC) $(LDFLAGS) $+ -o $@ $(LDLIBS)
+
+# existing .d files for rebuilding existing .o's
+-include $(wildcard build/*/*.d)
+
+dump: $(ELF)
+	avr-objdump -d $(ELF)
+
+## Assembler
+AS = avra
+ASFLAGS = 
+
+%.hex: %.s
+	$(AS) $(ASFLAGS) $<
+	mv $<.hex $@
+
+## Flashing
+# Arduino Duemilanove
+AD_PART = m328p
+AD_PROG = arduino
+AD_BAUD = 57600
+AD_PORT = /dev/arduino
+
+AD = avrdude
+ADFLAGS = -p $(AD_PART) -c $(AD_PROG) -b $(AD_BAUD) -P $(AD_PORT)
+
+build/%.hex: build/%.elf
+	avr-objcopy -O ihex -R .eeprom $< $@
+
+.PRECIOUS: build/%.elf
+
+upload: $(HEX)
+	$(AD) $(ADFLAGS) -U flash:w:$<
+
+## Console
+SERIAL_BAUD = 9600
+SERIAL_FLOW = n
+SERIAL_PARITY = n
+SERIAL_BITS = 8
+SERIAL_PORT = $(AD_PORT)
+
+SERIAL_TERM = picocom
+SERIAL_FLAGS = -b $(SERIAL_BAUD) -f $(SERIAL_FLOW) -p $(SERIAL_PARITY) -d $(SERIAL_BITS)
+
+console:
+	$(SERIAL_TERM) $(SERIAL_FLAGS) $(SERIAL_PORT)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/README	Wed Sep 24 22:41:46 2014 +0300
@@ -0,0 +1,13 @@
+# Depends
+
+* gcc-avr
+* avr-libc
+* avrdude
+
+# Build
+
+    $ ln -s .../qmsk-arduino qmsk
+    $ make build
+    $ make
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hello.c	Wed Sep 24 22:41:46 2014 +0300
@@ -0,0 +1,27 @@
+#include <avr/interrupt.h>
+#include <avr/io.h>
+
+#define DEBUG_DDR DDRB
+#define DEBUG_PIN 5
+#define DEBUG_PORT PORTB
+
+#include "debug.h"
+#include "timer.h"
+
+int main (void)
+{
+    debug_init();
+    timer_init();
+
+    // init
+    debug_set();
+    sei();
+
+    unsigned short timeout = 8000;
+
+    // start
+    while (true) {
+        timer_sleep(timeout);
+        debug_toggle();
+    }
+}