From 679210973a65c7ab5b4ea570271b95648ab08209 Mon Sep 17 00:00:00 2001 From: Manfred Steiner Date: Sat, 13 Jul 2024 17:40:31 +0200 Subject: [PATCH] Verzeichnis bootloader entfernt --- bootloader/.vscode/c_cpp_properties.json | 18 - bootloader/.vscode/launch.json | 38 - bootloader/.vscode/settings.json | 6 - bootloader/.vscode/tasks.json | 23 - bootloader/ATmegaBOOT_168.c | 1077 ---------------------- bootloader/ATmegaBOOT_168_atmega644p.hex | 98 -- bootloader/Makefile | 253 ----- 7 files changed, 1513 deletions(-) delete mode 100644 bootloader/.vscode/c_cpp_properties.json delete mode 100644 bootloader/.vscode/launch.json delete mode 100644 bootloader/.vscode/settings.json delete mode 100644 bootloader/.vscode/tasks.json delete mode 100644 bootloader/ATmegaBOOT_168.c delete mode 100644 bootloader/ATmegaBOOT_168_atmega644p.hex delete mode 100755 bootloader/Makefile diff --git a/bootloader/.vscode/c_cpp_properties.json b/bootloader/.vscode/c_cpp_properties.json deleted file mode 100644 index 72a37cf..0000000 --- a/bootloader/.vscode/c_cpp_properties.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "configurations": [ - { - "name": "Linux AVR", - "includePath": [ - "/usr/lib/avr/include/**", - "/usr/lib/gcc/avr/**" - ], - "defines": [], - "compilerPath": "/usr/bin/avr-gcc", - "compilerArgs": [ "-mmcu=atmega644p", "-DF_CPU=12000000", "-Os", "-DMAX_TIME_COUNT=F_CPU>>4", "-DNUM_LED_FLASHES=1", "-DBAUD_RATE=115200", "-DDOUBLE_SPEED" ], - "cStandard": "c11", - "cppStandard": "gnu++11", - "intelliSenseMode": "linux-gcc-x64" - } - ], - "version": 4 -} \ No newline at end of file diff --git a/bootloader/.vscode/launch.json b/bootloader/.vscode/launch.json deleted file mode 100644 index 3d98d07..0000000 --- a/bootloader/.vscode/launch.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - { - "name": "Build", - // "request": "launch", - "type": "node-terminal", - "preLaunchTask": "build" - },{ - "name": "Flash", - // "request": "launch", - "type": "node-terminal", - "preLaunchTask": "flash" - },{ - "name": "Clean", - // "request": "launch", - "type": "node-terminal", - "preLaunchTask": "clean" - },{ - - // es muss mit simuc --board arduino dist/programm.elf der Simulator - // gestartet werden. Dessen gdb-stub öffnet auf localhost:1234 einen Port - "name": "Start Gdb", - "type": "cppdbg", - "request": "launch", - "program": "${workspaceFolder}/dist/atmega328p.elf", - "cwd": "${workspaceFolder}", - "externalConsole": false, - "MIMode": "gdb", - "miDebuggerPath": "/usr/bin/avr-gdb", - "miDebuggerServerAddress": ":1234", - "preLaunchTask": "build" - } - ] -} \ No newline at end of file diff --git a/bootloader/.vscode/settings.json b/bootloader/.vscode/settings.json deleted file mode 100644 index 0af80d1..0000000 --- a/bootloader/.vscode/settings.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "cSpell.words": [], - "cSpell.ignorePaths": [ - "**/*.json", "**/*.c", "**/*.h", "**/Makefile" - ] -} diff --git a/bootloader/.vscode/tasks.json b/bootloader/.vscode/tasks.json deleted file mode 100644 index 74fb1c7..0000000 --- a/bootloader/.vscode/tasks.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - // See https://go.microsoft.com/fwlink/?LinkId=733558 - // for the documentation about the tasks.json format - "version": "2.0.0", - "tasks": [{ - "label": "build", - "type": "shell", - "command": "make", - "problemMatcher":[ - "$gcc" - ] - },{ - "label": "clean", - "type": "shell", - "command": "make", - "args": [ "clean" ], - },{ - "label": "flash", - "type": "shell", - "command": "make", - "args": [ "flash" ], - }] -} \ No newline at end of file diff --git a/bootloader/ATmegaBOOT_168.c b/bootloader/ATmegaBOOT_168.c deleted file mode 100644 index f598702..0000000 --- a/bootloader/ATmegaBOOT_168.c +++ /dev/null @@ -1,1077 +0,0 @@ -/**********************************************************/ -/* Serial Bootloader for Atmel megaAVR Controllers */ -/* */ -/* tested with ATmega8, ATmega128 and ATmega168 */ -/* should work with other mega's, see code for details */ -/* */ -/* ATmegaBOOT.c */ -/* */ -/* */ -/* 20090308: integrated Mega changes into main bootloader */ -/* source by D. Mellis */ -/* 20080930: hacked for Arduino Mega (with the 1280 */ -/* processor, backwards compatible) */ -/* by D. Cuartielles */ -/* 20070626: hacked for Arduino Diecimila (which auto- */ -/* resets when a USB connection is made to it) */ -/* by D. Mellis */ -/* 20060802: hacked for Arduino by D. Cuartielles */ -/* based on a previous hack by D. Mellis */ -/* and D. Cuartielles */ -/* */ -/* Monitor and debug functions were added to the original */ -/* code by Dr. Erik Lins, chip45.com. (See below) */ -/* */ -/* Thanks to Karl Pitrich for fixing a bootloader pin */ -/* problem and more informative LED blinking! */ -/* */ -/* For the latest version see: */ -/* http://www.chip45.com/ */ -/* */ -/* ------------------------------------------------------ */ -/* */ -/* based on stk500boot.c */ -/* Copyright (c) 2003, Jason P. Kyle */ -/* All rights reserved. */ -/* see avr1.org for original file and information */ -/* */ -/* This program is free software; you can redistribute it */ -/* and/or modify it under the terms of the GNU General */ -/* Public License as published by the Free Software */ -/* Foundation; either version 2 of the License, or */ -/* (at your option) any later version. */ -/* */ -/* This program is distributed in the hope that it will */ -/* be useful, but WITHOUT ANY WARRANTY; without even the */ -/* implied warranty of MERCHANTABILITY or FITNESS FOR A */ -/* PARTICULAR PURPOSE. See the GNU General Public */ -/* License for more details. */ -/* */ -/* You should have received a copy of the GNU General */ -/* Public License along with this program; if not, write */ -/* to the Free Software Foundation, Inc., */ -/* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -/* */ -/* Licence can be viewed at */ -/* http://www.fsf.org/licenses/gpl.txt */ -/* */ -/* Target = Atmel AVR m128,m64,m32,m16,m8,m162,m163,m169, */ -/* m8515,m8535. ATmega161 has a very small boot block so */ -/* isn't supported. */ -/* */ -/* Tested with m168 */ -/**********************************************************/ - - -/* some includes */ -#include -#include -#include -#include -#include -#include - -/* the current avr-libc eeprom functions do not support the ATmega168 */ -/* own eeprom write/read functions are used instead */ -#if !defined(__AVR_ATmega168__) || !defined(__AVR_ATmega328P__) || !defined(__AVR_ATmega328__) || defined(__AVR_ATmega644P__) -#include -#endif - -/* Use the F_CPU defined in Makefile */ - -/* 20060803: hacked by DojoCorp */ -/* 20070626: hacked by David A. Mellis to decrease waiting time for auto-reset */ -/* set the waiting time for the bootloader */ -/* get this from the Makefile instead */ -/* #define MAX_TIME_COUNT (F_CPU>>4) */ - -/* 20070707: hacked by David A. Mellis - after this many errors give up and launch application */ -#define MAX_ERROR_COUNT 5 - -/* set the UART baud rate */ -/* 20060803: hacked by DojoCorp */ -//#define BAUD_RATE 115200 -#ifndef BAUD_RATE -#define BAUD_RATE 19200 -#endif - - -/* SW_MAJOR and MINOR needs to be updated from time to time to avoid warning message from AVR Studio */ -/* never allow AVR Studio to do an update !!!! */ -#define HW_VER 0x02 -#define SW_MAJOR 0x01 -#define SW_MINOR 0x10 - - -/* Adjust to suit whatever pin your hardware uses to enter the bootloader */ -/* ATmega128 has two UARTS so two pins are used to enter bootloader and select UART */ -/* ATmega1280 has four UARTS, but for Arduino Mega, we will only use RXD0 to get code */ -/* BL0... means UART0, BL1... means UART1 */ -#ifdef __AVR_ATmega128__ -#define BL_DDR DDRF -#define BL_PORT PORTF -#define BL_PIN PINF -#define BL0 PINF7 -#define BL1 PINF6 -#elif defined __AVR_ATmega1280__ -/* we just don't do anything for the MEGA and enter bootloader on reset anyway*/ -#else -/* other ATmegas have only one UART, so only one pin is defined to enter bootloader */ -#define BL_DDR DDRD -#define BL_PORT PORTD -#define BL_PIN PIND -#define BL PIND6 -#endif - - -/* onboard LED is used to indicate, that the bootloader was entered (3x flashing) */ -/* if monitor functions are included, LED goes on after monitor was entered */ -#if defined __AVR_ATmega128__ || defined __AVR_ATmega1280__ -/* Onboard LED is connected to pin PB7 (e.g. Crumb128, PROBOmega128, Savvy128, Arduino Mega) */ -#define LED_DDR DDRB -#define LED_PORT PORTB -#define LED_PIN PINB -#define LED PINB7 -#elif __AVR_ATmega644P__ -#define LED_DDR DDRC -#define LED_PORT PORTC -#define LED_PIN PINC -#define LED PINC4 - -#else -/* Onboard LED is connected to pin PB5 in Arduino NG, Diecimila, and Duomilanuove */ -/* other boards like e.g. Crumb8, Crumb168 are using PB2 */ -#define LED_DDR DDRB -#define LED_PORT PORTB -#define LED_PIN PINB -#define LED PINB5 -#endif - - -/* monitor functions will only be compiled when using ATmega128, due to bootblock size constraints */ -#if defined(__AVR_ATmega128__) || defined(__AVR_ATmega1280__) -#define MONITOR 1 -#endif - - -/* define various device id's */ -/* manufacturer byte is always the same */ -#define SIG1 0x1E // Yep, Atmel is the only manufacturer of AVR micros. Single source :( - -#if defined __AVR_ATmega1280__ -#define SIG2 0x97 -#define SIG3 0x03 -#define PAGE_SIZE 0x80U //128 words - -#elif defined __AVR_ATmega1281__ -#define SIG2 0x97 -#define SIG3 0x04 -#define PAGE_SIZE 0x80U //128 words - -#elif defined __AVR_ATmega128__ -#define SIG2 0x97 -#define SIG3 0x02 -#define PAGE_SIZE 0x80U //128 words - -#elif defined __AVR_ATmega64__ -#define SIG2 0x96 -#define SIG3 0x02 -#define PAGE_SIZE 0x80U //128 words - -#elif defined __AVR_ATmega32__ -#define SIG2 0x95 -#define SIG3 0x02 -#define PAGE_SIZE 0x40U //64 words - -#elif defined __AVR_ATmega16__ -#define SIG2 0x94 -#define SIG3 0x03 -#define PAGE_SIZE 0x40U //64 words - -#elif defined __AVR_ATmega8__ -#define SIG2 0x93 -#define SIG3 0x07 -#define PAGE_SIZE 0x20U //32 words - -#elif defined __AVR_ATmega88__ -#define SIG2 0x93 -#define SIG3 0x0a -#define PAGE_SIZE 0x20U //32 words - -#elif defined __AVR_ATmega168__ -#define SIG2 0x94 -#define SIG3 0x06 -#define PAGE_SIZE 0x40U //64 words - -#elif defined __AVR_ATmega328P__ -#define SIG2 0x95 -#define SIG3 0x0F -#define PAGE_SIZE 0x40U //64 words - -#elif defined __AVR_ATmega328__ -#define SIG2 0x95 -#define SIG3 0x14 -#define PAGE_SIZE 0x40U //64 words - -#elif defined __AVR_ATmega644P__ -#define SIG2 0x96 -#define SIG3 0x0A -#define PAGE_SIZE 0x80U //128 words - -#elif defined __AVR_ATmega162__ -#define SIG2 0x94 -#define SIG3 0x04 -#define PAGE_SIZE 0x40U //64 words - -#elif defined __AVR_ATmega163__ -#define SIG2 0x94 -#define SIG3 0x02 -#define PAGE_SIZE 0x40U //64 words - -#elif defined __AVR_ATmega169__ -#define SIG2 0x94 -#define SIG3 0x05 -#define PAGE_SIZE 0x40U //64 words - -#elif defined __AVR_ATmega8515__ -#define SIG2 0x93 -#define SIG3 0x06 -#define PAGE_SIZE 0x20U //32 words - -#elif defined __AVR_ATmega8535__ -#define SIG2 0x93 -#define SIG3 0x08 -#define PAGE_SIZE 0x20U //32 words -#endif - - -/* function prototypes */ -void putch(char); -char getch(void); -void getNch(uint8_t); -void byte_response(uint8_t); -void nothing_response(void); -char gethex(void); -void puthex(char); -void flash_led(uint8_t); - -/* some variables */ -union address_union { - uint16_t word; - uint8_t byte[2]; -} address; - -union length_union { - uint16_t word; - uint8_t byte[2]; -} length; - -struct flags_struct { - unsigned eeprom : 1; - unsigned rampz : 1; -} flags; - -uint8_t buff[256]; -uint8_t address_high; - -uint8_t pagesz=0x80; - -uint8_t i; -uint8_t bootuart = 0; - -uint8_t error_count = 0; - -void (*app_start)(void) = 0x0000; - - -/* main program starts here */ -int main(void) -{ - uint8_t ch,ch2; - uint16_t w; - - -#ifdef __AVR_ATmega644P__ - DDRC = 0x1C; - PORTC = 0; -#endif - -#ifdef WATCHDOG_MODS - ch = MCUSR; - MCUSR = 0; - - WDTCSR |= _BV(WDCE) | _BV(WDE); - WDTCSR = 0; - - // Check if the WDT was used to reset, in which case we dont bootload and skip straight to the code. woot. - if (! (ch & _BV(EXTRF))) // if its a not an external reset... - app_start(); // skip bootloader -#else - asm volatile("nop\n\t"); -#endif - - /* set pin direction for bootloader pin and enable pullup */ - /* for ATmega128, two pins need to be initialized */ -#ifdef __AVR_ATmega128__ - BL_DDR &= ~_BV(BL0); - BL_DDR &= ~_BV(BL1); - BL_PORT |= _BV(BL0); - BL_PORT |= _BV(BL1); -#else - /* We run the bootloader regardless of the state of this pin. Thus, don't - put it in a different state than the other pins. --DAM, 070709 - This also applies to Arduino Mega -- DC, 080930 - BL_DDR &= ~_BV(BL); - BL_PORT |= _BV(BL); - */ -#endif - - -#ifdef __AVR_ATmega128__ - /* check which UART should be used for booting */ - if(bit_is_clear(BL_PIN, BL0)) { - bootuart = 1; - } - else if(bit_is_clear(BL_PIN, BL1)) { - bootuart = 2; - } -#endif - -#if defined __AVR_ATmega1280__ - /* the mega1280 chip has four serial ports ... we could eventually use any of them, or not? */ - /* however, we don't wanna confuse people, to avoid making a mess, we will stick to RXD0, TXD0 */ - bootuart = 1; -#endif - - /* check if flash is programmed already, if not start bootloader anyway */ - if(pgm_read_byte_near(0x0000) != 0xFF) { - -#ifdef __AVR_ATmega128__ - /* no UART was selected, start application */ - if(!bootuart) { - app_start(); - } -#else - /* check if bootloader pin is set low */ - /* we don't start this part neither for the m8, nor m168 */ - //if(bit_is_set(BL_PIN, BL)) { - // app_start(); - // } -#endif - } - -#ifdef __AVR_ATmega128__ - /* no bootuart was selected, default to uart 0 */ - if(!bootuart) { - bootuart = 1; - } -#endif - - - /* initialize UART(s) depending on CPU defined */ -#if defined(__AVR_ATmega128__) || defined(__AVR_ATmega1280__) - if(bootuart == 1) { - UBRR0L = (uint8_t)(F_CPU/(BAUD_RATE*16L)-1); - UBRR0H = (F_CPU/(BAUD_RATE*16L)-1) >> 8; - UCSR0A = 0x00; - UCSR0C = 0x06; - UCSR0B = _BV(TXEN0)|_BV(RXEN0); - } - if(bootuart == 2) { - UBRR1L = (uint8_t)(F_CPU/(BAUD_RATE*16L)-1); - UBRR1H = (F_CPU/(BAUD_RATE*16L)-1) >> 8; - UCSR1A = 0x00; - UCSR1C = 0x06; - UCSR1B = _BV(TXEN1)|_BV(RXEN1); - } -#elif defined __AVR_ATmega163__ - UBRR = (uint8_t)(F_CPU/(BAUD_RATE*16L)-1); - UBRRHI = (F_CPU/(BAUD_RATE*16L)-1) >> 8; - UCSRA = 0x00; - UCSRB = _BV(TXEN)|_BV(RXEN); -#elif defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) || defined (__AVR_ATmega328__) || defined __AVR_ATmega644P__ - -#ifdef DOUBLE_SPEED - UCSR0A = (1<> 8; -#else - UBRR0L = (uint8_t)(F_CPU/(BAUD_RATE*16L)-1); - UBRR0H = (F_CPU/(BAUD_RATE*16L)-1) >> 8; -#endif - - UCSR0B = (1<>8; // set baud rate - UBRRL = (((F_CPU/BAUD_RATE)/16)-1); - UCSRB = (1<> 8; - UCSRA = 0x00; - UCSRC = 0x06; - UCSRB = _BV(TXEN)|_BV(RXEN); -#endif - -#if defined __AVR_ATmega1280__ - /* Enable internal pull-up resistor on pin D0 (RX), in order - to suppress line noise that prevents the bootloader from - timing out (DAM: 20070509) */ - /* feature added to the Arduino Mega --DC: 080930 */ - DDRE &= ~_BV(PINE0); - PORTE |= _BV(PINE0); -#endif - - - /* set LED pin as output */ - LED_DDR |= _BV(LED); - - - /* flash onboard LED to signal entering of bootloader */ -#if defined(__AVR_ATmega128__) || defined(__AVR_ATmega1280__) - // 4x for UART0, 5x for UART1 - flash_led(NUM_LED_FLASHES + bootuart); -#else - flash_led(NUM_LED_FLASHES); -#endif - - /* 20050803: by DojoCorp, this is one of the parts provoking the - system to stop listening, cancelled from the original */ - //putch('\0'); - - /* forever loop */ - for (;;) { - - /* get character from UART */ - ch = getch(); - - /* A bunch of if...else if... gives smaller code than switch...case ! */ - - /* Hello is anyone home ? */ - if(ch=='0') { - nothing_response(); - } - - - /* Request programmer ID */ - /* Not using PROGMEM string due to boot block in m128 being beyond 64kB boundary */ - /* Would need to selectively manipulate RAMPZ, and it's only 9 characters anyway so who cares. */ - else if(ch=='1') { - if (getch() == ' ') { - putch(0x14); - putch('A'); - putch('V'); - putch('R'); - putch(' '); - putch('I'); - putch('S'); - putch('P'); - putch(0x10); - } else { - if (++error_count == MAX_ERROR_COUNT) - app_start(); - } - } - - - /* AVR ISP/STK500 board commands DON'T CARE so default nothing_response */ - else if(ch=='@') { - ch2 = getch(); - if (ch2>0x85) getch(); - nothing_response(); - } - - - /* AVR ISP/STK500 board requests */ - else if(ch=='A') { - ch2 = getch(); - if(ch2==0x80) byte_response(HW_VER); // Hardware version - else if(ch2==0x81) byte_response(SW_MAJOR); // Software major version - else if(ch2==0x82) byte_response(SW_MINOR); // Software minor version - else if(ch2==0x98) byte_response(0x03); // Unknown but seems to be required by avr studio 3.56 - else byte_response(0x00); // Covers various unnecessary responses we don't care about - } - - - /* Device Parameters DON'T CARE, DEVICE IS FIXED */ - else if(ch=='B') { - getNch(20); - nothing_response(); - } - - - /* Parallel programming stuff DON'T CARE */ - else if(ch=='E') { - getNch(5); - nothing_response(); - } - - - /* P: Enter programming mode */ - /* R: Erase device, don't care as we will erase one page at a time anyway. */ - else if(ch=='P' || ch=='R') { - nothing_response(); - } - - - /* Leave programming mode */ - else if(ch=='Q') { - nothing_response(); -#ifdef WATCHDOG_MODS - // autoreset via watchdog (sneaky!) - WDTCSR = _BV(WDE); - while (1); // 16 ms -#endif - } - - - /* Set address, little endian. EEPROM in bytes, FLASH in words */ - /* Perhaps extra address bytes may be added in future to support > 128kB FLASH. */ - /* This might explain why little endian was used here, big endian used everywhere else. */ - else if(ch=='U') { - address.byte[0] = getch(); - address.byte[1] = getch(); - nothing_response(); - } - - - /* Universal SPI programming command, disabled. Would be used for fuses and lock bits. */ - else if(ch=='V') { - if (getch() == 0x30) { - getch(); - ch = getch(); - getch(); - if (ch == 0) { - byte_response(SIG1); - } else if (ch == 1) { - byte_response(SIG2); - } else { - byte_response(SIG3); - } - } else { - getNch(3); - byte_response(0x00); - } - } - - - /* Write memory, length is big endian and is in bytes */ - else if(ch=='d') { - length.byte[1] = getch(); - length.byte[0] = getch(); - flags.eeprom = 0; - if (getch() == 'E') flags.eeprom = 1; - for (w=0;w127) address_high = 0x01; //Only possible with m128, m256 will need 3rd address byte. FIXME - else address_high = 0x00; -#if defined(__AVR_ATmega128__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega1281__) - RAMPZ = address_high; -#endif - address.word = address.word << 1; //address * 2 -> byte location - /* if ((length.byte[0] & 0x01) == 0x01) length.word++; //Even up an odd number of bytes */ - if ((length.byte[0] & 0x01)) length.word++; //Even up an odd number of bytes - cli(); //Disable interrupts, just to be sure -#if defined(EEPE) - while(bit_is_set(EECR,EEPE)); //Wait for previous EEPROM writes to complete -#else - while(bit_is_set(EECR,EEWE)); //Wait for previous EEPROM writes to complete -#endif - asm volatile( - "clr r17 \n\t" //page_word_count - "lds r30,address \n\t" //Address of FLASH location (in bytes) - "lds r31,address+1 \n\t" - "ldi r28,lo8(buff) \n\t" //Start of buffer array in RAM - "ldi r29,hi8(buff) \n\t" - "lds r24,length \n\t" //Length of data to be written (in bytes) - "lds r25,length+1 \n\t" - "length_loop: \n\t" //Main loop, repeat for number of words in block - "cpi r17,0x00 \n\t" //If page_word_count=0 then erase page - "brne no_page_erase \n\t" - "wait_spm1: \n\t" - "lds r16,%0 \n\t" //Wait for previous spm to complete - "andi r16,1 \n\t" - "cpi r16,1 \n\t" - "breq wait_spm1 \n\t" - "ldi r16,0x03 \n\t" //Erase page pointed to by Z - "sts %0,r16 \n\t" - "spm \n\t" -#ifdef __AVR_ATmega163__ - ".word 0xFFFF \n\t" - "nop \n\t" -#endif - "wait_spm2: \n\t" - "lds r16,%0 \n\t" //Wait for previous spm to complete - "andi r16,1 \n\t" - "cpi r16,1 \n\t" - "breq wait_spm2 \n\t" - - "ldi r16,0x11 \n\t" //Re-enable RWW section - "sts %0,r16 \n\t" - "spm \n\t" -#ifdef __AVR_ATmega163__ - ".word 0xFFFF \n\t" - "nop \n\t" -#endif - "no_page_erase: \n\t" - "ld r0,Y+ \n\t" //Write 2 bytes into page buffer - "ld r1,Y+ \n\t" - - "wait_spm3: \n\t" - "lds r16,%0 \n\t" //Wait for previous spm to complete - "andi r16,1 \n\t" - "cpi r16,1 \n\t" - "breq wait_spm3 \n\t" - "ldi r16,0x01 \n\t" //Load r0,r1 into FLASH page buffer - "sts %0,r16 \n\t" - "spm \n\t" - - "inc r17 \n\t" //page_word_count++ - "cpi r17,%1 \n\t" - "brlo same_page \n\t" //Still same page in FLASH - "write_page: \n\t" - "clr r17 \n\t" //New page, write current one first - "wait_spm4: \n\t" - "lds r16,%0 \n\t" //Wait for previous spm to complete - "andi r16,1 \n\t" - "cpi r16,1 \n\t" - "breq wait_spm4 \n\t" -#ifdef __AVR_ATmega163__ - "andi r30,0x80 \n\t" // m163 requires Z6:Z1 to be zero during page write -#endif - "ldi r16,0x05 \n\t" //Write page pointed to by Z - "sts %0,r16 \n\t" - "spm \n\t" -#ifdef __AVR_ATmega163__ - ".word 0xFFFF \n\t" - "nop \n\t" - "ori r30,0x7E \n\t" // recover Z6:Z1 state after page write (had to be zero during write) -#endif - "wait_spm5: \n\t" - "lds r16,%0 \n\t" //Wait for previous spm to complete - "andi r16,1 \n\t" - "cpi r16,1 \n\t" - "breq wait_spm5 \n\t" - "ldi r16,0x11 \n\t" //Re-enable RWW section - "sts %0,r16 \n\t" - "spm \n\t" -#ifdef __AVR_ATmega163__ - ".word 0xFFFF \n\t" - "nop \n\t" -#endif - "same_page: \n\t" - "adiw r30,2 \n\t" //Next word in FLASH - "sbiw r24,2 \n\t" //length-2 - "breq final_write \n\t" //Finished - "rjmp length_loop \n\t" - "final_write: \n\t" - "cpi r17,0 \n\t" - "breq block_done \n\t" - "adiw r24,2 \n\t" //length+2, fool above check on length after short page write - "rjmp write_page \n\t" - "block_done: \n\t" - "clr __zero_reg__ \n\t" //restore zero register -#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328__) || defined(__AVR_ATmega128__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega1281__) || defined(__AVR_ATmega644P__) - : "=m" (SPMCSR) : "M" (PAGE_SIZE) : "r0","r16","r17","r24","r25","r28","r29","r30","r31" - -#else - : "=m" (SPMCR) : "M" (PAGE_SIZE) : "r0","r16","r17","r24","r25","r28","r29","r30","r31" -#endif - ); - /* Should really add a wait for RWW section to be enabled, don't actually need it since we never */ - /* exit the bootloader without a power cycle anyhow */ - } - putch(0x14); - putch(0x10); - } else { - if (++error_count == MAX_ERROR_COUNT) - app_start(); - } - } - - - /* Read memory block mode, length is big endian. */ - else if(ch=='t') { - length.byte[1] = getch(); - length.byte[0] = getch(); -#if defined(__AVR_ATmega128__) || defined(__AVR_ATmega1280__) - if (address.word>0x7FFF) flags.rampz = 1; // No go with m256, FIXME - else flags.rampz = 0; -#endif - address.word = address.word << 1; // address * 2 -> byte location - if (getch() == 'E') flags.eeprom = 1; - else flags.eeprom = 0; - if (getch() == ' ') { // Command terminator - putch(0x14); - for (w=0;w < length.word;w++) { // Can handle odd and even lengths okay - if (flags.eeprom) { // Byte access EEPROM read -#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328__) || defined(__AVR_ATmega644P__) - while(EECR & (1<= 'a') { - return (a - 'a' + 0x0a); - } else if(a >= '0') { - return(a - '0'); - } - return a; -} - - -char gethex(void) { - return (gethexnib() << 4) + gethexnib(); -} - - -void puthex(char ch) { - char ah; - - ah = ch >> 4; - if(ah >= 0x0a) { - ah = ah - 0x0a + 'a'; - } else { - ah += '0'; - } - - ch &= 0x0f; - if(ch >= 0x0a) { - ch = ch - 0x0a + 'a'; - } else { - ch += '0'; - } - - putch(ah); - putch(ch); -} - - -void putch(char ch) -{ -#if defined(__AVR_ATmega128__) || defined(__AVR_ATmega1280__) - if(bootuart == 1) { - while (!(UCSR0A & _BV(UDRE0))); - UDR0 = ch; - } - else if (bootuart == 2) { - while (!(UCSR1A & _BV(UDRE1))); - UDR1 = ch; - } -#elif defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) || defined (__AVR_ATmega328__) || defined(__AVR_ATmega644P__) - while (!(UCSR0A & _BV(UDRE0))); - UDR0 = ch; -#else - /* m8,16,32,169,8515,8535,163 */ - while (!(UCSRA & _BV(UDRE))); - UDR = ch; -#endif -} - - -char getch(void) -{ -#if defined(__AVR_ATmega128__) || defined(__AVR_ATmega1280__) - uint32_t count = 0; - if(bootuart == 1) { - while(!(UCSR0A & _BV(RXC0))) { - /* 20060803 DojoCorp:: Addon coming from the previous Bootloader*/ - /* HACKME:: here is a good place to count times*/ - count++; - if (count > MAX_TIME_COUNT) - app_start(); - } - - return UDR0; - } - else if(bootuart == 2) { - while(!(UCSR1A & _BV(RXC1))) { - /* 20060803 DojoCorp:: Addon coming from the previous Bootloader*/ - /* HACKME:: here is a good place to count times*/ - count++; - if (count > MAX_TIME_COUNT) - app_start(); - } - - return UDR1; - } - return 0; -#elif defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) || defined (__AVR_ATmega328__) || defined (__AVR_ATmega644P__) - uint32_t count = 0; - while(!(UCSR0A & _BV(RXC0))){ - /* 20060803 DojoCorp:: Addon coming from the previous Bootloader*/ - /* HACKME:: here is a good place to count times*/ - count++; - if (count > MAX_TIME_COUNT) { - app_start(); - } - } - return UDR0; - -#else - /* m8,16,32,169,8515,8535,163 */ - uint32_t count = 0; - while(!(UCSRA & _BV(RXC))){ - /* 20060803 DojoCorp:: Addon coming from the previous Bootloader*/ - /* HACKME:: here is a good place to count times*/ - count++; - if (count > MAX_TIME_COUNT) - app_start(); - } - return UDR; -#endif -} - - -void getNch(uint8_t count) -{ - while(count--) { -#if defined(__AVR_ATmega128__) || defined(__AVR_ATmega1280__) - if(bootuart == 1) { - while(!(UCSR0A & _BV(RXC0))); - UDR0; - } - else if(bootuart == 2) { - while(!(UCSR1A & _BV(RXC1))); - UDR1; - } -#elif defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) || defined (__AVR_ATmega328__) || defined(__AVR_ATmega644P__) - getch(); -#else - /* m8,16,32,169,8515,8535,163 */ - /* 20060803 DojoCorp:: Addon coming from the previous Bootloader*/ - //while(!(UCSRA & _BV(RXC))); - //UDR; - getch(); // need to handle time out -#endif - } -} - - -void byte_response(uint8_t val) -{ - if (getch() == ' ') { - putch(0x14); - putch(val); - putch(0x10); - } else { - if (++error_count == MAX_ERROR_COUNT) - app_start(); - } -} - - -void nothing_response(void) -{ - if (getch() == ' ') { - putch(0x14); - putch(0x10); - } else { - if (++error_count == MAX_ERROR_COUNT) - app_start(); - } -} - -void flash_led(uint8_t count) -{ - while (count--) { - LED_PORT |= _BV(LED); - _delay_ms(100); - LED_PORT &= ~_BV(LED); - _delay_ms(100); - } -} - - -/* end of file ATmegaBOOT.c */ diff --git a/bootloader/ATmegaBOOT_168_atmega644p.hex b/bootloader/ATmegaBOOT_168_atmega644p.hex deleted file mode 100644 index 9dbe6b5..0000000 --- a/bootloader/ATmegaBOOT_168_atmega644p.hex +++ /dev/null @@ -1,98 +0,0 @@ -:107000000C943E380C945B380C945B380C945B38D1 -:107010000C945B380C945B380C945B380C945B38A4 -:107020000C945B380C945B380C945B380C945B3894 -:107030000C945B380C945B380C945B380C945B3884 -:107040000C945B380C945B380C945B380C945B3874 -:107050000C945B380C945B380C945B380C945B3864 -:107060000C945B380C945B380C945B380C945B3854 -:107070000C945B380C945B380C945B3811241FBE65 -:10708000CFEFD0E1DEBFCDBF11E0A0E0B1E0E6EE92 -:10709000F5E702C005900D92A230B107D9F722E0C2 -:1070A000A2E0B1E001C01D92AD30B207E1F70E944D -:1070B00014390C94F13A0C9400389091C00095FF6B -:1070C000FCCF8093C6000895CF93982F8595859522 -:1070D00085958595805D9F709A3014F0C7E501C055 -:1070E000C0E3C90F0E945D388C2FCF910C945D389E -:1070F000CF92DF92EF92FF92C12CD12C760180913A -:10710000C00087FD13C08FEFC81AD80AE80AF80A32 -:1071100081EBC81681E7D8068BE0E806F10478F326 -:10712000E0910201F09103010995E9CF8091C60039 -:10713000FF90EF90DF90CF900895CF930E94783822 -:10714000C82F0E945D38C13614F089EA03C0C033ED -:107150001CF080ED8C0F01C08C2FCF910895CF9340 -:107160000E949D38C82F0E949D3890E1C99F800DD4 -:107170001124CF910895CF93C82FCC2321F00E94E2 -:107180007838C150FACFCF910895CF93C82F0E947D -:107190007838803251F484E10E945D388C2F0E944F -:1071A0005D3880E1CF910C945D38809104018F5F50 -:1071B00080930401853031F4E0910201F0910301E4 -:1071C000CF910994CF9108950E947838803231F49C -:1071D00084E10E945D3880E10C945D388091040167 -:1071E0008F5F80930401853029F4E0910201F091D2 -:1071F0000301099408958823B1F0449A2FE739EAEE -:1072000093E0215030409040E1F700C000004498E6 -:107210002FE739EA93E0215030409040E1F700C079 -:1072200000008150E8CF08958CE187B918B80000BC -:10723000E0E0F0E0E49182E08093C0008CE0809395 -:10724000C4001092C50088E18093C10086E080935D -:10725000C2005098589A3C9A81E00E94FB38FF2463 -:10726000F3940E947838803309F442C08133E1F40A -:107270000E947838803209F0A6C184E10E945D380E -:1072800081E40E945D3886E50E945D3882E50E94B7 -:107290005D3880E20E945D3889E40E945D3883E5B4 -:1072A0000E945D3880E586C1803439F40E947838C8 -:1072B0008638F0F00E9478381BC08134A1F40E9417 -:1072C0007838803811F482E003C0813821F481E0FD -:1072D0000E94C538C6CF823811F480E1F9CF8839D1 -:1072E000C9F583E0F5CF823431F484E10E94BB38E4 -:1072F0000E94E438B6CF853411F485E0F7CF982F9B -:107300009D7F9035A9F3813599F3853549F40E9425 -:107310007838809306010E94783880930701E8CF7F -:107320008635D1F40E947838803389F40E94783809 -:107330000E947838182F0E947838111102C08EE10F -:10734000C7CF113011F486E9C3CF8AE0C1CF83E003 -:107350000E94BB3880E0BCCF843609F0C6C00E94D2 -:107360007838809309020E947838809308028091CF -:107370000C028E7F80930C020E947838853429F4A9 -:1073800080910C02816080930C0208E011E0209152 -:10739000080230910902C801885091408217930772 -:1073A00030F40E947838F80181938F01F0CF0E9469 -:1073B0007838803209F007C180910C0220910601D3 -:1073C0003091070180FF29C0220F331F309307013E -:1073D00020930601E8E0F1E02091080230910902D3 -:1073E000CF01885091408217930708F07CC0F9992B -:1073F000FECF809106019091070192BD81BD8191E0 -:1074000080BDFA9AF99A8091060190910701019640 -:107410009093070180930601DFCF80910701880FC9 -:10742000880B8F2180930B02220F331F30930701AB -:10743000209306018091080280FF09C08091080214 -:107440009091090201969093090280930802F894A2 -:10745000F999FECF1127E0910601F0910701C8E0EC -:10746000D1E08091080290910902103091F40091CE -:10747000570001700130D9F303E000935700E895FD -:107480000091570001700130D9F301E100935700DA -:10749000E895099019900091570001700130D9F3D7 -:1074A00001E000935700E8951395103898F01127E4 -:1074B0000091570001700130D9F305E000935700A7 -:1074C000E8950091570001700130D9F301E1009374 -:1074D0005700E8953296029709F0C7CF103011F0A7 -:1074E0000296E5CF112484E165C0843709F052C0CB -:1074F0000E947838809309020E94783880930802AD -:107500008091060190910701880F991F90930701C0 -:10751000809306010E94783890910C02853411F412 -:10752000916001C09E7F90930C020E947838803257 -:1075300009F097CE84E10E945D3800E010E0809170 -:1075400008029091090208171907B0F580910C0202 -:1075500080FF0BC0F999FECF809106019091070141 -:1075600092BD81BDF89A80B507C081FD07C0E0914A -:107570000601F091070184910E945D388091060117 -:1075800090910701019690930701809306010F5F88 -:107590001F4FD5CF8537A1F40E947838803299F4F7 -:1075A00084E10E945D388EE10E945D3886E90E9488 -:1075B0005D388AE00E945D3880E10E945D3851CEDE -:1075C000863709F4C7CE809104018F5F8093040150 -:1075D000853009F046CEE0910201F0910301099552 -:0675E00040CEF894FFCF3D -:0275E600800023 -:040000030000700089 -:00000001FF diff --git a/bootloader/Makefile b/bootloader/Makefile deleted file mode 100755 index 3d96959..0000000 --- a/bootloader/Makefile +++ /dev/null @@ -1,253 +0,0 @@ -# Makefile for ATmegaBOOT -# E.Lins, 18.7.2005 -# -# Instructions -# -# To make bootloader .hex file: -# make diecimila -# make lilypad -# make ng -# etc... -# -# To burn bootloader .hex file: -# make diecimila_isp -# make lilypad_isp -# make ng_isp -# etc... - -# program name should not be changed... -PROGRAM = ATmegaBOOT_168 - -# enter the parameters for the avrdude isp tool -ISPTOOL = stk500v2 -ISPPORT = usb -ISPSPEED = -b 115200 - -MCU_TARGET = atmega168 -LDSECTION = --section-start=.text=0x3800 - -# the efuse should really be 0xf8; since, however, only the lower -# three bits of that byte are used on the atmega168, avrdude gets -# confused if you specify 1's for the higher bits, see: -# http://tinker.it/now/2007/02/24/the-tale-of-avrdude-atmega168-and-extended-bits-fuses/ -# -# similarly, the lock bits should be 0xff instead of 0x3f (to -# unlock the bootloader section) and 0xcf instead of 0x0f (to -# lock it), but since the high two bits of the lock byte are -# unused, avrdude would get confused. - -ISPFUSES = avrdude -c $(ISPTOOL) -p $(MCU_TARGET) -P $(ISPPORT) $(ISPSPEED) \ --e -u -U lock:w:0x3f:m -U efuse:w:0x$(EFUSE):m -U hfuse:w:0x$(HFUSE):m -U lfuse:w:0x$(LFUSE):m -ISPFLASH = avrdude -c $(ISPTOOL) -p $(MCU_TARGET) -P $(ISPPORT) $(ISPSPEED) \ --U flash:w:$(PROGRAM)_$(TARGET).hex -U lock:w:0x0f:m - -STK500 = "C:\Program Files\Atmel\AVR Tools\STK500\Stk500.exe" -STK500-1 = $(STK500) -e -d$(MCU_TARGET) -pf -vf -if$(PROGRAM)_$(TARGET).hex \ --lFF -LFF -f$(HFUSE)$(LFUSE) -EF8 -ms -q -cUSB -I200kHz -s -wt -STK500-2 = $(STK500) -d$(MCU_TARGET) -ms -q -lCF -LCF -cUSB -I200kHz -s -wt - - -OBJ = $(PROGRAM).o -OPTIMIZE = -Os - -DEFS = -LIBS = - -CC = avr-gcc - -# Override is only needed by avr-lib build system. - -override CFLAGS = -g -Wall $(OPTIMIZE) -mmcu=$(MCU_TARGET) -DF_CPU=$(AVR_FREQ) $(DEFS) -override LDFLAGS = -Wl,$(LDSECTION) -#override LDFLAGS = -Wl,-Map,$(PROGRAM).map,$(LDSECTION) - -OBJCOPY = avr-objcopy -OBJDUMP = avr-objdump - -all: - -lilypad: TARGET = lilypad -lilypad: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>1' '-DNUM_LED_FLASHES=3' -lilypad: AVR_FREQ = 8000000L -lilypad: $(PROGRAM)_lilypad.hex - -lilypad_isp: lilypad -lilypad_isp: TARGET = lilypad -lilypad_isp: HFUSE = DD -lilypad_isp: LFUSE = E2 -lilypad_isp: EFUSE = 00 -lilypad_isp: isp - -lilypad_resonator: TARGET = lilypad_resonator -lilypad_resonator: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>4' '-DNUM_LED_FLASHES=3' -lilypad_resonator: AVR_FREQ = 8000000L -lilypad_resonator: $(PROGRAM)_lilypad_resonator.hex - -lilypad_resonator_isp: lilypad_resonator -lilypad_resonator_isp: TARGET = lilypad_resonator -lilypad_resonator_isp: HFUSE = DD -lilypad_resonator_isp: LFUSE = C6 -lilypad_resonator_isp: EFUSE = 00 -lilypad_resonator_isp: isp - -pro8: TARGET = pro_8MHz -pro8: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>4' '-DNUM_LED_FLASHES=1' '-DWATCHDOG_MODS' -pro8: AVR_FREQ = 8000000L -pro8: $(PROGRAM)_pro_8MHz.hex - -pro8_isp: pro8 -pro8_isp: TARGET = pro_8MHz -pro8_isp: HFUSE = DD -pro8_isp: LFUSE = C6 -pro8_isp: EFUSE = 00 -pro8_isp: isp - -pro16: TARGET = pro_16MHz -pro16: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>4' '-DNUM_LED_FLASHES=1' '-DWATCHDOG_MODS' -pro16: AVR_FREQ = 16000000L -pro16: $(PROGRAM)_pro_16MHz.hex - -pro16_isp: pro16 -pro16_isp: TARGET = pro_16MHz -pro16_isp: HFUSE = DD -pro16_isp: LFUSE = C6 -pro16_isp: EFUSE = 00 -pro16_isp: isp - -pro20: TARGET = pro_20mhz -pro20: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>4' '-DNUM_LED_FLASHES=1' '-DWATCHDOG_MODS' -pro20: AVR_FREQ = 20000000L -pro20: $(PROGRAM)_pro_20mhz.hex - -pro20_isp: pro20 -pro20_isp: TARGET = pro_20mhz -pro20_isp: HFUSE = DD -pro20_isp: LFUSE = C6 -pro20_isp: EFUSE = 00 -pro20_isp: isp - -diecimila: TARGET = diecimila -diecimila: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>4' '-DNUM_LED_FLASHES=1' -diecimila: AVR_FREQ = 16000000L -diecimila: $(PROGRAM)_diecimila.hex - -diecimila_isp: diecimila -diecimila_isp: TARGET = diecimila -diecimila_isp: HFUSE = DD -diecimila_isp: LFUSE = FF -diecimila_isp: EFUSE = 00 -diecimila_isp: isp - -ng: TARGET = ng -ng: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>1' '-DNUM_LED_FLASHES=3' -ng: AVR_FREQ = 16000000L -ng: $(PROGRAM)_ng.hex - -ng_isp: ng -ng_isp: TARGET = ng -ng_isp: HFUSE = DD -ng_isp: LFUSE = FF -ng_isp: EFUSE = 00 -ng_isp: isp - -atmega644: TARGET = atmega644 -atmega644: MCU_TARGET = atmega644p -atmega644: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>4' '-DNUM_LED_FLASHES=1' -DDOUBLE_SPEED -DBAUD_RATE=115200 -atmega644: AVR_FREQ = 12000000L -atmega644: LDSECTION = --section-start=.text=0x7000 -atmega644: $(PROGRAM)_atmega644p.hex - -atmega644_isp: atmega644 -atmega644_isp: TARGET = atmega644 -atmega644_isp: MCU_TARGET = atmega644p -atmega644_isp: HFUSE = D8 -atmega644_isp: LFUSE = FF -atmega644_isp: EFUSE = FF -atmega644_isp: isp - -atmega328: TARGET = atmega328 -atmega328: MCU_TARGET = atmega328p -atmega328: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>4' '-DNUM_LED_FLASHES=1' -DBAUD_RATE=57600 -atmega328: AVR_FREQ = 16000000L -atmega328: LDSECTION = --section-start=.text=0x7800 -atmega328: $(PROGRAM)_atmega328.hex - -atmega328_isp: atmega328 -atmega328_isp: TARGET = atmega328 -atmega328_isp: MCU_TARGET = atmega328p -atmega328_isp: HFUSE = DA -atmega328_isp: LFUSE = FF -atmega328_isp: EFUSE = 05 -atmega328_isp: isp - -atmega328_notp: TARGET = atmega328_notp -atmega328_notp: MCU_TARGET = atmega328 -atmega328_notp: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>4' '-DNUM_LED_FLASHES=1' -DBAUD_RATE=57600 -atmega328_notp: AVR_FREQ = 16000000L -atmega328_notp: LDSECTION = --section-start=.text=0x7800 -atmega328_notp: $(PROGRAM)_atmega328_notp.hex - -atmega328_notp_isp: atmega328_notp -atmega328_notp_isp: TARGET = atmega328 -atmega328_notp_isp: MCU_TARGET = atmega328 -atmega328_notp_isp: HFUSE = DA -atmega328_notp_isp: LFUSE = FF -atmega328_notp_isp: EFUSE = 05 -atmega328_notp_isp: isp - -atmega328_pro8: TARGET = atmega328_pro_8MHz -atmega328_pro8: MCU_TARGET = atmega328p -atmega328_pro8: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>4' '-DNUM_LED_FLASHES=1' -DBAUD_RATE=57600 -DDOUBLE_SPEED -atmega328_pro8: AVR_FREQ = 8000000L -atmega328_pro8: LDSECTION = --section-start=.text=0x7800 -atmega328_pro8: $(PROGRAM)_atmega328_pro_8MHz.hex - -atmega328_pro8_isp: atmega328_pro8 -atmega328_pro8_isp: TARGET = atmega328_pro_8MHz -atmega328_pro8_isp: MCU_TARGET = atmega328p -atmega328_pro8_isp: HFUSE = DA -atmega328_pro8_isp: LFUSE = FF -atmega328_pro8_isp: EFUSE = 05 -atmega328_pro8_isp: isp - -mega: TARGET = atmega1280 -mega: MCU_TARGET = atmega1280 -mega: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>4' '-DNUM_LED_FLASHES=0' -DBAUD_RATE=57600 -mega: AVR_FREQ = 16000000L -mega: LDSECTION = --section-start=.text=0x1F000 -mega: $(PROGRAM)_atmega1280.hex - -mega_isp: mega -mega_isp: TARGET = atmega1280 -mega_isp: MCU_TARGET = atmega1280 -mega_isp: HFUSE = DA -mega_isp: LFUSE = FF -mega_isp: EFUSE = F5 -mega_isp: isp - -isp: $(TARGET) - $(ISPFUSES) - $(ISPFLASH) - -isp-stk500: $(PROGRAM)_$(TARGET).hex - $(STK500-1) - $(STK500-2) - -%.elf: $(OBJ) - $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LIBS) - -clean: - rm -rf *.o *.elf *.lst *.map *.sym *.lss *.eep *.srec *.bin *.hex - -%.lst: %.elf - $(OBJDUMP) -h -S $< > $@ - -%.hex: %.elf - $(OBJCOPY) -j .text -j .data -O ihex $< $@ - -%.srec: %.elf - $(OBJCOPY) -j .text -j .data -O srec $< $@ - -%.bin: %.elf - $(OBJCOPY) -j .text -j .data -O binary $< $@ - -- 2.39.5