bravely step into the modern world of C-programming, using avr-gcc for a hello world...
authorTero Marttila <terom@paivola.fi>
Wed, 02 Apr 2014 19:10:05 +0300
changeset 47 7f930a94ee1e
parent 46 ffb0c3ec9bc0
child 48 50dc2f4d90fd
bravely step into the modern world of C-programming, using avr-gcc for a hello world...
.hgignore
Makefile
README.md
hello.c
--- a/.hgignore	Tue Aug 02 09:27:19 2011 +0300
+++ b/.hgignore	Wed Apr 02 19:10:05 2014 +0300
@@ -1,7 +1,11 @@
-syntax: regexp
-
+syntax: glob
 
-\.(swo|swp)$
-\.(hex|s.cof|s.eep.hex|s.obj)$
+.*.swo
+.*.swp
 
-^docs/
+*.hex
+*.elf
+
+*.s.*
+
+docs/
--- a/Makefile	Tue Aug 02 09:27:19 2011 +0300
+++ b/Makefile	Wed Apr 02 19:10:05 2014 +0300
@@ -1,6 +1,47 @@
+PROG = hello
+# console
+# dmx
+
+all: $(PROG).hex
+
+## Compiler
+MCU = atmega328p
+
+# CPU clock frequency
+CPU = 16000000
+
+CC = avr-gcc
+CFLAGS = -g -mmcu=$(MCU) -DF_CPU=$(CPU)UL -Os
+
+%.elf: %.c
+	$(CC) $(CFLAGS) -o $@ $+
+
+%.hex: %.elf
+	avr-objcopy -O ihex -R .eeprom $< $@
+
+.PRECIOUS: %.elf
+
+## Assembler
 AS = avra
 ASFLAGS = 
 
+matrix.hex: spi.inc matrix.inc timer.inc delay.inc macros.inc font.inc font.def
+led7seg.hex: spi.inc led7seg.inc adc.inc timer.inc delay.inc macros.inc
+timer.hex: timer.inc macros.inc
+
+%.hex: %.s
+	$(AS) $(ASFLAGS) $<
+	mv $<.hex $@
+
+# fonts
+font.inc: font.def
+
+font.def: font.txt font-compile.py
+	python font-compile.py $< $@ > /dev/null
+
+
+## Flashing
+# Arduino Duemilanove
 AD_PART = m328p
 AD_PROG = arduino
 AD_BAUD = 57600
@@ -9,26 +50,10 @@
 AD = avrdude
 ADFLAGS = -p $(AD_PART) -c $(AD_PROG) -b $(AD_BAUD) -P $(AD_PORT)
 
-PROG = dmx
-
-all: $(PROG).hex
-
-matrix.hex: spi.inc matrix.inc timer.inc delay.inc macros.inc font.inc font.def
-led7seg.hex: spi.inc led7seg.inc adc.inc timer.inc delay.inc macros.inc
-timer.hex: timer.inc macros.inc
-
-font.inc: font.def
-
-%.hex: %.s
-	$(AS) $(ASFLAGS) $<
-	mv $<.hex $@
-
-font.def: font.txt font-compile.py
-	python font-compile.py $< $@ > /dev/null
-
 upload: $(PROG).hex
 	$(AD) $(ADFLAGS) -U flash:w:$<
 
+## Console
 SERIAL_BAUD = 9600
 SERIAL_FLOW = n
 SERIAL_PARITY = n
@@ -38,6 +63,6 @@
 SERIAL_TERM = picocom
 SERIAL_FLAGS = -b $(SERIAL_BAUD) -f $(SERIAL_FLOW) -p $(SERIAL_PARITY) -d $(SERIAL_BITS)
 
-chat:
+console:
 	$(SERIAL_TERM) $(SERIAL_FLAGS) $(SERIAL_PORT)
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/README.md	Wed Apr 02 19:10:05 2014 +0300
@@ -0,0 +1,14 @@
+## Dependencies
+* avrdude
+* avra
+* picocom
+* gcc-avr
+* avr-libc
+
+## USB
+Configure udev for the `/dev/arduino` symlink.
+
+### /etc/udev/rules.d/09-arduino.rules
+    # /dev/arduino
+    SUBSYSTEMS=="usb", ATTRS{product}=="FT232R USB UART", ATTRS{idProduct}=="6001", ATTRS{idVendor}=="0403", SYMLINK+="arduino arduino_$attr{serial}"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hello.c	Wed Apr 02 19:10:05 2014 +0300
@@ -0,0 +1,22 @@
+#include <avr/io.h>
+#include <util/delay.h>
+
+#define false       0
+#define true        1
+
+#define SBI(port, bit) do { port |= (1 << (bit)); } while (0)
+#define CBI(port, bit) do { port &= ~(1 << (bit)); } while (0)
+
+int main (void)
+{
+    // LED
+    SBI(DDRB, DDB5);
+
+    while (true) {
+        // flip
+        PORTB ^= (1 << PORTB5);
+        
+        // busyloop
+        _delay_ms(1000);
+    }
+}