Advertisement
Guest User

Untitled

a guest
Jun 22nd, 2023
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Make 9.56 KB | None | 0 0
  1. #
  2. #  Makefile
  3. #
  4. #  (c) 2012-2023 by Markus Reschke
  5. #  based on code from Markus Frejek and Karl-Heinz Kübbeler
  6. #
  7.  
  8. PROJECT = ComponentTester
  9.  
  10.  
  11. #
  12. #  MCU settings
  13. #  - Edit to match your setup!
  14. #
  15.  
  16. # avr-gcc: MCU model
  17. # - ATmega 328/328P        : atmega328
  18. # - ATmega 328PB           : atmega328pb
  19. # - ATmega 324P/324PA      : atmega324p
  20. # - ATmega 640             : atmega640
  21. # - ATmega 644/644P/644PA  : atmega644
  22. # - ATmega 1280            : atmega1280
  23. # - ATmega 1284/1284P      : atmega1284
  24. # - ATmega 2560            : atmega2560
  25. MCU = atmega328
  26.  
  27. # MCU freqency:
  28. # - 1MHz  : 1
  29. # - 8MHz  : 8
  30. # - 16MHz : 16
  31. # - 20MHz : 20
  32. FREQ = 20
  33.  
  34. # oscillator type
  35. # - internal RC oscillator      : RC
  36. # - external full swing crystal : Crystal
  37. # - external low power crystal  : LowPower
  38. OSCILLATOR = Crystal
  39.  
  40. # oscillator start-up cycles
  41. # - Crystal and LowPower could also be 1024 or 256 based on fuse settings
  42. ifeq (${OSCILLATOR},RC)
  43.   OSC_STARTUP = 6
  44. endif
  45. ifeq (${OSCILLATOR},Crystal)
  46.   OSC_STARTUP = 16384
  47. endif
  48. ifeq (${OSCILLATOR},LowPower)
  49.   OSC_STARTUP = 16384
  50. endif
  51.  
  52.  
  53. #
  54. #  avrdude settings
  55. #  - Edit to match your setup!
  56. #
  57.  
  58. # avrdude: part number of MCU
  59. # - ATmega 328    : m328
  60. # - ATmega 328P   : m328p
  61. # - ATmega 328PB  : m328pb
  62. # - ATmega 324P   : m324p
  63. # - ATmega 324PA  : m324pa
  64. # - ATmega 640    : m640
  65. # - ATmega 644    : m644
  66. # - ATmega 644P   : m644p
  67. # - ATmega 644PA  : m644p
  68. # - ATmega 1280   : m1280
  69. # - ATmega 1284   : m1284
  70. # - ATmega 1284P  : m1284p
  71. # - ATmega 2560   : m2560
  72. PARTNO = m328p
  73.  
  74. # avrdude: ISP programmer, port and options
  75.  
  76. # Arduino as ISP
  77. #PROGRAMMER = stk500v1
  78. #PORT = /dev/ttyACM0
  79. #OPTIONS = -b 19200
  80.  
  81. # Bus Pirate
  82. #PROGRAMMER = buspirate
  83. #PORT = /dev/bus_pirate
  84. #OPTIONS = -B 10.0
  85.  
  86. # Diamex ALL-AVR/AVR-Prog
  87. #PROGRAMMER = avrispmkII
  88. #PORT = usb
  89. #OPTIONS = -B 1.0
  90.  
  91. # Pololu USB AVR Programmer
  92. #PROGRAMMER = stk500v2
  93. #PORT = /dev/ttyACM0
  94. #OPTIONS = -B 1.0
  95.  
  96. # USBasp
  97. PROGRAMMER = usbasp
  98. PORT = usb
  99. OPTIONS = -B 20
  100.  
  101. # USBtinyISP
  102. #PROGRAMMER = usbtiny
  103. #PORT = usb
  104. #OPTIONS = -B 5.0
  105.  
  106. # Arduino Uno bootloader via serial/USB
  107. #PROGRAMMER = arduino
  108. #PORT = /dev/ttyACM0
  109. #OPTIONS = -D -b 115200
  110.  
  111. # Arduino Mega2560 bootloader via serial/USB
  112. #PROGRAMMER = wiring
  113. #PORT = /dev/ttyACM0
  114. #OPTIONS = -D -b 115200
  115.  
  116.  
  117. #
  118. #  global settings
  119. #
  120.  
  121. # project name
  122. NAME = ComponentTester
  123.  
  124. # name and version based on directory name
  125. DIST = $(notdir ${CURDIR})
  126.  
  127. # compiler flags
  128. CC = avr-gcc
  129. CPP = avr-g++
  130. CFLAGS = -mmcu=${MCU} -Wall -I. -Ibitmaps
  131. CFLAGS += -DF_CPU=${FREQ}000000UL
  132. CFLAGS += -DOSC_STARTUP=${OSC_STARTUP}
  133. CFLAGS += -gdwarf-2 -std=gnu99 -Os -mcall-prologues
  134. CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
  135. #CFLAGS += -flto
  136. CFLAGS += -MD -MP -MT $(*F).o -MF dep/$(@F).d
  137.  
  138. # linker flags
  139. LDFLAGS = -mmcu=${MCU} -Wl,-Map=${NAME}.map
  140.  
  141. # hex file flags
  142. HEX_FLASH_FLAGS = -R .eeprom -R .fuse -R .lock -R .signature
  143. HEX_EEPROM_FLAGS = -j .eeprom
  144. HEX_EEPROM_FLAGS += --set-section-flags=.eeprom="alloc,load"
  145. HEX_EEPROM_FLAGS += --change-section-lma .eeprom=0 --no-change-warnings
  146.  
  147. # header files
  148. HEADERS = config.h config_328.h config_644.h config_1280.h
  149. HEADERS += colors.h common.h functions.h variables.h $(wildcard var_*.h)
  150. HEADERS += OneWire.h ADS7843.h
  151. HEADERS += HD44780.h ILI9163.h ILI9341.h ILI9481.h ILI9486.h ILI9488.h
  152. HEADERS += PCD8544.h PCF8814.h SH1106.h SSD1306.h
  153. HEADERS += ST7036.h ST7565R.h ST7735.h ST7920.h STE2007.h
  154.  
  155. # objects
  156. OBJECTS_C = main.o user.o pause.o adjust.o ADC.o probes.o display.o
  157. OBJECTS_C += resistor.o cap.o semi.o inductor.o
  158. OBJECTS_C += tools_misc.o tools_signal.o tools_counter.o tools_LC_Meter.o
  159. OBJECTS_C += SPI.o I2C.o serial.o commands.o OneWire.o
  160. OBJECTS_C += IR_RX.o IR_TX.o DHTxx.o ADS7843.o MAX6675.o MAX31855.o
  161. OBJECTS_C += HD44780.o ILI9163.o ILI9341.o ILI9481.o ILI9486.o ILI9488.o
  162. OBJECTS_C += PCD8544.o PCF8814.o SH1106.o SSD1306.o
  163. OBJECTS_C += ST7036.o ST7565R.o ST7735.o Semi_ST7735.o ST7920.o
  164. OBJECTS_C += STE2007.o VT100.o RD_Display.o
  165. OBJECTS_S = wait.o
  166. OBJECTS = ${OBJECTS_C} ${OBJECTS_S}
  167.  
  168.  
  169. #
  170. #  build
  171. #
  172.  
  173. .PHONY: all size
  174. all: ${NAME} ${NAME}.hex ${NAME}.eep ${NAME}.lss size
  175.  
  176.  
  177. #
  178. #  link
  179. #
  180.  
  181. # link firmware
  182. $(NAME): ${OBJECTS}
  183.      ${CC} ${LDFLAGS} ${OBJECTS} ${LIBDIRS} ${LIBS} -o ${NAME}
  184.  
  185. # create hex file of firmware
  186. %.hex: ${NAME}
  187.     avr-objcopy -O ihex ${HEX_FLASH_FLAGS} $< $@
  188.  
  189. # create hex file of EEPROM data
  190. %.eep: ${NAME}
  191.     -avr-objcopy ${HEX_EEPROM_FLAGS} -O ihex $< $@ || exit 0
  192.  
  193. # create dump of firmware
  194. %.lss: ${NAME}
  195.     avr-objdump -h -S $< > $@
  196.  
  197. # output firmware size and other info
  198. size: ${NAME}
  199.     @echo
  200.     @avr-size -C --mcu=${MCU} $<
  201.  
  202.  
  203. #
  204. #  compile source files
  205. #
  206.  
  207. # rule for all c-files
  208. ${OBJECTS_C}: %.o: %.c ${HEADERS} ${MAKEFILE_LIST}
  209.     ${CC} ${CFLAGS} -c ${@:.o=.c}
  210.  
  211. # rule for all S-files
  212. ${OBJECTS_S}: %.o: %.S ${HEADERS} ${MAKEFILE_LIST}
  213.     ${CC} ${CFLAGS} -c ${@:.o=.S}
  214.  
  215. # external dependencies
  216. -include $(shell mkdir dep 2>/dev/null) $(wildcard dep/*)
  217.  
  218.  
  219. #
  220. #  program MCU
  221. #
  222.  
  223. # program firmware and EEPROM data
  224. .PHONY: upload
  225. upload: ${NAME} ${NAME}.hex ${NAME}.eep ${NAME}.lss size
  226.     avrdude -c ${PROGRAMMER} -P ${PORT} -p ${PARTNO} ${OPTIONS} \
  227.       -U flash:w:./${NAME}.hex:a -U eeprom:w:./${NAME}.eep:a
  228.  
  229. # program firmware only
  230. .PHONY: prog_fw
  231. prog_fw: ${NAME} ${NAME}.hex ${NAME}.lss size
  232.     avrdude -c ${PROGRAMMER} -P ${PORT} -p ${PARTNO} ${OPTIONS} \
  233.       -U flash:w:./${NAME}.hex:a
  234.  
  235. # program EEPROM data only
  236. .PHONY: prog_ee
  237. prog_ee: ${NAME} ${NAME}.eep ${NAME}.lss size
  238.     avrdude -c ${PROGRAMMER} -P ${PORT} -p ${PARTNO} ${OPTIONS} \
  239.       -U eeprom:w:./${NAME}.eep:a
  240.  
  241.  
  242. #
  243. #  misc
  244. #
  245.  
  246. # create distribution package
  247. .PHONY: dist clean
  248. dist: clean
  249.     cd ..; tar -czf ${DIST}/${DIST}.tgz \
  250.       ${DIST}/*.h ${DIST}/*.c ${DIST}/*.S ${DIST}/bitmaps/*.h \
  251.       ${DIST}/Makefile ${DIST}/README ${DIST}/CHANGES \
  252.       ${DIST}/README.de ${DIST}/CHANGES.de ${DIST}/Clones \
  253.       ${DIST}/EUPL-v1.2.txt ${DIST}/dep
  254.  
  255. # clean up
  256. clean:
  257.     -rm -rf ${OBJECTS} ${NAME} dep/* *.tgz
  258.     -rm -rf ${NAME}.hex ${NAME}.eep ${NAME}.lss ${NAME}.map
  259.  
  260.  
  261. #
  262. #  MCU fuses
  263. #
  264.  
  265. # ATmega 328/328P
  266. ifeq (${MCU},atmega328)
  267.   FAMILY = atmega328_324_640
  268. endif
  269.  
  270. # ATmega 328PB
  271. ifeq (${MCU},atmega328pb)
  272.   FAMILY = atmega328pb
  273. endif
  274.  
  275. # ATmega 324P/324PA
  276. ifeq (${MCU},atmega324p)
  277.   FAMILY = atmega328_324_640
  278. endif
  279.  
  280. # ATmega 640
  281. ifeq (${MCU},atmega640)
  282.   FAMILY = atmega328_324_640
  283. endif
  284.  
  285. # ATmega 644/644P/644PA
  286. ifeq (${MCU},atmega644)
  287.   FAMILY = atmega328_324_640
  288. endif
  289.  
  290. # ATmega 1280
  291. ifeq (${MCU},atmega1280)
  292.   FAMILY = atmega328_324_640
  293. endif
  294.  
  295. # ATmega 1284/1284P
  296. ifeq (${MCU},atmega1284)
  297.   FAMILY = atmega328_324_640
  298. endif
  299.  
  300. # ATmega 2560
  301. ifeq (${MCU},atmega2560)
  302.   FAMILY = atmega328_324_640
  303. endif
  304.  
  305. # ATmega 328/324/640/644/1280/1284/2560
  306. ifeq (${FAMILY},atmega328_324_640)
  307.   # high byte: use default settings, disable JTAG
  308.   HFUSE = -U hfuse:w:0xd9:m
  309.   # extended byte: BOD level 4.3V
  310.   EFUSE = -U efuse:w:0xfc:m
  311.   # low byte: clock settings
  312.   ifeq (${FREQ},1)
  313.     # internal RC oscillator (8MHz) and /1 clock divider
  314.     LFUSE_RC = -U lfuse:w:0x62:m
  315.     # external 8MHz crystal, full swing osc, /8 clock divider
  316.     LFUSE_CRYSTAL = -U lfuse:w:0x77:m
  317.     # external 8MHz crystal, low power osc, /8 clock divider
  318.     LFUSE_LOWPOWER = -U lfuse:w:0x7f:m
  319.   endif
  320.   ifeq (${FREQ},8)
  321.     # internal RC oscillator (8MHz) and /1 clock divider
  322.     LFUSE_RC = -U lfuse:w:0xe2:m
  323.     # external 8MHz crystal, full swing osc, /1 clock divider
  324.     LFUSE_CRYSTAL = -U lfuse:w:0xf7:m
  325.     # external 8MHz crystal, low power osc, /1 clock divider
  326.     LFUSE_LOWPOWER = -U lfuse:w:0xff:m
  327.   endif
  328.   ifeq (${FREQ},16)
  329.     # internal RC oscillator (8MHz) not possible
  330.     LFUSE_RC =
  331.     # external 16MHz crystal, full swing osc, /1 clock divider
  332.     LFUSE_CRYSTAL = -U lfuse:w:0xf7:m
  333.     # external 16MHz crystal, low power osc, /1 clock divider
  334.     LFUSE_LOWPOWER = -U lfuse:w:0xff:m
  335.   endif
  336.   ifeq (${FREQ},20)
  337.     # internal RC oscillator (8MHz) not possible
  338.     LFUSE_RC =
  339.     # external 20MHz crystal, full swing osc, /1 clock divider
  340.     LFUSE_CRYSTAL = -U lfuse:w:0xf7:m
  341.     # external 20MHz crystal, low power osc, /1 clock divider
  342.     LFUSE_LOWPOWER = -U lfuse:w:0xff:m
  343.   endif
  344. endif
  345.  
  346. # ATmega 328PB
  347. ifeq (${FAMILY},atmega328pb)
  348.   # high byte: use default settings
  349.   HFUSE = -U hfuse:w:0xd9:m
  350.   # extended byte: BOD level 4.3V, CFD disabled
  351.   EFUSE = -U efuse:w:0xf4:m
  352.   # low byte: clock settings
  353.   ifeq (${FREQ},8)
  354.     # internal RC oscillator (8MHz) and /1 clock divider
  355.     LFUSE_RC = -U lfuse:w:0xe2:m
  356.     # external crystal with full swing osc not supported, use low power osc
  357.     LFUSE_CRYSTAL = -U lfuse:w:0xff:m
  358.     # external 8MHz crystal, low power osc, /1 clock divider
  359.     LFUSE_LOWPOWER = -U lfuse:w:0xff:m
  360.   endif
  361.   ifeq (${FREQ},16)
  362.     # internal RC oscillator (8MHz) not possible
  363.     LFUSE_RC =
  364.     # external crystal with full swing osc not supported, use low power osc
  365.     LFUSE_CRYSTAL = -U lfuse:w:0xff:m
  366.     # external 16MHz crystal, low power osc, /1 clock divider
  367.     LFUSE_LOWPOWER = -U lfuse:w:0xff:m
  368.   endif
  369. endif
  370.  
  371. # select low byte
  372. ifeq (${OSCILLATOR},RC)
  373.   LFUSE = ${LFUSE_RC}
  374. endif
  375. ifeq (${OSCILLATOR},Crystal)
  376.   LFUSE = ${LFUSE_CRYSTAL}
  377. endif
  378. ifeq (${OSCILLATOR},LowPower)
  379.   LFUSE = ${LFUSE_LOWPOWER}
  380. endif
  381.  
  382. # check fuses
  383. FUSES =
  384. ifneq ($(strip ${LFUSE}),)
  385.   ifneq ($(strip ${HFUSE}),)
  386.     FUSES = ${LFUSE} ${HFUSE} ${EFUSE}
  387.   endif
  388. endif
  389.  
  390. # set fuses
  391. .PHONY: fuses
  392. fuses:
  393.   ifeq ($(strip ${FUSES}),)
  394.     @echo Invalid fuse settings!
  395.   else
  396.     avrdude -c ${PROGRAMMER} -P ${PORT} -p ${PARTNO} ${OPTIONS} ${FUSES}
  397.   endif
  398.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement