diff --git a/.cproject b/.cproject index 48e4975..3172efb 100644 --- a/.cproject +++ b/.cproject @@ -13,35 +13,29 @@ - + - - + \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..3b46cb4 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,77 @@ +cmake_minimum_required(VERSION 3.13) +project(SIMMProgrammer) + +# Create a list of all source files common to all architectures +set(SOURCES + drivers/mcp23s17.c + drivers/parallel_flash.c + tests/simm_electrical_test.c + main.c + simm_programmer.c +) + +# Create a list of all source files specific to the AVR +set(AVRSOURCES + hal/at90usb646/LUFA/Drivers/USB/Class/Device/CDCClassDevice.c + hal/at90usb646/LUFA/Drivers/USB/Core/AVR8/Device_AVR8.c + hal/at90usb646/LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.c + hal/at90usb646/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.c + hal/at90usb646/LUFA/Drivers/USB/Core/AVR8/Host_AVR8.c + hal/at90usb646/LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.c + hal/at90usb646/LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.c + hal/at90usb646/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.c + hal/at90usb646/LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.c + hal/at90usb646/LUFA/Drivers/USB/Core/ConfigDescriptor.c + hal/at90usb646/LUFA/Drivers/USB/Core/DeviceStandardReq.c + hal/at90usb646/LUFA/Drivers/USB/Core/Events.c + hal/at90usb646/LUFA/Drivers/USB/Core/USBTask.c + hal/at90usb646/board.c + hal/at90usb646/cdc_device_definition.c + hal/at90usb646/Descriptors.c + hal/at90usb646/gpio.c + hal/at90usb646/parallel_bus.c + hal/at90usb646/spi.c + hal/at90usb646/usbcdc.c +) + +add_executable(SIMMProgrammer.elf ${SOURCES} ${AVRSOURCES}) + +# Common compiler options +target_compile_options(SIMMProgrammer.elf PRIVATE + -Wall -Os -std=gnu99 -ffunction-sections -fdata-sections +) + +# Common linker options +target_link_options(SIMMProgrammer.elf PRIVATE + -Wl,-Map,SIMMProgrammer.map -Wl,--gc-sections +) + +# AVR-specific include paths +target_include_directories(SIMMProgrammer.elf PRIVATE + hal/at90usb646 +) + +# AVR-specific compiler definitions +target_compile_definitions(SIMMProgrammer.elf PRIVATE + F_CPU=16000000UL + F_USB=16000000UL + USE_LUFA_CONFIG_HEADER +) + +# AVR-specific compiler options +target_compile_options(SIMMProgrammer.elf PRIVATE + -fpack-struct -fshort-enums -funsigned-char -funsigned-bitfields -mmcu=at90usb646 +) + +# AVR-specific linker options +target_link_options(SIMMProgrammer.elf PRIVATE + -mmcu=at90usb646 +) + +# AVR-specific command/target to generate .bin file from the ELF file. This program +# is flashed using a bootloader, so there's no need to generate a HEX file. +add_custom_command(OUTPUT SIMMProgrammer.bin + COMMAND ${CMAKE_OBJCOPY} -R .eeprom -O binary SIMMProgrammer.elf SIMMProgrammer.bin + DEPENDS SIMMProgrammer.elf +) +add_custom_target(SIMMProgrammer_bin ALL DEPENDS SIMMProgrammer.bin) diff --git a/hal/at90usb646/LUFAConfig.h b/hal/at90usb646/LUFAConfig.h new file mode 100644 index 0000000..bf683c7 --- /dev/null +++ b/hal/at90usb646/LUFAConfig.h @@ -0,0 +1,160 @@ +/* + LUFA Library + Copyright (C) Dean Camera, 2012. + + dean [at] fourwalledcubicle [dot] com + www.lufa-lib.org +*/ + +/* + Copyright 2012 Dean Camera (dean [at] fourwalledcubicle [dot] com) + + Permission to use, copy, modify, distribute, and sell this + software and its documentation for any purpose is hereby granted + without fee, provided that the above copyright notice appear in + all copies and that both that the copyright notice and this + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the + software without specific, written prior permission. + + The author disclaim all warranties with regard to this + software, including all implied warranties of merchantability + and fitness. In no event shall the author be liable for any + special, indirect or consequential damages or any damages + whatsoever resulting from loss of use, data or profits, whether + in an action of contract, negligence or other tortious action, + arising out of or in connection with the use or performance of + this software. +*/ + +/* + This is a header file which can be used to configure LUFA's + compile time options, as an alternative to the compile time + constants supplied through a makefile. To use this configuration + header, copy this into your project's root directory and supply + the \c USE_LUFA_CONFIG_HEADER token to the compiler so that it is + defined in all compiled source files. + + For information on what each token does, refer to the LUFA + manual section "Summary of Compile Tokens". +*/ + +#ifndef __LUFA_CONFIG_H__ +#define __LUFA_CONFIG_H__ + + #if (ARCH == ARCH_AVR8) + + /* Non-USB Related Configuration Tokens: */ +// #define DISABLE_TERMINAL_CODES + + /* USB Class Driver Related Tokens: */ +// #define HID_HOST_BOOT_PROTOCOL_ONLY +// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} +// #define HID_USAGE_STACK_DEPTH {Insert Value Here} +// #define HID_MAX_COLLECTIONS {Insert Value Here} +// #define HID_MAX_REPORTITEMS {Insert Value Here} +// #define HID_MAX_REPORT_IDS {Insert Value Here} +// #define NO_CLASS_DRIVER_AUTOFLUSH + + /* General USB Driver Related Tokens: */ + #define ORDERED_EP_CONFIG + #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) + #define USB_DEVICE_ONLY +// #define USB_HOST_ONLY +// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} +// #define NO_LIMITED_CONTROLLER_CONNECT +// #define NO_SOF_EVENTS + + /* USB Device Mode Driver Related Tokens: */ +// #define USE_RAM_DESCRIPTORS + #define USE_FLASH_DESCRIPTORS +// #define USE_EEPROM_DESCRIPTORS +// #define NO_INTERNAL_SERIAL + #define FIXED_CONTROL_ENDPOINT_SIZE 8 + #define DEVICE_STATE_AS_GPIOR 0 + #define FIXED_NUM_CONFIGURATIONS 1 +// #define CONTROL_ONLY_DEVICE +// #define INTERRUPT_CONTROL_ENDPOINT +// #define NO_DEVICE_REMOTE_WAKEUP +// #define NO_DEVICE_SELF_POWER + + /* USB Host Mode Driver Related Tokens: */ +// #define HOST_STATE_AS_GPIOR {Insert Value Here} +// #define USB_HOST_TIMEOUT_MS {Insert Value Here} +// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} +// #define NO_AUTO_VBUS_MANAGEMENT +// #define INVERTED_VBUS_ENABLE_LINE + + #elif (ARCH == ARCH_XMEGA) + + /* Non-USB Related Configuration Tokens: */ +// #define DISABLE_TERMINAL_CODES + + /* USB Class Driver Related Tokens: */ +// #define HID_HOST_BOOT_PROTOCOL_ONLY +// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} +// #define HID_USAGE_STACK_DEPTH {Insert Value Here} +// #define HID_MAX_COLLECTIONS {Insert Value Here} +// #define HID_MAX_REPORTITEMS {Insert Value Here} +// #define HID_MAX_REPORT_IDS {Insert Value Here} +// #define NO_CLASS_DRIVER_AUTOFLUSH + + /* General USB Driver Related Tokens: */ +// #define USE_STATIC_OPTIONS {Insert Value Here} +// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} +// #define NO_LIMITED_CONTROLLER_CONNECT +// #define NO_SOF_EVENTS + + /* USB Device Mode Driver Related Tokens: */ +// #define USE_RAM_DESCRIPTORS +// #define USE_FLASH_DESCRIPTORS +// #define USE_EEPROM_DESCRIPTORS +// #define NO_INTERNAL_SERIAL +// #define FIXED_CONTROL_ENDPOINT_SIZE {Insert Value Here} +// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} +// #define FIXED_NUM_CONFIGURATIONS {Insert Value Here} +// #define CONTROL_ONLY_DEVICE +// #define NO_DEVICE_REMOTE_WAKEUP +// #define NO_DEVICE_SELF_POWER + + #elif (ARCH == ARCH_UC3) + + /* Non-USB Related Configuration Tokens: */ +// #define DISABLE_TERMINAL_CODES + + /* USB Class Driver Related Tokens: */ +// #define HID_HOST_BOOT_PROTOCOL_ONLY +// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} +// #define HID_USAGE_STACK_DEPTH {Insert Value Here} +// #define HID_MAX_COLLECTIONS {Insert Value Here} +// #define HID_MAX_REPORTITEMS {Insert Value Here} +// #define HID_MAX_REPORT_IDS {Insert Value Here} +// #define NO_CLASS_DRIVER_AUTOFLUSH + + /* General USB Driver Related Tokens: */ +// #define ORDERED_EP_CONFIG +// #define USE_STATIC_OPTIONS {Insert Value Here} +// #define USB_DEVICE_ONLY +// #define USB_HOST_ONLY +// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} +// #define NO_SOF_EVENTS + + /* USB Device Mode Driver Related Tokens: */ +// #define NO_INTERNAL_SERIAL +// #define FIXED_CONTROL_ENDPOINT_SIZE {Insert Value Here} +// #define FIXED_NUM_CONFIGURATIONS {Insert Value Here} +// #define CONTROL_ONLY_DEVICE +// #define INTERRUPT_CONTROL_ENDPOINT +// #define NO_DEVICE_REMOTE_WAKEUP +// #define NO_DEVICE_SELF_POWER + + /* USB Host Mode Driver Related Tokens: */ +// #define USB_HOST_TIMEOUT_MS {Insert Value Here} +// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} +// #define NO_AUTO_VBUS_MANAGEMENT +// #define INVERTED_VBUS_ENABLE_LINE + + #endif +#endif + diff --git a/toolchain-avr.cmake b/toolchain-avr.cmake new file mode 100644 index 0000000..6a31fbd --- /dev/null +++ b/toolchain-avr.cmake @@ -0,0 +1,15 @@ +# This will tell CMake that we are cross compiling +set(CMAKE_SYSTEM_NAME Generic) +set(CMAKE_SYSTEM_VERSION 1) +set(CMAKE_SYSTEM_PROCESSOR avr) + +# Make sure it knows what binaries to use +set(CMAKE_AR avr-ar) +set(CMAKE_ASM_COMPILER avr-as) +set(CMAKE_C_COMPILER avr-gcc) +set(CMAKE_CXX_COMPILER avr-g++) +set(CMAKE_LINKER avr-ld) +set(CMAKE_OBJCOPY avr-objcopy) +set(CMAKE_RANLIB avr-ranlib) +set(CMAKE_SIZE avr-size) +set(CMAKE_STRIP avr-strip)