Initial project, blinks led on PC5 (analog input 5)

master
mandlm 2020-08-15 18:07:30 +02:00
commit 64aca0c2fa
Signed by: mandlm
GPG Key ID: 4AA25D647AA54CC7
3 changed files with 99 additions and 0 deletions

3
.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
/build/
/.clangd/
compile_commands.json

81
CMakeLists.txt Normal file
View 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
View 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;
}