IEEE 802.15.4 subsystem
Sign in or create your account | Project List | Help
IEEE 802.15.4 subsystem Git Source Tree
Root/
Source at commit 8c574484b889c7b17d2ba4b6929947050f87d91e created 6 years 6 months ago. By Josef Filzmaier, atusb/fw: Introduce DEBUG flag | |
---|---|
1 | # |
2 | # Makefile - Makefile of the ATUSB firmware |
3 | # |
4 | # Written 2010-2011, 2013 by Werner Almesberger |
5 | # Copyright 2010-2011, 2013 by Werner Almesberger |
6 | # |
7 | # This program is free software; you can redistribute it and/or modify |
8 | # it under the terms of the GNU General Public License as published by |
9 | # the Free Software Foundation; either version 2 of the License, or |
10 | # (at your option) any later version. |
11 | # |
12 | |
13 | SHELL = /bin/bash |
14 | |
15 | NAME = atusb |
16 | DEBUG = false |
17 | |
18 | CFLAGS = -g -mmcu=$(CHIP) -DBOOT_ADDR=$(BOOT_ADDR) \ |
19 | -Wall -Wextra -Wshadow -Werror -Wno-unused-parameter \ |
20 | -Wmissing-prototypes -Wmissing-declarations -Wstrict-prototypes |
21 | |
22 | ifeq ($(DEBUG),true) |
23 | CFLAGS += -DDEBUG |
24 | endif |
25 | |
26 | ifeq ($(NAME),rzusb) |
27 | CHIP=at90usb1287 |
28 | CFLAGS += -DRZUSB -DAT86RF230 |
29 | else |
30 | CHIP=atmega32u2 |
31 | CFLAGS += -DATUSB -DAT86RF231 |
32 | endif |
33 | HOST=jlime |
34 | BOOT_ADDR=0x7000 |
35 | |
36 | AVR_PREFIX = $(BIN_PATH) avr- |
37 | CC = $(AVR_PREFIX)gcc |
38 | OBJCOPY = $(AVR_PREFIX)objcopy |
39 | #OBJDUMP = $(AVR_PREFIX)objdump |
40 | SIZE = $(AVR_PREFIX)size |
41 | |
42 | # BCD notion is 0xJJMM with JJ being major and MM being minor. Thus 0x0020 is |
43 | # version 0.2 */ |
44 | USB_BCD_VERSION = 0030 |
45 | USB_VENDOR_ID = 20b7 |
46 | USB_PRODUCT_ID = 1540 |
47 | USB_ID = $(USB_VENDOR_ID):$(USB_PRODUCT_ID) |
48 | |
49 | OBJS = atusb.o board.o board_app.o sernum.o spi.o descr.o ep0.o \ |
50 | dfu_common.o usb.o app-atu2.o mac.o |
51 | BOOT_OBJS = boot.o board.o sernum.o spi.o flash.o dfu.o \ |
52 | dfu_common.o usb.o boot-atu2.o |
53 | |
54 | ifeq ($(DEBUG),true) |
55 | OBJS += uart.o |
56 | endif |
57 | |
58 | ifeq ($(NAME),rzusb) |
59 | OBJS += board_rzusb.o |
60 | BOOT_OBJS += board_rzusb.o |
61 | else |
62 | OBJS += board_atusb.o |
63 | BOOT_OBJS += board_atusb.o |
64 | endif |
65 | |
66 | |
67 | vpath %.c usb/ |
68 | |
69 | CFLAGS += -Iinclude -Iusb -I. |
70 | |
71 | # ----- Verbosity control ----------------------------------------------------- |
72 | |
73 | CC_normal := $(CC) |
74 | BUILD_normal := |
75 | DEPEND_normal := $(CPP) $(CFLAGS) -MM -MG |
76 | |
77 | CC_quiet = @echo " CC " $@ && $(CC_normal) |
78 | BUILD_quiet = @echo " BUILD " $@ && $(BUILD_normal) |
79 | DEPEND_quiet = @$(DEPEND_normal) |
80 | |
81 | ifeq ($(V),1) |
82 | CC = $(CC_normal) |
83 | BUILD = $(BUILD_normal) |
84 | DEPEND = $(DEPEND_normal) |
85 | else |
86 | CC = $(CC_quiet) |
87 | BUILD = $(BUILD_quiet) |
88 | DEPEND = $(DEPEND_quiet) |
89 | endif |
90 | |
91 | # ----- Rules ----------------------------------------------------------------- |
92 | |
93 | .PHONY: all clean upload prog dfu update version.c bindist |
94 | .PHONY: prog-app prog-read on off reset |
95 | |
96 | all: $(NAME).bin boot.hex |
97 | |
98 | $(NAME).elf: $(OBJS) |
99 | $(MAKE) version.o |
100 | $(CC) $(CFLAGS) -o $@ $(OBJS) version.o |
101 | $(SIZE) $@ |
102 | |
103 | boot.elf: $(BOOT_OBJS) |
104 | $(CC) $(CFLAGS) -o $@ $(BOOT_OBJS) \ |
105 | -Wl,--section-start=.text=$(BOOT_ADDR) |
106 | $(SIZE) $@ |
107 | |
108 | %.bin: %.elf |
109 | $(BUILD) $(OBJCOPY) -j .text -j .data -O binary $< $@ |
110 | @echo "build #`cat .version`, `ls -l $@`" |
111 | |
112 | %.dfu: %.bin |
113 | cp $(NAME).bin $(NAME).dfu |
114 | dfu-suffix -a $(NAME).dfu -d 0x$(USB_BCD_VERSION) \ |
115 | -p 0x$(USB_PRODUCT_ID) -v 0x$(USB_VENDOR_ID) |
116 | |
117 | %.hex: %.elf |
118 | $(BUILD) $(OBJCOPY) -j .text -j .data -O ihex $< $@ |
119 | @echo "Size: `$(SIZE) -A boot.hex | sed '/Total */s///p;d'` B" |
120 | |
121 | # ----- Cleanup --------------------------------------------------------------- |
122 | |
123 | clean: |
124 | rm -f $(NAME).bin $(NAME).elf $(NAME).dfu |
125 | rm -f $(OBJS) $(OBJS:.o=.d) |
126 | rm -f boot.hex boot.elf |
127 | rm -f $(BOOT_OBJS) $(BOOT_OBJS:.o=.d) |
128 | rm -f version.c version.d version.o |
129 | |
130 | # ----- Build version --------------------------------------------------------- |
131 | |
132 | version.c: |
133 | @if [ -f .version ]; then \ |
134 | v=`cat .version`; \ |
135 | expr $$v + 1 >.version; \ |
136 | else \ |
137 | echo 0 >.version; \ |
138 | fi |
139 | @[ -s .version ] || echo 0 >.version |
140 | @echo '/* MACHINE-GENERATED. DO NOT EDIT ! */' >version.c |
141 | @echo '#include "version.h"' >>version.c |
142 | @echo "const char *build_date = \"`date`\";" >>version.c |
143 | @echo "const uint16_t build_number = `cat .version`;" \ |
144 | >>version.c |
145 | |
146 | # ----- Dependencies ---------------------------------------------------------- |
147 | |
148 | MKDEP = \ |
149 | $(DEPEND) $< | \ |
150 | sed \ |
151 | -e 's|^$(basename $(notdir $<)).o:|$@:|' \ |
152 | -e '/^\(.*:\)\? */{p;s///;s/ *\\\?$$/ /;s/ */:\n/g;H;}' \ |
153 | -e '$${g;p;}' \ |
154 | -e d >$(basename $@).d; \ |
155 | [ "$${PIPESTATUS[*]}" = "0 0" ] || \ |
156 | { rm -f $(basename $@).d; exit 1; } |
157 | |
158 | %.o: %.c |
159 | $(CC) $(CFLAGS) -Os -c $< |
160 | $(MKDEP) |
161 | |
162 | -include $(OBJS:.o=.d) |
163 | |
164 | # ----- Object file variants -------------------------------------------------- |
165 | |
166 | app-%.o: usb/%.c |
167 | $(CC) $(CFLAGS) -Os -o $@ -c $< |
168 | $(MKDEP) |
169 | |
170 | boot-%.o: usb/%.c |
171 | $(CC) $(CFLAGS) -DBOOT_LOADER -Os -o $@ -c $< |
172 | $(MKDEP) |
173 | |
174 | # ----- Distribution ---------------------------------------------------------- |
175 | |
176 | BINDIST_BASE=http://downloads.qi-hardware.com/people/werner/wpan/bindist |
177 | ATUSB_BIN_NAME=atusb-`git rev-parse HEAD | cut -c 1-7`.bin |
178 | |
179 | bindist: |
180 | qippl atusb.bin wpan/bindist/$(ATUSB_BIN_NAME) |
181 | @echo $(BINDIST_BASE)/$(ATUSB_BIN_NAME) |
182 | @echo md5sum: `md5sum atusb.bin | sed 's/ .*//'` |
183 | @echo atrf-id: \ |
184 | `sed '/.*number = \(.*\);/s//#\1/p;d' version.c` \ |
185 | `sed '/.*date = "\(.*\)";/s//\1/p;d' version.c` |
186 | |
187 | # ----- Programming and device control ---------------------------------------- |
188 | |
189 | upload: $(NAME).bin boot.hex |
190 | scp $(NAME).bin boot.hex $(HOST): |
191 | |
192 | # lfuse: external clock, slow start-up |
193 | # hfuse: 4 kB boot loader, reset into boot loader |
194 | # lock: allow everything but SPM to the boot loader |
195 | # Note: when trying to program 0xef, we get back 0x2f, failing |
196 | # verification. So we just program 0x2f. |
197 | |
198 | prog-app: |
199 | ssh $(HOST) avrdude -F -p $(CHIP) -c nanonote_atusb -e \ |
200 | -U flash:w:atusb.bin:r \ |
201 | -U lfuse:w:0x60:m |
202 | |
203 | prog: |
204 | ssh $(HOST) avrdude -F -p $(CHIP) -c nanonote_atusb -e \ |
205 | -U flash:w:boot.hex:i \ |
206 | -U lfuse:w:0x60:m \ |
207 | -U hfuse:w:0xd8:m \ |
208 | -U lock:w:0x2f:m |
209 | |
210 | prog-read: |
211 | ssh $(HOST) avrdude -F -p $(CHIP) -c nanonote_atusb \ |
212 | -U flash:r:mcu.bin:r |
213 | |
214 | dfu: $(NAME).dfu |
215 | dfu-util -d $(USB_ID) -D $(NAME).dfu |
216 | |
217 | update: $(NAME).bin |
218 | -atrf-reset -a |
219 | usbwait -r -i 0.01 -t 5 $(USB_ID) |
220 | $(MAKE) dfu |
221 | |
222 | on: |
223 | ssh $(HOST) poke 0x10010318 4 |
224 | |
225 | off: |
226 | ssh $(HOST) poke 0x10010314 4 |
227 | |
228 | reset: |
229 | ssh $(HOST) poke 0x10010318 2048 |
230 | ssh $(HOST) poke 0x10010314 2048 |
231 |