Initial project, blinks led on PC5 (analog input 5)
This commit is contained in:
commit
64aca0c2fa
3 changed files with 99 additions and 0 deletions
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
/build/
|
||||||
|
/.clangd/
|
||||||
|
compile_commands.json
|
81
CMakeLists.txt
Normal file
81
CMakeLists.txt
Normal file
|
@ -0,0 +1,81 @@
|
||||||
|
cmake_minimum_required(VERSION 3.15)
|
||||||
|
|
||||||
|
# Project name
|
||||||
|
project("Blink")
|
||||||
|
|
||||||
|
# Product filename
|
||||||
|
set(PRODUCT_NAME blink)
|
||||||
|
|
||||||
|
set(F_CPU 16000000UL)
|
||||||
|
set(MCU atmega328p)
|
||||||
|
set(BAUD 9600)
|
||||||
|
|
||||||
|
set(PROG_TYPE arduino)
|
||||||
|
set(PROG_PORT /dev/ttyACM0)
|
||||||
|
|
||||||
|
|
||||||
|
set(CMAKE_SYSTEM_NAME Generic)
|
||||||
|
set(CMAKE_CXX_COMPILER avr-g++)
|
||||||
|
set(CMAKE_C_COMPILER avr-gcc)
|
||||||
|
set(CMAKE_ASM_COMPILER avr-gcc)
|
||||||
|
|
||||||
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||||
|
|
||||||
|
|
||||||
|
add_definitions(
|
||||||
|
-DF_CPU=${F_CPU}
|
||||||
|
-DBAUD=${BAUD}
|
||||||
|
)
|
||||||
|
|
||||||
|
include_directories(SYSTEM /usr/avr/include)
|
||||||
|
|
||||||
|
set(CMAKE_EXE_LINKER_FLAGS -mmcu=${MCU})
|
||||||
|
|
||||||
|
add_compile_options(
|
||||||
|
-mmcu=${MCU} # MCU
|
||||||
|
-std=gnu++17
|
||||||
|
-Os # optimize
|
||||||
|
-Wall # enable warnings
|
||||||
|
-Wno-main
|
||||||
|
-Wundef
|
||||||
|
-pedantic
|
||||||
|
-Werror
|
||||||
|
-Wfatal-errors
|
||||||
|
-Wl,--relax,--gc-sections
|
||||||
|
-g
|
||||||
|
-gdwarf-2
|
||||||
|
-funsigned-char # a few optimizations
|
||||||
|
-funsigned-bitfields
|
||||||
|
-fpack-struct
|
||||||
|
-fshort-enums
|
||||||
|
-ffunction-sections
|
||||||
|
-fdata-sections
|
||||||
|
-fno-split-wide-types
|
||||||
|
-fno-tree-scev-cprop
|
||||||
|
)
|
||||||
|
|
||||||
|
# Create one target
|
||||||
|
add_executable(${PRODUCT_NAME}
|
||||||
|
src/blink.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
# Rename the output to .elf as we will create multiple files
|
||||||
|
set_target_properties(${PRODUCT_NAME} PROPERTIES OUTPUT_NAME ${PRODUCT_NAME}.elf)
|
||||||
|
|
||||||
|
# Strip binary for upload
|
||||||
|
add_custom_target(strip ALL avr-strip ${PRODUCT_NAME}.elf DEPENDS ${PRODUCT_NAME})
|
||||||
|
|
||||||
|
# Transform binary into hex file, we ignore the eeprom segments in the step
|
||||||
|
add_custom_target(hex ALL avr-objcopy -R .eeprom -O ihex ${PRODUCT_NAME}.elf ${PRODUCT_NAME}.hex DEPENDS strip)
|
||||||
|
# Transform binary into hex file, this is the eeprom part (empty if you don't
|
||||||
|
# use eeprom static variables)
|
||||||
|
add_custom_target(eeprom avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 -O ihex ${PRODUCT_NAME}.elf ${PRODUCT_NAME}.eep DEPENDS strip)
|
||||||
|
|
||||||
|
# Upload the firmware with avrdude
|
||||||
|
add_custom_target(upload avrdude -c ${PROG_TYPE} -P ${PROG_PORT} -p ${MCU} -U flash:w:${PRODUCT_NAME}.hex DEPENDS hex)
|
||||||
|
|
||||||
|
# Upload the eeprom with avrdude
|
||||||
|
add_custom_target(upload_eeprom avrdude -c ${PROG_TYPE} -P ${PROG_PORT} -p ${MCU} -U eeprom:w:${PRODUCT_NAME}.eep DEPENDS eeprom)
|
||||||
|
|
||||||
|
# Clean extra files
|
||||||
|
set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${PRODUCT_NAME}.hex;${PRODUCT_NAME}.eeprom;${PRODUCT_NAME}.lst")
|
15
src/blink.cpp
Normal file
15
src/blink.cpp
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
#include <avr/io.h>
|
||||||
|
#include <util/delay.h>
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
DDRC |= (1 << PC5);
|
||||||
|
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
PORTC ^= (1 << PC5);
|
||||||
|
_delay_ms(250);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in a new issue