Makefile 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317
  1. # Build configuration:
  2. # Target device. May be one of:
  3. # t13 => ATTiny13
  4. # t25 => ATTiny25
  5. # t45 => ATTiny45
  6. # t85 => ATTiny85
  7. # m88 => ATMega88
  8. # m88p => ATMega88P
  9. # m328p => ATMega328P
  10. DEV := t85
  11. ifeq ($(DEV),t13) # ATTiny 13
  12. CONF_PWMLIM := 100
  13. CONF_PWMINVERT := 0
  14. CONF_PWMLOWSPFACT := 1.0
  15. CONF_ADCINVERT := 0
  16. CONF_ADCHSL := 0
  17. FEAT_HIGHRES := 0
  18. FEAT_BATTERY := 0
  19. FEAT_POWERSAVE := 0
  20. FEAT_REMOTE := 0
  21. FEAT_EEPROM := 0
  22. FEAT_BOOT := 0
  23. endif
  24. ifeq ($(DEV),t25) # ATTiny 25
  25. CONF_PWMLIM := 100
  26. CONF_PWMINVERT := 0
  27. CONF_PWMLOWSPFACT := 1.0
  28. CONF_ADCINVERT := 0
  29. CONF_ADCHSL := 0
  30. FEAT_HIGHRES := 0
  31. FEAT_BATTERY := 0
  32. FEAT_POWERSAVE := 0
  33. FEAT_REMOTE := 0
  34. FEAT_EEPROM := 0
  35. FEAT_BOOT := 0
  36. endif
  37. ifeq ($(DEV),t45) # ATTiny 45
  38. CONF_PWMLIM := 100
  39. CONF_PWMINVERT := 0
  40. CONF_PWMLOWSPFACT := 1.0
  41. CONF_ADCINVERT := 0
  42. CONF_ADCHSL := 0
  43. FEAT_HIGHRES := 1
  44. FEAT_BATTERY := 1
  45. FEAT_POWERSAVE := 1
  46. FEAT_REMOTE := 0
  47. FEAT_EEPROM := 0
  48. FEAT_BOOT := 0
  49. endif
  50. ifeq ($(DEV),t85) # ATTiny 85
  51. CONF_PWMLIM := 100
  52. CONF_PWMINVERT := 0
  53. CONF_PWMLOWSPFACT := 1.0
  54. CONF_ADCINVERT := 0
  55. CONF_ADCHSL := 0
  56. FEAT_HIGHRES := 1
  57. FEAT_BATTERY := 1
  58. FEAT_POWERSAVE := 1
  59. FEAT_REMOTE := 0
  60. FEAT_EEPROM := 0
  61. FEAT_BOOT := 0
  62. endif
  63. ifeq ($(DEV),m88) # ATMega 88
  64. CONF_PWMLIM := 100
  65. CONF_PWMINVERT := 0
  66. CONF_PWMLOWSPFACT := 1.0
  67. CONF_ADCINVERT := 0
  68. CONF_ADCHSL := 1
  69. FEAT_HIGHRES := 1
  70. FEAT_BATTERY := 0
  71. FEAT_POWERSAVE := 0
  72. FEAT_REMOTE := 1
  73. FEAT_EEPROM := 1
  74. FEAT_BOOT := 1
  75. endif
  76. ifeq ($(DEV),m88p) # ATMega 88P
  77. CONF_PWMLIM := 100
  78. CONF_PWMINVERT := 0
  79. CONF_PWMLOWSPFACT := 1.0
  80. CONF_ADCINVERT := 0
  81. CONF_ADCHSL := 1
  82. FEAT_HIGHRES := 1
  83. FEAT_BATTERY := 0
  84. FEAT_POWERSAVE := 0
  85. FEAT_REMOTE := 1
  86. FEAT_EEPROM := 1
  87. FEAT_BOOT := 1
  88. endif
  89. ifeq ($(DEV),m328p) # ATMega 328P
  90. CONF_PWMLIM := 100
  91. CONF_PWMINVERT := 0
  92. CONF_PWMLOWSPFACT := 1.0
  93. CONF_ADCINVERT := 0
  94. CONF_ADCHSL := 1
  95. FEAT_HIGHRES := 1
  96. FEAT_BATTERY := 1
  97. FEAT_POWERSAVE := 1
  98. FEAT_REMOTE := 1
  99. FEAT_EEPROM := 1
  100. FEAT_BOOT := 1
  101. endif
  102. ##############################################################################
  103. ##############################################################################
  104. ##############################################################################
  105. $(info DEV=$(DEV) \
  106. CONF_PWMLIM=$(CONF_PWMLIM) \
  107. CONF_PWMINVERT=$(CONF_PWMINVERT) \
  108. CONF_PWMLOWSPFACT=$(CONF_PWMLOWSPFACT) \
  109. CONF_ADCINVERT=$(CONF_ADCINVERT) \
  110. CONF_ADCHSL=$(CONF_ADCHSL) \
  111. FEAT_HIGHRES=$(FEAT_HIGHRES) \
  112. FEAT_BATTERY=$(FEAT_BATTERY) \
  113. FEAT_POWERSAVE=$(FEAT_POWERSAVE) \
  114. FEAT_REMOTE=$(FEAT_REMOTE) \
  115. FEAT_EEPROM=$(FEAT_EEPROM) \
  116. FEAT_BOOT=$(FEAT_BOOT) \
  117. )
  118. # Project name
  119. NAME := simplepwm
  120. # Project source files
  121. SRCS := \
  122. adc.c \
  123. battery.c \
  124. color.c \
  125. crc.c \
  126. curve.c \
  127. debug.c \
  128. eeprom.c \
  129. filter.c \
  130. main.c \
  131. movingavg.c \
  132. outputsp.c \
  133. potentiometer.c \
  134. pcint.c \
  135. pwm.c \
  136. remote.c \
  137. ring.c \
  138. standby.c \
  139. uart.c \
  140. watchdog.c
  141. GEN_SRCS :=
  142. # Bootloader source files
  143. BOOT_SRCS :=
  144. BOOT_GEN_SRCS :=
  145. BOOT_OFFSET :=
  146. ifeq ($(FEAT_BOOT),1)
  147. BOOT_SRCS := bootloader.c crc.c
  148. endif
  149. ifeq ($(DEV),t13)
  150. # ATTiny 13
  151. # 9.6 MHz, SUT 4 ms, BOD 2.7 V, WDT on, SPIEN
  152. F_CPU := 9600000UL
  153. LFUSE := 0x56
  154. HFUSE := 0xFB
  155. EFUSE :=
  156. ifeq ($(FEAT_BOOT),1)
  157. $(error FEAT_BOOT not supported on ATTiny 13)
  158. endif
  159. CHIP_ID := 1
  160. endif
  161. ifeq ($(DEV),t25)
  162. # ATTiny 25
  163. # 8 MHz, SUT 4 ms, BOD 2.7 V, WDT off, SPIEN
  164. F_CPU := 8000000UL
  165. LFUSE := 0xD2
  166. HFUSE := 0xDD
  167. EFUSE := 0xFF
  168. ifeq ($(FEAT_BOOT),1)
  169. $(error FEAT_BOOT not supported on ATTiny 25)
  170. endif
  171. CHIP_ID := 2
  172. endif
  173. ifeq ($(DEV),t45)
  174. # ATTiny 45
  175. # 8 MHz, SUT 4 ms, BOD 2.7 V, WDT off, SPIEN
  176. F_CPU := 8000000UL
  177. LFUSE := 0xD2
  178. HFUSE := 0xDD
  179. EFUSE := 0xFF
  180. ifeq ($(FEAT_BOOT),1)
  181. $(error FEAT_BOOT not supported on ATTiny 45)
  182. endif
  183. CHIP_ID := 3
  184. endif
  185. ifeq ($(DEV),t85)
  186. # ATTiny 85
  187. # 8 MHz, SUT 4 ms, BOD 2.7 V, WDT off, SPIEN
  188. F_CPU := 8000000UL
  189. LFUSE := 0xD2
  190. HFUSE := 0xDD
  191. EFUSE := 0xFF
  192. ifeq ($(FEAT_BOOT),1)
  193. $(error FEAT_BOOT not supported on ATTiny 85)
  194. endif
  195. CHIP_ID := 4
  196. endif
  197. ifeq ($(DEV),m88)
  198. # ATMega 88
  199. # 8 MHz, SUT 4.1 ms, BOD 2.7 V, WDT off, SPIEN
  200. F_CPU := 8000000UL
  201. LFUSE := 0xD2
  202. HFUSE := 0xDD
  203. EFUSE := 0xFB
  204. ifeq ($(FEAT_BOOT),1)
  205. EFUSE := 0xFA
  206. BOOT_OFFSET := 0x1C00 # 0xE00*2
  207. endif
  208. CHIP_ID := 5
  209. endif
  210. ifeq ($(DEV),m88p)
  211. # ATMega 88P
  212. # 8 MHz, SUT 4.1 ms, BOD 2.7 V, WDT off, SPIEN
  213. F_CPU := 8000000UL
  214. LFUSE := 0xD2
  215. HFUSE := 0xDD
  216. EFUSE := 0xFB
  217. ifeq ($(FEAT_BOOT),1)
  218. EFUSE := 0xFA
  219. BOOT_OFFSET := 0x1C00 # 0xE00*2
  220. endif
  221. CHIP_ID := 6
  222. endif
  223. ifeq ($(DEV),m328p)
  224. # ATMega 328P
  225. # 8 MHz, SUT 4.1 ms, BOD 2.7 V, WDT off, SPIEN
  226. F_CPU := 8000000UL
  227. LFUSE := 0xD2
  228. HFUSE := 0xD9
  229. EFUSE := 0xFD
  230. ifeq ($(FEAT_BOOT),1)
  231. HFUSE := 0xD8
  232. BOOT_OFFSET := 0x7000 # 0x3800*2
  233. endif
  234. CHIP_ID := 7
  235. endif
  236. # Architecture configuration
  237. GCC_ARCH := $(subst m,atmega,$(subst t,attiny,$(DEV)))
  238. AVRDUDE_ARCH := $(DEV)
  239. FUNC_STACK_LIMIT :=
  240. # Programmer selection.
  241. # Values can be: avrisp2, mysmartusb
  242. PROGRAMMER := avrisp2
  243. AVRDUDE_SPEED := 10
  244. AVRDUDE_SLOW_SPEED := 200
  245. # Instrumentation
  246. INSTRUMENT_FUNC :=
  247. BOOT_INSTRUMENT_FUNC :=
  248. # Additional compiler flags
  249. CFLAGS := -DCHIP_ID="$(CHIP_ID)" \
  250. -DCONF_PWMLIM="$(CONF_PWMLIM)" \
  251. -DCONF_PWMINVERT="(!!($(CONF_PWMINVERT)))" \
  252. -DCONF_PWMLOWSPFACT="$(CONF_PWMLOWSPFACT)" \
  253. -DCONF_ADCINVERT="(!!($(CONF_ADCINVERT)))" \
  254. -DCONF_ADCHSL="(!!($(CONF_ADCHSL)))" \
  255. -DFEAT_HIGHRES="(!!($(FEAT_HIGHRES)))" \
  256. -DFEAT_BATTERY="(!!($(FEAT_BATTERY)))" \
  257. -DFEAT_POWERSAVE="(!!($(FEAT_POWERSAVE)))" \
  258. -DFEAT_REMOTE="(!!($(FEAT_REMOTE)))" \
  259. -DFEAT_EEPROM="(!!($(FEAT_EEPROM)))"
  260. BOOT_CFLAGS := $(CFLAGS)
  261. LDFLAGS :=
  262. # Additional "clean" and "distclean" target files
  263. CLEAN_FILES := pwm_conf.h pwm0_isr.c pwm1_isr.c pwm2_isr.c
  264. DISTCLEAN_FILES :=
  265. streq = $(and $(filter 1,$(words $2)),$(filter $1,$(firstword $2)))
  266. deveq = $(call streq,$1,$(DEV))
  267. ifeq ($(strip $(call deveq,t13)\
  268. $(call deveq,t25)\
  269. $(call deveq,t45)\
  270. $(call deveq,t85)\
  271. $(call deveq,m88)\
  272. $(call deveq,m88p)\
  273. $(call deveq,m328p)),)
  274. $(error "DEV=$(DEV) is not supported.")
  275. endif
  276. include avrmakelib.mk
  277. pwm.c: pwm_conf.h pwm0_isr.c pwm1_isr.c pwm2_isr.c
  278. pwm_conf.h: pwm_conf.py
  279. $(QUIET_PYTHON3) $< $(CFLAGS) > $@
  280. pwm0_isr.c: pwm_isr_template.c
  281. $(QUIET_SED) -e 's/%INDEX%/0/g' -e 's/%HEADER%/THIS IS A GENERATED FILE/g' $< > $@
  282. pwm1_isr.c: pwm_isr_template.c
  283. $(QUIET_SED) -e 's/%INDEX%/1/g' -e 's/%HEADER%/THIS IS A GENERATED FILE/g' $< > $@
  284. pwm2_isr.c: pwm_isr_template.c
  285. $(QUIET_SED) -e 's/%INDEX%/2/g' -e 's/%HEADER%/THIS IS A GENERATED FILE/g' $< > $@