/Transportables_Koptertool/tags/V3.9/Bootlader/Release/Bootloader644P_uart1.hex |
---|
0,0 → 1,94 |
:10F800000C943E7C0C94507C0C94507C0C94507C5A |
:10F810000C94507C0C94507C0C94507C0C94507C38 |
:10F820000C94507C0C94507C0C94507C0C94507C28 |
:10F830000C94507C0C94507C0C94507C0C94507C18 |
:10F840000C94507C0C94507C0C94507C0C94507C08 |
:10F850000C94507C0C94507C0C94507C0C94507CF8 |
:10F860000C94507C0C94507C0C94507C0C94507CE8 |
:10F870000C94507C0C94507C0C94507C11241FBE32 |
:10F88000CFEFD0E1DEBFCDBF12E0A0E0B1E001C01C |
:10F890001D92A030B107E1F70E94527C0C94DA7EF1 |
:10F8A0000C94007C2F923F924F925F926F927F92C6 |
:10F8B0008F929F92AF92BF92CF92DF92EF92FF9280 |
:10F8C0000F931F93DF93CF9300D00F92CDB7DEB786 |
:10F8D0008FEF87B998B188B9F894A89584B7877FD6 |
:10F8E00084BF809160008861809360001092600006 |
:10F8F0000C98149A1092CD008AE08093CC0088E195 |
:10F900008093C90086E08093CA00049B04C01498C9 |
:10F91000E0E0F0E00995AA24BB2419824398809185 |
:10F92000C80087FFFCCF439A9091CE00913631F406 |
:10F930008091C80085FFFCCF29E5AFC19134C9F49F |
:10F940008091C80087FFFCCF439A2091CE00809120 |
:10F95000C80087FFFCCF439A9091CE008091C800E9 |
:10F9600085FFFCCF322E2224A92EBB24A228B32847 |
:10F97000AEC0923699F48091C80085FFFCCF49E56E |
:10F980004093CE008091C80085FFFCCF51E050939A |
:10F99000CE008091C80085FFFCCF6CC1923409F085 |
:10F9A0009FC08091C80087FFFCCF439A9091CE0002 |
:10F9B0008091C80087FFFCCF439A8091CE00792EBA |
:10F9C0006624E82FF0E0E629F729FB83EA8380919B |
:10F9D000C80087FFFCCF439A9091CE0020E030E032 |
:10F9E000E0E0F1E04A815B812417350710F08FEFEA |
:10F9F00007C08091C80087FFFCCF439A8091CE005A |
:10FA000080832F5F3F4F51E02030350711F0319652 |
:10FA1000E9CF6981663409F05EC0963409F038C0D8 |
:10FA2000750100E010E0EE0CFF1C001F111FA80183 |
:10FA30009701A0E0B1E08C9190E011965C90119755 |
:10FA4000442484299529129661E0F9010C01609300 |
:10FA50005700E89511242E5F3F4F4F4F5F4F8A812B |
:10FA60009B8102979B838A83892B29F765E0F701A5 |
:10FA700060935700E89507B600FCFDCF81E18093C5 |
:10FA80005700E895569547953795279559011BC01E |
:10FA90009534C9F4EA80FB80850120E0C22E21E084 |
:10FAA000D22EF60161916F01C8010E94CC7E0F5FDA |
:10FAB0001F4F0894E108F108E114F10491F72A813D |
:10FAC0003B81A20EB31E8091C80085FFFCCF3DE0B4 |
:10FAD0003093CE0023CF8091C80085FFFCCFCAC0F1 |
:10FAE000973609F069C08091C80087FFFCCF439A20 |
:10FAF0009091CE008091C80087FFFCCF439A8091FF |
:10FB0000CE00992E8824C82EDD24C828D9288091BB |
:10FB1000C80087FFFCCF439A8091CE00863491F5D0 |
:10FB2000950140E050E0220F331F441F551F2F3F27 |
:10FB300067EF360760E0460760E0560718F06FEFA2 |
:10FB40007FEF03C0F901659174918091C80085FF32 |
:10FB5000FCCF6093CE008091C80085FFFCCF7093EE |
:10FB6000CE002E5F3F4F4F4F5F4F8EEF9FEFC80E7F |
:10FB7000D91EC114D104D9F65695479537952795C6 |
:10FB80005901CCCE853409F0C9CE76018501C80172 |
:10FB90000E94C47E982F8091C80085FFFCCF90936F |
:10FBA000CE000F5F1F4F0894E108F108E114F10443 |
:10FBB00071F7AC0CBD1CB2CE9536F1F49981963438 |
:10FBC00099F4E0E0F0E023E020935700E89507B6D1 |
:10FBD00000FCFDCFE050FF4F38EFE030F30799F71E |
:10FBE00041E140935700E8958091C80085FFFCCF24 |
:10FBF0005DE05093CE0092CE953499F42CE088E1EC |
:10FC000090E00FB6F894A895809360000FBE209303 |
:10FC100060008091C80085FFFCCF6DE06093CE004E |
:10FC20007DCE903531F48091C80085FFFCCF8DE00A |
:10FC3000A8C09C3441F48091C80085FFFCCF9DE0B2 |
:10FC40009093CE006BCE903741F48091C80085FF31 |
:10FC5000FCCFE3E5E093CE0061CE943771F4809160 |
:10FC6000C80085FFFCCFF6E4F093CE008091C80079 |
:10FC700085FFFCCF1092CE0051CE892F885782305D |
:10FC800078F48091C80087FFFCCF439A8091CE0022 |
:10FC90008091C80085FFFCCF2DE02093CE003ECEA2 |
:10FCA000943571F48091C80087FFFCCF439A30915E |
:10FCB000CE0039838091C80085FFFCCF4DE040C065 |
:10FCC000933581F58091C80085FFFCCF51E45093B6 |
:10FCD000CE008091C80085FFFCCF66E56093CE0022 |
:10FCE0008091C80085FFFCCF82E58093CE00809193 |
:10FCF000C80085FFFCCF92E49093CE008091C800AD |
:10FD000085FFFCCFEFE4E093CE008091C80085FF33 |
:10FD1000FCCFFFE4F093CE008091C80085FFFCCFBC |
:10FD200024E5BBCF963579F48091C80085FFFCCFE0 |
:10FD300030E33093CE008091C80085FFFCCF48E3CC |
:10FD40004093CE00EBCD9337A1F48091C80085FF9E |
:10FD5000FCCF5AE05093CE008091C80085FFFCCFC5 |
:10FD600086E98093CE008091C80085FFFCCF8EE1AC |
:10FD700008C09B3109F4D2CD8091C80085FFFCCF2B |
:10FD80008FE38093CE00CACDF999FECF92BD81BD9D |
:10FD9000F89A992780B50895262FF999FECF1FBAB2 |
:10FDA00092BD81BD20BD0FB6F894FA9AF99A0FBEA4 |
:08FDB00001960895F894FFCFBD |
:040000030000F80001 |
:00000001FF |
/Transportables_Koptertool/tags/V3.9/Bootlader/Release/Bootloader644_uart0.hex |
---|
0,0 → 1,93 |
:10F800000C94387C0C944A7C0C944A7C0C944A7C72 |
:10F810000C944A7C0C944A7C0C944A7C0C944A7C50 |
:10F820000C944A7C0C944A7C0C944A7C0C944A7C40 |
:10F830000C944A7C0C944A7C0C944A7C0C944A7C30 |
:10F840000C944A7C0C944A7C0C944A7C0C944A7C20 |
:10F850000C944A7C0C944A7C0C944A7C0C944A7C10 |
:10F860000C944A7C0C944A7C0C944A7C0C944A7C00 |
:10F8700011241FBECFEFD0E1DEBFCDBF12E0A0E06C |
:10F88000B1E001C01D92A030B107E1F70E944C7CAD |
:10F890000C94D47E0C94007C2F923F924F925F92F6 |
:10F8A0006F927F928F929F92AF92BF92CF92DF9290 |
:10F8B000EF92FF920F931F93DF93CF9300D00F929D |
:10F8C000CDB7DEB78FEF87B998B188B9F894A8950E |
:10F8D00084B7877F84BF80916000886180936000D7 |
:10F8E000109260000C98149A1092C5008AE08093E0 |
:10F8F000C40088E18093C10086E08093C200049B2D |
:10F9000004C01498E0E0F0E00995AA24BB24198211 |
:10F9100043988091C00087FFFCCF439A9091C60026 |
:10F92000913631F48091C00085FFFCCF29E5AFC14D |
:10F930009134C9F48091C00087FFFCCF439A209195 |
:10F94000C6008091C00087FFFCCF439A9091C6000B |
:10F950008091C00085FFFCCF322E2224A92EBB242B |
:10F96000A228B328AEC0923699F48091C00085FFDA |
:10F97000FCCF49E54093C6008091C00085FFFCCFD5 |
:10F9800051E05093C6008091C00085FFFCCF6CC150 |
:10F99000923409F09FC08091C00087FFFCCF439A4A |
:10F9A0009091C6008091C00087FFFCCF439A809160 |
:10F9B000C600792E6624E82FF0E0E629F729FB83BC |
:10F9C000EA838091C00087FFFCCF439A9091C600E4 |
:10F9D00020E030E0E0E0F1E04A815B812417350768 |
:10F9E00010F08FEF07C08091C00087FFFCCF439AD3 |
:10F9F0008091C60080832F5F3F4F51E02030350754 |
:10FA000011F03196E9CF6981663409F05EC0963411 |
:10FA100009F038C0750100E010E0EE0CFF1C001F7B |
:10FA2000111FA8019701A0E0B1E08C9190E0119620 |
:10FA30005C901197442484299529129661E0F9017C |
:10FA40000C0160935700E89511242E5F3F4F4F4FF4 |
:10FA50005F4F8A819B8102979B838A83892B29F739 |
:10FA600065E0F70160935700E89507B600FCFDCF0D |
:10FA700081E180935700E8955695479537952795EE |
:10FA800059011BC09534C9F4EA80FB80850120E050 |
:10FA9000C22E21E0D22EF60161916F01C8010E94B1 |
:10FAA000C67E0F5F1F4F0894E108F108E114F104CE |
:10FAB00091F72A813B81A20EB31E8091C00085FF81 |
:10FAC000FCCF3DE03093C60023CF8091C00085FF7E |
:10FAD000FCCFCAC0973609F069C08091C00087FF8B |
:10FAE000FCCF439A9091C6008091C00087FFFCCF65 |
:10FAF000439A8091C600992E8824C82EDD24C828F8 |
:10FB0000D9288091C00087FFFCCF439A8091C6001E |
:10FB1000863491F5950140E050E0220F331F441FD9 |
:10FB2000551F2F3F67EF360760E0460760E0560736 |
:10FB300018F06FEF7FEF03C0F90165917491809128 |
:10FB4000C00085FFFCCF6093C6008091C00085FF98 |
:10FB5000FCCF7093C6002E5F3F4F4F4F5F4F8EEF2D |
:10FB60009FEFC80ED91EC114D104D9F656954795FA |
:10FB7000379527955901CCCE853409F0C9CE760149 |
:10FB80008501C8010E94BE7E982F8091C00085FF2C |
:10FB9000FCCF9093C6000F5F1F4F0894E108F10857 |
:10FBA000E114F10471F7AC0CBD1CB2CE9536F1F442 |
:10FBB0009981963499F4E0E0F0E023E02093570037 |
:10FBC000E89507B600FCFDCFE050FF4F38EFE0307E |
:10FBD000F30799F741E140935700E8958091C00001 |
:10FBE00085FFFCCF5DE05093C60092CE953499F42A |
:10FBF0002CE088E190E00FB6F894A895809360001F |
:10FC00000FBE209360008091C00085FFFCCF6DE0A7 |
:10FC10006093C6007DCE903531F48091C00085FFA1 |
:10FC2000FCCF8DE0A8C09C3441F48091C00085FFDA |
:10FC3000FCCF9DE09093C6006BCE903741F480914D |
:10FC4000C00085FFFCCFE3E5E093C60061CE9437AA |
:10FC500071F48091C00085FFFCCFF6E4F093C600FC |
:10FC60008091C00085FFFCCF1092C60051CE892F35 |
:10FC70008857823078F48091C00087FFFCCF439A88 |
:10FC80008091C6008091C00085FFFCCF2DE02093BD |
:10FC9000C6003ECE943571F48091C00087FFFCCF42 |
:10FCA000439A3091C60039838091C00085FFFCCF14 |
:10FCB0004DE040C0933581F58091C00085FFFCCFB9 |
:10FCC00051E45093C6008091C00085FFFCCF66E5EB |
:10FCD0006093C6008091C00085FFFCCF82E58093D1 |
:10FCE000C6008091C00085FFFCCF92E49093C600CF |
:10FCF0008091C00085FFFCCFEFE4E093C6008091C7 |
:10FD0000C00085FFFCCFFFE4F093C6008091C000E7 |
:10FD100085FFFCCF24E5BBCF963579F48091C000F8 |
:10FD200085FFFCCF30E33093C6008091C00085FF93 |
:10FD3000FCCF48E34093C600EBCD9337A1F480910C |
:10FD4000C00085FFFCCF59E05093C6008091C000F1 |
:10FD500085FFFCCF86E98093C6008091C00085FFB7 |
:10FD6000FCCF8EE108C09B3109F4D2CD8091C00058 |
:10FD700085FFFCCF8FE38093C600CACDF999FECFF3 |
:10FD800092BD81BDF89A992780B50895262FF999DB |
:10FD9000FECF1FBA92BD81BD20BD0FB6F894FA9A6E |
:0CFDA000F99A0FBE01960895F894FFCF69 |
:040000030000F80001 |
:00000001FF |
/Transportables_Koptertool/tags/V3.9/Bootlader/avrprog_boot.pnproj |
---|
0,0 → 1,0 |
<Project name="avrprog_boot"><File path="chipdef.h"></File><File path="main.c"></File><File path="makefile"></File><File path="mega128.h"></File><File path="mega128can.h"></File><File path="mega16.h"></File><File path="mega169.h"></File><File path="mega32.h"></File><File path="mega8.h"></File><File path="readme.txt"></File><File path="ldscripts_no_vector\avr5.x"></File><File path="main.lss"></File><File path="main.map"></File><File path="ldscripts_no_vector\avr4.x"></File><File path="mega162.h"></File><File path="mega644.h"></File><File path="mega644p.h"></File><File path="megaxx4p.h"></File><File path="mega324p.h"></File></Project> |
/Transportables_Koptertool/tags/V3.9/Bootlader/avrprog_boot.pnps |
---|
0,0 → 1,0 |
<pd><ViewState><e p="avrprog_boot" x="true"></e></ViewState></pd> |
/Transportables_Koptertool/tags/V3.9/Bootlader/chipdef.h |
---|
0,0 → 1,62 |
#ifndef CHIPDEF_H |
#define CHIPDEF_H |
#include <avr/io.h> |
#if defined (SPMCSR) |
#define SPM_REG SPMCSR |
#elif defined (SPMCR) |
#define SPM_REG SPMCR |
#else |
#error "AVR processor does not provide bootloader support!" |
#endif |
#define APP_END (FLASHEND - (BOOTSIZE * 2)) |
#if (SPM_PAGESIZE > UINT8_MAX) |
typedef uint16_t pagebuf_t; |
#else |
typedef uint8_t pagebuf_t; |
#endif |
#if defined(__AVR_ATmega169__) |
#include "mega169.h" |
#elif defined(__AVR_ATmega16__) |
#include "mega16.h" |
#elif defined(__AVR_ATmega162__) |
#include "mega162.h" |
#elif defined(__AVR_ATmega8__) |
#include "mega8.h" |
#elif defined(__AVR_ATmega32__) |
#include "mega32.h" |
#elif defined(__AVR_ATmega324P__) |
#include "mega324p.h" |
#elif defined(__AVR_ATmega64__) |
#include "mega64.h" |
#elif defined(__AVR_ATmega644__) |
#include "mega644.h" |
#elif defined(__AVR_ATmega644P__) |
#include "mega644p.h" |
#elif defined(__AVR_ATmega128__) |
#include "mega128.h" |
#elif defined(__AVR_AT90CAN128__) |
#include "mega128can.h" |
#else |
#error "no definition for MCU available in chipdef.h" |
#endif |
#endif |
/Transportables_Koptertool/tags/V3.9/Bootlader/fusebits.txt |
---|
0,0 → 1,2 |
Fuses ATmega 644P D7 DC FC |
/Transportables_Koptertool/tags/V3.9/Bootlader/main.c |
---|
0,0 → 1,613 |
/***************************************************************************** |
* |
* AVRPROG compatible boot-loader |
* Version : 0.85 (Dec. 2008) |
* Compiler : avr-gcc 4.1.2 / avr-libc 1.4.6 |
* size : depends on features and startup ( minmal features < 512 words) |
* by : Martin Thomas, Kaiserslautern, Germany |
* eversmith@heizung-thomas.de |
* Additional code and improvements contributed by: |
* - Uwe Bonnes |
* - Bjoern Riemer |
* - Olaf Rempel |
* |
* License : Copyright (c) 2006-2008 M. Thomas, U. Bonnes, O. Rempel |
* Free to use. You have to mention the copyright |
* owners in source-code and documentation of derived |
* work. No warranty! (Yes, you can insert the BSD |
* license here) |
* |
* Tested with ATmega8, ATmega16, ATmega162, ATmega32, ATmega324P, |
* ATmega644, ATmega644P, ATmega128, AT90CAN128 |
* |
* - Initial versions have been based on the Butterfly bootloader-code |
* by Atmel Corporation (Authors: BBrandal, PKastnes, ARodland, LHM) |
* |
**************************************************************************** |
* |
* See the makefile and readme.txt for information on how to adapt |
* the linker-settings to the selected Boot Size (BOOTSIZE=xxxx) and |
* the MCU-type. Other configurations futher down in this file. |
* |
* With BOOT_SIMPLE, minimal features and discarded int-vectors |
* this bootloader has should fit into a a 512 word (1024, 0x400 bytes) |
* bootloader-section. |
* |
****************************************************************************/ |
/* |
TODOs: |
- check lock-bits set |
- __bad_interrupt still linked even with modified |
linker-scripts which needs a default-handler, |
"wasted": 3 words for AVR5 (>8kB), 2 words for AVR4 |
- Check watchdog-disable-function in avr-libc. |
*/ |
// tabsize: 4 |
// Fuses ATmega 644P D7 DC FC |
/* MCU frequency */ |
#ifndef F_CPU |
// #define F_CPU 7372800 |
#define F_CPU (20000000) |
#endif |
#define BOOTSIZE 1024 |
#define set_LED1() (PORTC &= ~(1 << PC3)) |
#define clr_LED1() (PORTC |= (1 << PC3)) |
#define set_LED2() (PORTC &= ~(1 << PC2)) |
#define clr_LED2() (PORTC |= (1 << PC2)) |
#define set_LED3() (PORTB &= ~(1 << PB1)) |
#define clr_LED3() (PORTB |= (1 << PB1)) |
#define set_LED4() (PORTB &= ~(1 << PB0)) |
#define clr_LED4() (PORTB |= (1 << PB0)) |
/* UART Baudrate */ |
// #define BAUDRATE 9600 |
// #define BAUDRATE 19200 |
#define BAUDRATE 115200 |
/* use "Double Speed Operation" */ |
//#define UART_DOUBLESPEED |
/* use second UART on mega128 / can128 / mega162 / mega324p / mega644p */ |
#define UART_USE_SECOND |
/* Device-Type: |
For AVRProg the BOOT-option is prefered |
which is the "correct" value for a bootloader. |
avrdude may only detect the part-code for ISP */ |
#define DEVTYPE DEVTYPE_BOOT |
// #define DEVTYPE DEVTYPE_ISP |
/* |
* Pin "STARTPIN" on port "STARTPORT" in this port has to grounded |
* (active low) to start the bootloader |
*/ |
#define BLPORT PORTA |
#define BLDDR DDRA |
#define BLPIN PINA |
#define BLPNUM PINA4 |
/* |
* Define if Watchdog-Timer should be disable at startup |
*/ |
#define DISABLE_WDT_AT_STARTUP |
/* |
* Watchdog-reset is issued at exit |
* define the timeout-value here (see avr-libc manual) |
*/ |
#define EXIT_WDT_TIME WDTO_250MS |
/* |
* Select startup-mode |
* SIMPLE-Mode - Jump to bootloader main BL-loop if key is |
* pressed (Pin grounded) "during" reset or jump to the |
* application if the pin is not grounded. The internal |
* pull-up resistor is enabled during the startup and |
* gets disabled before the application is started. |
* POWERSAVE-Mode - Startup is separated in two loops |
* which makes power-saving a little easier if no firmware |
* is on the chip. Needs more memory |
* BOOTICE-Mode - to flash the JTAGICE upgrade.ebn file. |
* No startup-sequence in this mode. Jump directly to the |
* parser-loop on reset |
* F_CPU in BOOTICEMODE must be 7372800 Hz to be compatible |
* with the org. JTAGICE-Firmware |
* WAIT-mode waits 1 sec for the defined character if nothing |
* is recived then the user prog is started. |
*/ |
#define START_SIMPLE |
//#define START_WAIT |
//#define START_POWERSAVE |
//#define START_BOOTICE |
/* character to start the bootloader in mode START_WAIT */ |
#define START_WAIT_UARTCHAR 'S' |
/* wait-time for START_WAIT mode ( t = WAIT_TIME * 10ms ) */ |
#define WAIT_VALUE 100 /* here: 100*10ms = 1000ms = 1sec */ |
/* |
* enable/disable readout of fuse and lock-bits |
* (AVRPROG has to detect the AVR correctly by device-code |
* to show the correct information). |
*/ |
//#define ENABLEREADFUSELOCK |
/* enable/disable write of lock-bits |
* WARNING: lock-bits can not be reseted by bootloader (as far as I know) |
* Only protection no unprotection, "chip erase" from bootloader only |
* clears the flash but does no real "chip erase" (this is not possible |
* with a bootloader as far as I know) |
* Keep this undefined! |
*/ |
//#define WRITELOCKBITS |
/* |
* define the following if the bootloader should not output |
* itself at flash read (will fake an empty boot-section) |
*/ |
#define READ_PROTECT_BOOTLOADER |
#define VERSION_HIGH '0' |
#define VERSION_LOW '8' |
#define GET_LOCK_BITS 0x0001 |
#define GET_LOW_FUSE_BITS 0x0000 |
#define GET_HIGH_FUSE_BITS 0x0003 |
#define GET_EXTENDED_FUSE_BITS 0x0002 |
#ifdef UART_DOUBLESPEED |
// #define UART_CALC_BAUDRATE(baudRate) (((F_CPU*10UL) / ((baudRate) *8UL) +5)/10 -1) |
#define UART_CALC_BAUDRATE(baudRate) ((uint32_t)((F_CPU) + ((uint32_t)baudRate * 4UL)) / ((uint32_t)(baudRate) * 8UL) - 1) |
#else |
// #define UART_CALC_BAUDRATE(baudRate) (((F_CPU*10UL) / ((baudRate)*16UL) +5)/10 -1) |
#define UART_CALC_BAUDRATE(baudRate) ((uint32_t)((F_CPU) + ((uint32_t)baudRate * 8UL)) / ((uint32_t)(baudRate) * 16UL) - 1) |
#endif |
#include <stdint.h> |
#include <avr/io.h> |
#include <avr/wdt.h> |
#include <avr/boot.h> |
#include <avr/pgmspace.h> |
#include <avr/eeprom.h> |
#include <avr/interrupt.h> |
#include <util/delay.h> |
#include "chipdef.h" |
//#include "lcd.h" |
uint8_t gBuffer[SPM_PAGESIZE]; |
#if defined(BOOTLOADERHASNOVECTORS) |
#warning "This Bootloader does not link interrupt vectors - see makefile" |
/* make the linker happy - it wants to see __vector_default */ |
// void __vector_default(void) { ; } |
void __vector_default(void) { ; } |
#endif |
static void sendchar(uint8_t data) |
{ |
while (!(UART_STATUS & (1<<UART_TXREADY))); |
UART_DATA = data; |
} |
static uint8_t recvchar(void) |
{ |
while (!(UART_STATUS & (1<<UART_RXREADY))); |
clr_LED1(); |
return UART_DATA; |
} |
static inline void eraseFlash(void) |
{ |
// erase only main section (bootloader protection) |
uint32_t addr = 0; |
while (APP_END > addr) { |
boot_page_erase(addr); // Perform page erase |
boot_spm_busy_wait(); // Wait until the memory is erased. |
addr += SPM_PAGESIZE; |
} |
boot_rww_enable(); |
} |
static inline void recvBuffer(pagebuf_t size) |
{ |
pagebuf_t cnt; |
uint8_t *tmp = gBuffer; |
for (cnt = 0; cnt < sizeof(gBuffer); cnt++) { |
*tmp++ = (cnt < size) ? recvchar() : 0xFF; |
} |
} |
static inline uint16_t writeFlashPage(uint16_t waddr, pagebuf_t size) |
{ |
uint32_t pagestart = (uint32_t)waddr<<1; |
uint32_t baddr = pagestart; |
uint16_t data; |
uint8_t *tmp = gBuffer; |
do { |
data = *tmp++; |
data |= *tmp++ << 8; |
boot_page_fill(baddr, data); // call asm routine. |
baddr += 2; // Select next word in memory |
size -= 2; // Reduce number of bytes to write by two |
} while (size); // Loop until all bytes written |
boot_page_write(pagestart); |
boot_spm_busy_wait(); |
boot_rww_enable(); // Re-enable the RWW section |
return baddr>>1; |
} |
static inline uint16_t writeEEpromPage(uint16_t address, pagebuf_t size) |
{ |
uint8_t *tmp = gBuffer; |
do { |
eeprom_write_byte( (uint8_t*)address, *tmp++ ); |
address++; // Select next byte |
size--; // Decreas number of bytes to write |
} while (size); // Loop until all bytes written |
// eeprom_busy_wait(); |
return address; |
} |
static inline uint16_t readFlashPage(uint16_t waddr, pagebuf_t size) |
{ |
uint32_t baddr = (uint32_t)waddr<<1; |
uint16_t data; |
do { |
#ifndef READ_PROTECT_BOOTLOADER |
#warning "Bootloader not read-protected" |
#if defined(RAMPZ) |
data = pgm_read_word_far(baddr); |
#else |
data = pgm_read_word_near(baddr); |
#endif |
#else |
// don't read bootloader |
if ( baddr < APP_END ) { |
#if defined(RAMPZ) |
data = pgm_read_word_far(baddr); |
#else |
data = pgm_read_word_near(baddr); |
#endif |
} |
else { |
data = 0xFFFF; // fake empty |
} |
#endif |
sendchar(data); // send LSB |
sendchar((data >> 8)); // send MSB |
baddr += 2; // Select next word in memory |
size -= 2; // Subtract two bytes from number of bytes to read |
} while (size); // Repeat until block has been read |
return baddr>>1; |
} |
static inline uint16_t readEEpromPage(uint16_t address, pagebuf_t size) |
{ |
do { |
sendchar( eeprom_read_byte( (uint8_t*)address ) ); |
address++; |
size--; // Decrease number of bytes to read |
} while (size); // Repeat until block has been read |
return address; |
} |
#if defined(ENABLEREADFUSELOCK) |
static uint8_t read_fuse_lock(uint16_t addr) |
{ |
uint8_t mode = (1<<BLBSET) | (1<<SPMEN); |
uint8_t retval; |
asm volatile |
( |
"movw r30, %3\n\t" /* Z to addr */ \ |
"sts %0, %2\n\t" /* set mode in SPM_REG */ \ |
"lpm\n\t" /* load fuse/lock value into r0 */ \ |
"mov %1,r0\n\t" /* save return value */ \ |
: "=m" (SPM_REG), |
"=r" (retval) |
: "r" (mode), |
"r" (addr) |
: "r30", "r31", "r0" |
); |
return retval; |
} |
#endif |
static void send_boot(void) |
{ |
sendchar('A'); |
sendchar('V'); |
sendchar('R'); |
sendchar('B'); |
sendchar('O'); |
sendchar('O'); |
sendchar('T'); |
} |
static void (*jump_to_app)(void) = 0x0000; |
int main(void) |
{ |
uint16_t address = 0; |
uint8_t device = 0, val; |
DDRC = 0xFF; |
PORTC = PORTC | 0xff; |
#ifdef DISABLE_WDT_AT_STARTUP |
#ifdef WDT_OFF_SPECIAL |
#warning "using target specific watchdog_off" |
bootloader_wdt_off(); |
#else |
cli(); |
wdt_reset(); |
wdt_disable(); |
#endif |
#endif |
#ifdef START_POWERSAVE |
uint8_t OK = 1; |
#endif |
BLDDR &= ~(1<<BLPNUM); // set as Input |
BLPORT |= (1<<BLPNUM); // Enable pullup |
// Set baud rate |
UART_BAUD_HIGH = (UART_CALC_BAUDRATE(BAUDRATE)>>8) & 0xFF; |
UART_BAUD_LOW = (UART_CALC_BAUDRATE(BAUDRATE) & 0xFF); |
#ifdef UART_DOUBLESPEED |
UART_STATUS = ( 1<<UART_DOUBLE ); |
#endif |
UART_CTRL = UART_CTRL_DATA; |
UART_CTRL2 = UART_CTRL2_DATA; |
#if defined(START_POWERSAVE) |
/* |
This is an adoption of the Butterfly Bootloader startup-sequence. |
It may look a little strange but separating the login-loop from |
the main parser-loop gives a lot a possibilities (timeout, sleep-modes |
etc.). |
*/ |
for(;OK;) { |
if ((BLPIN & (1<<BLPNUM))) { |
// jump to main app if pin is not grounded |
BLPORT &= ~(1<<BLPNUM); // set to default |
#ifdef UART_DOUBLESPEED |
UART_STATUS &= ~( 1<<UART_DOUBLE ); |
#endif |
jump_to_app(); // Jump to application sector |
} else { |
val = recvchar(); |
/* ESC */ |
if (val == 0x1B) { |
// AVRPROG connection |
// Wait for signon |
while (val != 'S') |
val = recvchar(); |
send_boot(); // Report signon |
OK = 0; |
} else { |
sendchar('?'); |
} |
} |
// Power-Save code here |
} |
#elif defined(START_SIMPLE) |
if ((BLPIN & (1<<BLPNUM))) { |
// jump to main app if pin is not grounded |
BLPORT &= ~(1<<BLPNUM); // set to default |
#ifdef UART_DOUBLESPEED |
UART_STATUS &= ~( 1<<UART_DOUBLE ); |
#endif |
jump_to_app(); // Jump to application sector |
} |
#elif defined(START_WAIT) |
uint16_t cnt = 0; |
while (1) { |
if (UART_STATUS & (1<<UART_RXREADY)) |
if (UART_DATA == START_WAIT_UARTCHAR) |
break; |
if (cnt++ >= WAIT_VALUE) { |
BLPORT &= ~(1<<BLPNUM); // set to default |
jump_to_app(); // Jump to application sector |
} |
_delay_ms(10); |
} |
send_boot(); |
#elif defined(START_BOOTICE) |
#warning "BOOTICE mode - no startup-condition" |
#else |
#error "Select START_ condition for bootloader in main.c" |
#endif |
for(;;) { |
set_LED1(); |
val = recvchar(); |
// Autoincrement? |
if (val == 'a') { |
sendchar('Y'); // Autoincrement is quicker |
//write address |
} else if (val == 'A') { |
address = recvchar(); //read address 8 MSB |
address = (address<<8) | recvchar(); |
sendchar('\r'); |
// Buffer load support |
} else if (val == 'b') { |
sendchar('Y'); // Report buffer load supported |
sendchar((sizeof(gBuffer) >> 8) & 0xFF); // Report buffer size in bytes |
sendchar(sizeof(gBuffer) & 0xFF); |
// Start buffer load |
} else if (val == 'B') { |
pagebuf_t size; |
size = recvchar() << 8; // Load high byte of buffersize |
size |= recvchar(); // Load low byte of buffersize |
val = recvchar(); // Load memory type ('E' or 'F') |
recvBuffer(size); |
if (device == DEVTYPE) { |
if (val == 'F') { |
address = writeFlashPage(address, size); |
} else if (val == 'E') { |
address = writeEEpromPage(address, size); |
} |
sendchar('\r'); |
} else { |
sendchar(0); |
} |
// Block read |
} else if (val == 'g') { |
pagebuf_t size; |
size = recvchar() << 8; // Load high byte of buffersize |
size |= recvchar(); // Load low byte of buffersize |
val = recvchar(); // Get memtype |
if (val == 'F') { |
address = readFlashPage(address, size); |
} else if (val == 'E') { |
address = readEEpromPage(address, size); |
} |
// Chip erase |
} else if (val == 'e') { |
if (device == DEVTYPE) { |
eraseFlash(); |
} |
sendchar('\r'); |
// Exit upgrade |
} else if (val == 'E') { |
wdt_enable(EXIT_WDT_TIME); // Enable Watchdog Timer to give reset |
sendchar('\r'); |
#ifdef WRITELOCKBITS |
#warning "Extension 'WriteLockBits' enabled" |
// TODO: does not work reliably |
// write lockbits |
} else if (val == 'l') { |
if (device == DEVTYPE) { |
// write_lock_bits(recvchar()); |
boot_lock_bits_set(recvchar()); // boot.h takes care of mask |
boot_spm_busy_wait(); |
} |
sendchar('\r'); |
#endif |
// Enter programming mode |
} else if (val == 'P') { |
sendchar('\r'); |
// Leave programming mode |
} else if (val == 'L') { |
sendchar('\r'); |
// return programmer type |
} else if (val == 'p') { |
sendchar('S'); // always serial programmer |
#ifdef ENABLEREADFUSELOCK |
#warning "Extension 'ReadFuseLock' enabled" |
// read "low" fuse bits |
} else if (val == 'F') { |
sendchar(read_fuse_lock(GET_LOW_FUSE_BITS)); |
// read lock bits |
} else if (val == 'r') { |
sendchar(read_fuse_lock(GET_LOCK_BITS)); |
// read high fuse bits |
} else if (val == 'N') { |
sendchar(read_fuse_lock(GET_HIGH_FUSE_BITS)); |
// read extended fuse bits |
} else if (val == 'Q') { |
sendchar(read_fuse_lock(GET_EXTENDED_FUSE_BITS)); |
#endif |
// Return device type |
} else if (val == 't') { |
sendchar(DEVTYPE); |
sendchar(0); |
// clear and set LED ignored |
} else if ((val == 'x') || (val == 'y')) { |
recvchar(); |
sendchar('\r'); |
// set device |
} else if (val == 'T') { |
device = recvchar(); |
sendchar('\r'); |
// Return software identifier |
} else if (val == 'S') { |
send_boot(); |
// Return Software Version |
} else if (val == 'V') { |
sendchar(VERSION_HIGH); |
sendchar(VERSION_LOW); |
// Return Signature Bytes (it seems that |
// AVRProg expects the "Atmel-byte" 0x1E last |
// but shows it first in the dialog-window) |
} else if (val == 's') { |
sendchar(SIG_BYTE3); |
sendchar(SIG_BYTE2); |
sendchar(SIG_BYTE1); |
/* ESC */ |
} else if(val != 0x1b) { |
sendchar('?'); |
} |
} |
return 0; |
} |
/Transportables_Koptertool/tags/V3.9/Bootlader/makefile |
---|
0,0 → 1,669 |
# Hey Emacs, this is a -*- makefile -*- |
# |
# Makefile for the AVRProg-compatible Bootloader |
# |
# based on the |
# WinAVR Sample makefile written by Eric B. Weddington, Jörg Wunsch, et al. |
# Released to the Public Domain |
# Please read the make user manual! |
# |
# Additional material for this makefile was submitted by: |
# Tim Henigan |
# Peter Fleury |
# Reiner Patommel |
# Sander Pool |
# Frederik Rouleau |
# Markus Pfaff |
# |
# On command line: |
# |
# make all = Make software. |
# |
# make clean = Clean out built project files. |
# |
# make coff = Convert ELF to AVR COFF (for use with AVR Studio 3.x or VMLAB). |
# |
# make extcoff = Convert ELF to AVR Extended COFF (for use with AVR Studio |
# 4.07 or greater). |
# |
# make program = Download the hex file to the device, using avrdude. Please |
# customize the avrdude settings below first! |
# |
# make filename.s = Just compile filename.c into the assembler code only |
# |
# To rebuild project do "make clean" then "make all". |
# |
# user defined values |
# MCU name |
## MCU = atmega8 |
## MCU = atmega16 |
## MCU = atmega162 |
## MCU = atmega169 |
## MCU = atmega32 |
## MCU = atmega324p |
## MCU = atmega64 |
## MCU = atmega644 |
MCU = atmega644p |
## MCU = atmega128 |
## MCU = at90can128 |
################## BOOTLOADER ###################### |
# mt: Boot loader support. So far not done with a separate section |
# to get the interrupt vector into the bootloader area (for BOOTINTVEC=yes). |
# Bootloader address in datasheet and stk500 is given as |
# "word", gcc toolchain needs "byte"-address |
# (see LDFLAGS further down) |
#/* Select Boot Size in Words (select one, comment out the others) */ |
## NO! BOOTSIZE=128 |
## NO! BOOTSIZE=256 |
## BOOTSIZE=512 |
BOOTSIZE=1024 |
## BOOTSIZE=2048 |
# /* Select if bootloader should include the inverrupt-vectors |
# when selecting 'no' here, the bootloader must not use |
# any interrupts and the modified linker-scripts are used. */ |
##BOOTINTVEC=yes |
BOOTINTVEC=no |
## |
ifeq ($(MCU), atmega8) |
BFD_MACH=avr4 |
ifeq ($(BOOTSIZE), 128) |
MT_BOOTLOADER_ADDRESS = 0x1F00 |
endif |
ifeq ($(BOOTSIZE), 256) |
MT_BOOTLOADER_ADDRESS = 0x1E00 |
endif |
ifeq ($(BOOTSIZE), 512) |
MT_BOOTLOADER_ADDRESS = 0x1C00 |
endif |
ifeq ($(BOOTSIZE), 1024) |
MT_BOOTLOADER_ADDRESS = 0x1800 |
endif |
endif |
## |
ifeq ($(MCU), atmega16) |
BFD_MACH=avr5 |
ifeq ($(BOOTSIZE), 128) |
MT_BOOTLOADER_ADDRESS = 0x3F00 |
endif |
ifeq ($(BOOTSIZE), 256) |
MT_BOOTLOADER_ADDRESS = 0x3E00 |
endif |
ifeq ($(BOOTSIZE), 512) |
MT_BOOTLOADER_ADDRESS = 0x3C00 |
endif |
ifeq ($(BOOTSIZE), 1024) |
MT_BOOTLOADER_ADDRESS = 0x3800 |
endif |
endif |
## |
ifeq ($(MCU), atmega162) |
BFD_MACH=avr5 |
ifeq ($(BOOTSIZE), 128) |
MT_BOOTLOADER_ADDRESS = 0x3F00 |
endif |
ifeq ($(BOOTSIZE), 256) |
MT_BOOTLOADER_ADDRESS = 0x3E00 |
endif |
ifeq ($(BOOTSIZE), 512) |
MT_BOOTLOADER_ADDRESS = 0x3C00 |
endif |
ifeq ($(BOOTSIZE), 1024) |
MT_BOOTLOADER_ADDRESS = 0x3800 |
endif |
endif |
## |
ifeq ($(MCU), atmega169) |
BFD_MACH=avr5 |
ifeq ($(BOOTSIZE), 128) |
MT_BOOTLOADER_ADDRESS = 0x3F00 |
endif |
ifeq ($(BOOTSIZE), 256) |
MT_BOOTLOADER_ADDRESS = 0x3E00 |
endif |
ifeq ($(BOOTSIZE), 512) |
MT_BOOTLOADER_ADDRESS = 0x3C00 |
endif |
ifeq ($(BOOTSIZE), 1024) |
MT_BOOTLOADER_ADDRESS = 0x3800 |
endif |
endif |
## |
ifeq ($(MCU), atmega32) |
BFD_MACH=avr5 |
ifeq ($(BOOTSIZE), 256) |
MT_BOOTLOADER_ADDRESS = 0x7E00 |
endif |
ifeq ($(BOOTSIZE), 512) |
MT_BOOTLOADER_ADDRESS = 0x7C00 |
endif |
ifeq ($(BOOTSIZE), 1024) |
MT_BOOTLOADER_ADDRESS = 0x7800 |
endif |
ifeq ($(BOOTSIZE), 2048) |
MT_BOOTLOADER_ADDRESS = 0x7000 |
endif |
endif |
## |
ifeq ($(MCU), atmega324p) |
BFD_MACH=avr5 |
ifeq ($(BOOTSIZE), 256) |
MT_BOOTLOADER_ADDRESS = 0x7E00 |
endif |
ifeq ($(BOOTSIZE), 512) |
MT_BOOTLOADER_ADDRESS = 0x7C00 |
endif |
ifeq ($(BOOTSIZE), 1024) |
MT_BOOTLOADER_ADDRESS = 0x7800 |
endif |
ifeq ($(BOOTSIZE), 2048) |
MT_BOOTLOADER_ADDRESS = 0x7000 |
endif |
endif |
## |
ifeq ($(MCU), atmega64) |
BFD_MACH=avr5 |
ifeq ($(BOOTSIZE), 512) |
MT_BOOTLOADER_ADDRESS = 0xFC00 |
endif |
ifeq ($(BOOTSIZE), 1024) |
MT_BOOTLOADER_ADDRESS = 0xF800 |
endif |
ifeq ($(BOOTSIZE), 2048) |
MT_BOOTLOADER_ADDRESS = 0xF000 |
endif |
ifeq ($(BOOTSIZE), 4096) |
MT_BOOTLOADER_ADDRESS = 0xE000 |
endif |
endif |
## |
ifeq ($(MCU), atmega644) |
BFD_MACH=avr5 |
ifeq ($(BOOTSIZE), 512) |
MT_BOOTLOADER_ADDRESS = 0xFC00 |
endif |
ifeq ($(BOOTSIZE), 1024) |
MT_BOOTLOADER_ADDRESS = 0xF800 |
endif |
ifeq ($(BOOTSIZE), 2048) |
MT_BOOTLOADER_ADDRESS = 0xF000 |
endif |
ifeq ($(BOOTSIZE), 4096) |
MT_BOOTLOADER_ADDRESS = 0xE000 |
endif |
endif |
## |
ifeq ($(MCU), atmega644p) |
BFD_MACH=avr5 |
ifeq ($(BOOTSIZE), 512) |
MT_BOOTLOADER_ADDRESS = 0xFC00 |
endif |
ifeq ($(BOOTSIZE), 1024) |
MT_BOOTLOADER_ADDRESS = 0xF800 |
endif |
ifeq ($(BOOTSIZE), 2048) |
MT_BOOTLOADER_ADDRESS = 0xF000 |
endif |
ifeq ($(BOOTSIZE), 4096) |
MT_BOOTLOADER_ADDRESS = 0xE000 |
endif |
endif |
## |
ifeq ($(MCU), atmega128) |
BFD_MACH=avr5 |
ifeq ($(BOOTSIZE), 512) |
MT_BOOTLOADER_ADDRESS = 0x1FC00 |
endif |
ifeq ($(BOOTSIZE), 1024) |
MT_BOOTLOADER_ADDRESS = 0x1F800 |
endif |
ifeq ($(BOOTSIZE), 2048) |
MT_BOOTLOADER_ADDRESS = 0x1F000 |
endif |
ifeq ($(BOOTSIZE), 4096) |
MT_BOOTLOADER_ADDRESS = 0x1E000 |
endif |
endif |
## |
ifeq ($(MCU), at90can128) |
BFD_MACH=avr5 |
ifeq ($(BOOTSIZE), 512) |
MT_BOOTLOADER_ADDRESS = 0x1FC00 |
endif |
ifeq ($(BOOTSIZE), 1024) |
MT_BOOTLOADER_ADDRESS = 0x1F800 |
endif |
ifeq ($(BOOTSIZE), 2048) |
MT_BOOTLOADER_ADDRESS = 0x1F000 |
endif |
ifeq ($(BOOTSIZE), 4096) |
MT_BOOTLOADER_ADDRESS = 0x1E000 |
endif |
endif |
# Output format. (can be srec, ihex, binary) |
FORMAT = ihex |
#FORMAT = srec |
# Target file name (without extension). |
TARGET = main |
# List C source files here. (C dependencies are automatically generated.) |
SRC = $(TARGET).c |
# List Assembler source files here. |
# Make them always end in a capital .S. Files ending in a lowercase .s |
# will not be considered source files but generated files (assembler |
# output from the compiler), and will be deleted upon "make clean"! |
# Even though the DOS/Win* filesystem matches both .s and .S the same, |
# it will preserve the spelling of the filenames, and gcc itself does |
# care about how the name is spelled on its command-line. |
ASRC = |
# Optimization level, can be [0, 1, 2, 3, s]. |
# 0 = turn off optimization. s = optimize for size. |
# (Note: 3 is not always the best optimization level. See avr-libc FAQ.) |
OPT = s |
# Debugging format. |
# Native formats for AVR-GCC's -g are stabs [default], or dwarf-2. |
# AVR (extended) COFF requires stabs, plus an avr-objcopy run. |
DEBUG = stabs |
# List any extra directories to look for include files here. |
# Each directory must be seperated by a space. |
EXTRAINCDIRS = |
# Compiler flag to set the C Standard level. |
# c89 - "ANSI" C |
# gnu89 - c89 plus GCC extensions |
# c99 - ISO C99 standard (not yet fully implemented) |
# gnu99 - c99 plus GCC extensions |
CSTANDARD = -std=gnu99 |
# Place -D or -U options here |
CDEFS = -DBOOTSIZE=$(BOOTSIZE) |
# Place -I options here |
CINCS = |
# Compiler flags. |
# -g*: generate debugging information |
# -O*: optimization level |
# -f...: tuning, see GCC manual and avr-libc documentation |
# -Wall...: warning level |
# -Wa,...: tell GCC to pass this to the assembler. |
# -adhlns...: create assembler listing |
CFLAGS = -g$(DEBUG) |
CFLAGS += $(CDEFS) $(CINCS) |
CFLAGS += -O$(OPT) |
CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums |
CFLAGS += -Wall -Wstrict-prototypes |
CFLAGS += -Wa,-adhlns=$(<:.c=.lst) |
CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) |
CFLAGS += $(CSTANDARD) |
# Assembler flags. |
# -Wa,...: tell GCC to pass this to the assembler. |
# -ahlms: create listing |
# -gstabs: have the assembler create line number information; note that |
# for use in COFF files, additional information about filenames |
# and function names needs to be present in the assembler source |
# files -- see avr-libc docs [FIXME: not yet described there] |
ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs |
#Additional libraries. |
# Minimalistic printf version |
PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min |
# Floating point printf version (requires MATH_LIB = -lm below) |
PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt |
PRINTF_LIB = |
# Minimalistic scanf version |
SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min |
# Floating point + %[ scanf version (requires MATH_LIB = -lm below) |
SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt |
SCANF_LIB = |
MATH_LIB = -lm |
# External memory options |
# 64 KB of external RAM, starting after internal RAM (ATmega128!), |
# used for variables (.data/.bss) and heap (malloc()). |
#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff |
# 64 KB of external RAM, starting after internal RAM (ATmega128!), |
# only used for heap (malloc()). |
#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff |
EXTMEMOPTS = |
# Linker flags. |
# -Wl,...: tell GCC to pass this to linker. |
# -Map: create map file |
# --cref: add cross reference to map file |
LDFLAGS = -Wl,-Map=$(TARGET).map,--cref |
LDFLAGS += $(EXTMEMOPTS) |
LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) |
################## BOOTLOADER ###################### |
# MT_BOOTLOADER_ADDRESS (=Start of Boot Loader section |
# in bytes - not words) as defined above. |
LDFLAGS += -Wl,--section-start=.text=$(MT_BOOTLOADER_ADDRESS) |
# check if linker-scripts without interrupt-vectors should |
# be used and set linker-option, announce to C-code by define |
ifeq ($(BOOTINTVEC), no) |
LDFLAGS += -T./ldscripts_no_vector/$(BFD_MACH).x |
CFLAGS += -DBOOTLOADERHASNOVECTORS |
endif |
# Programming support using avrdude. Settings and variables. |
# Programming hardware: alf avr910 avrisp bascom bsd |
# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500 |
# |
# Type: avrdude -c ? |
# to get a full listing. |
# |
AVRDUDE_PROGRAMMER = stk500v2 |
# com1 = serial port. Use lpt1 to connect to parallel port. |
AVRDUDE_PORT = com1 # programmer connected to serial device |
#AVRDUDE_PORT = /dev/ttyS0 # programmer connected to serial device |
AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex |
#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep |
# Uncomment the following if you want avrdude's erase cycle counter. |
# Note that this counter needs to be initialized first using -Yn, |
# see avrdude manual. |
#AVRDUDE_ERASE_COUNTER = -y |
# Uncomment the following if you do /not/ wish a verification to be |
# performed after programming the device. |
#AVRDUDE_NO_VERIFY = -V |
# Increase verbosity level. Please use this when submitting bug |
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> |
# to submit bug reports. |
#AVRDUDE_VERBOSE = -v -v |
AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) |
AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY) |
AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE) |
AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER) |
# --------------------------------------------------------------------------- |
# Define directories, if needed. |
#DIRAVR = c:/winavr |
#DIRAVRBIN = $(DIRAVR)/bin |
#DIRAVRUTILS = $(DIRAVR)/utils/bin |
#DIRINC = . |
#DIRLIB = $(DIRAVR)/avr/lib |
# Define programs and commands. |
#SHELL = $(DIRAVRUTILS)/sh |
#NM = $(DIRAVRBIN)/avr-nm |
#CC = $(DIRAVRBIN)/avr-gcc |
#OBJCOPY = $(DIRAVRBIN)/avr-objcopy |
#OBJDUMP= $(DIRAVRBIN)/avr-objdump |
#SIZE = $(DIRAVRBIN)/avr-size |
#AVRDUDE = $(DIRAVRBIN)/avrdude.sh |
#REMOVE = rm -f |
#COPY = cp |
# Define programs and commands. |
SHELL = sh |
CC = avr-gcc |
OBJCOPY = avr-objcopy |
OBJDUMP = avr-objdump |
SIZE = avr-size |
NM = avr-nm |
AVRDUDE = avrdude |
REMOVE = rm -f |
COPY = cp |
WINSHELL = cmd |
# Define Messages |
# English |
MSG_ERRORS_NONE = Errors: none |
MSG_BEGIN = -------- begin -------- |
MSG_END = -------- end -------- |
MSG_SIZE_BEFORE = Size before: |
MSG_SIZE_AFTER = Size after: |
MSG_COFF = Converting to AVR COFF: |
MSG_EXTENDED_COFF = Converting to AVR Extended COFF: |
MSG_FLASH = Creating load file for Flash: |
MSG_EEPROM = Creating load file for EEPROM: |
MSG_EXTENDED_LISTING = Creating Extended Listing: |
MSG_SYMBOL_TABLE = Creating Symbol Table: |
MSG_LINKING = Linking: |
MSG_COMPILING = Compiling: |
MSG_ASSEMBLING = Assembling: |
MSG_CLEANING = Cleaning project: |
# Define all object files. |
OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) |
# Define all listing files. |
LST = $(ASRC:.S=.lst) $(SRC:.c=.lst) |
# Compiler flags to generate dependency files. |
### GENDEPFLAGS = -Wp,-M,-MP,-MT,$(*F).o,-MF,.dep/$(@F).d |
GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d |
# Combine all necessary flags and optional flags. |
# Add target processor to flags. |
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS) |
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) |
# Default target. |
all: begin gccversion sizebefore build sizeafter finished end |
build: elf hex eep lss sym |
elf: $(TARGET).elf |
hex: $(TARGET).hex |
eep: $(TARGET).eep |
lss: $(TARGET).lss |
sym: $(TARGET).sym |
# Eye candy. |
# AVR Studio 3.x does not check make's exit code but relies on |
# the following magic strings to be generated by the compile job. |
begin: |
@echo |
@echo $(MSG_BEGIN) |
finished: |
@echo $(MSG_ERRORS_NONE) |
end: |
@echo $(MSG_END) |
@echo |
# Display size of file. |
HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex |
ELFSIZE = $(SIZE) -x -A $(TARGET).elf |
sizebefore: |
@if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); echo; fi |
sizeafter: |
@if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); echo; fi |
# Display compiler version information. |
gccversion : |
@$(CC) --version |
# Program the device. |
program: $(TARGET).hex $(TARGET).eep |
$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) |
# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. |
COFFCONVERT=$(OBJCOPY) --debugging \ |
--change-section-address .data-0x800000 \ |
--change-section-address .bss-0x800000 \ |
--change-section-address .noinit-0x800000 \ |
--change-section-address .eeprom-0x810000 |
coff: $(TARGET).elf |
@echo |
@echo $(MSG_COFF) $(TARGET).cof |
$(COFFCONVERT) -O coff-avr $< $(TARGET).cof |
extcoff: $(TARGET).elf |
@echo |
@echo $(MSG_EXTENDED_COFF) $(TARGET).cof |
$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof |
# Create final output files (.hex, .eep) from ELF output file. |
%.hex: %.elf |
@echo |
@echo $(MSG_FLASH) $@ |
$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ |
%.eep: %.elf |
@echo |
@echo $(MSG_EEPROM) $@ |
-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ |
--change-section-lma .eeprom=0 -O $(FORMAT) $< $@ |
# Create extended listing file from ELF output file. |
%.lss: %.elf |
@echo |
@echo $(MSG_EXTENDED_LISTING) $@ |
$(OBJDUMP) -h -S $< > $@ |
# Create a symbol table from ELF output file. |
%.sym: %.elf |
@echo |
@echo $(MSG_SYMBOL_TABLE) $@ |
$(NM) -n $< > $@ |
# Link: create ELF output file from object files. |
.SECONDARY : $(TARGET).elf |
.PRECIOUS : $(OBJ) |
%.elf: $(OBJ) |
@echo |
@echo $(MSG_LINKING) $@ |
$(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS) |
# Compile: create object files from C source files. |
%.o : %.c |
@echo |
@echo $(MSG_COMPILING) $< |
$(CC) -c $(ALL_CFLAGS) $< -o $@ |
# Compile: create assembler files from C source files. |
%.s : %.c |
$(CC) -S $(ALL_CFLAGS) $< -o $@ |
# Assemble: create object files from assembler source files. |
%.o : %.S |
@echo |
@echo $(MSG_ASSEMBLING) $< |
$(CC) -c $(ALL_ASFLAGS) $< -o $@ |
# Target: clean project. |
clean: begin clean_list finished end |
clean_list : |
@echo |
@echo $(MSG_CLEANING) |
$(REMOVE) $(TARGET).hex |
$(REMOVE) $(TARGET).eep |
$(REMOVE) $(TARGET).obj |
$(REMOVE) $(TARGET).cof |
$(REMOVE) $(TARGET).elf |
$(REMOVE) $(TARGET).map |
$(REMOVE) $(TARGET).obj |
$(REMOVE) $(TARGET).a90 |
$(REMOVE) $(TARGET).sym |
$(REMOVE) $(TARGET).lnk |
$(REMOVE) $(TARGET).lss |
$(REMOVE) $(OBJ) |
$(REMOVE) $(LST) |
$(REMOVE) $(SRC:.c=.s) |
$(REMOVE) $(SRC:.c=.d) |
$(REMOVE) .dep/* |
# Include the dependency files. |
-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*) |
# Listing of phony targets. |
.PHONY : all begin finish end sizebefore sizeafter gccversion \ |
build elf hex eep lss sym coff extcoff \ |
clean clean_list program |
/Transportables_Koptertool/tags/V3.9/Bootlader/mega128.h |
---|
0,0 → 1,39 |
#ifndef _MEGA128_H_ |
#define _MEGA128_H_ |
/* Part-Code ISP */ |
#define DEVTYPE_ISP 0x43 |
/* Part-Code Boot */ |
#define DEVTYPE_BOOT 0x44 |
#define SIG_BYTE1 0x1E |
#define SIG_BYTE2 0x97 |
#define SIG_BYTE3 0x02 |
#ifndef UART_USE_SECOND |
#define UART_BAUD_HIGH UBRR0H |
#define UART_BAUD_LOW UBRR0L |
#define UART_STATUS UCSR0A |
#define UART_TXREADY UDRE0 |
#define UART_RXREADY RXC0 |
#define UART_DOUBLE U2X0 |
#define UART_CTRL UCSR0B |
#define UART_CTRL_DATA ((1<<TXEN0) | (1<<RXEN0)) |
#define UART_CTRL2 UCSR0C |
#define UART_CTRL2_DATA ((1<<UCSZ01) | (1<<UCSZ00)) |
#define UART_DATA UDR0 |
#else |
#define UART_BAUD_HIGH UBRR1H |
#define UART_BAUD_LOW UBRR1L |
#define UART_STATUS UCSR1A |
#define UART_TXREADY UDRE1 |
#define UART_RXREADY RXC1 |
#define UART_DOUBLE U2X1 |
#define UART_CTRL UCSR1B |
#define UART_CTRL_DATA ((1<<TXEN1) | (1<<RXEN1)) |
#define UART_CTRL2 UCSR1C |
#define UART_CTRL2_DATA ((1<<UCSZ11) | (1<<UCSZ10)) |
#define UART_DATA UDR1 |
#endif |
#endif // #ifndef _MEGA128_H_ |
/Transportables_Koptertool/tags/V3.9/Bootlader/mega128can.h |
---|
0,0 → 1,42 |
#ifndef _MEGA128CAN_H_ |
#define _MEGA128CAN_H_ |
/* Dummy: use ATmega128 device-code for now, |
must be same as used in avrdude.conf */ |
/* Part-Code ISP */ |
#define DEVTYPE_ISP 0x43 |
/* Part-Code Boot */ |
#define DEVTYPE_BOOT 0x44 |
#define SIG_BYTE1 0x1E |
#define SIG_BYTE2 0x97 |
#define SIG_BYTE3 0x81 |
#ifndef UART_USE_SECOND |
#define UART_BAUD_HIGH UBRR0H |
#define UART_BAUD_LOW UBRR0L |
#define UART_STATUS UCSR0A |
#define UART_TXREADY UDRE0 |
#define UART_RXREADY RXC0 |
#define UART_DOUBLE U2X0 |
#define UART_CTRL UCSR0B |
#define UART_CTRL_DATA ((1<<TXEN0) | (1<<RXEN0)) |
#define UART_CTRL2 UCSR0C |
#define UART_CTRL2_DATA ((1<<UCSZ01) | (1<<UCSZ00)) |
#define UART_DATA UDR0 |
#else |
#define UART_BAUD_HIGH UBRR1H |
#define UART_BAUD_LOW UBRR1L |
#define UART_STATUS UCSR1A |
#define UART_TXREADY UDRE1 |
#define UART_RXREADY RXC1 |
#define UART_DOUBLE U2X1 |
#define UART_CTRL UCSR1B |
#define UART_CTRL_DATA ((1<<TXEN1) | (1<<RXEN1)) |
#define UART_CTRL2 UCSR1C |
#define UART_CTRL2_DATA ((1<<UCSZ11) | (1<<UCSZ10)) |
#define UART_DATA UDR1 |
#endif |
#endif // #ifndef _MEGA128CAN_H_ |
/Transportables_Koptertool/tags/V3.9/Bootlader/mega16.h |
---|
0,0 → 1,25 |
#ifndef _MEGA16_H_ |
#define _MEGA16_H_ |
/* Part-Code ISP */ |
#define DEVTYPE_ISP 0x74 |
/* Part-Code Boot */ |
#define DEVTYPE_BOOT 0x75 |
#define SIG_BYTE1 0x1E |
#define SIG_BYTE2 0x94 |
#define SIG_BYTE3 0x03 |
#define UART_BAUD_HIGH UBRRH |
#define UART_BAUD_LOW UBRRL |
#define UART_STATUS UCSRA |
#define UART_TXREADY UDRE |
#define UART_RXREADY RXC |
#define UART_DOUBLE U2X |
#define UART_CTRL UCSRB |
#define UART_CTRL_DATA ((1<<TXEN) | (1<<RXEN)) |
#define UART_CTRL2 UCSRC |
#define UART_CTRL2_DATA ((1<<URSEL) | (1<<UCSZ1) | (1<<UCSZ0)) |
#define UART_DATA UDR |
#endif // #ifndef _MEGA16_H_ |
/Transportables_Koptertool/tags/V3.9/Bootlader/mega162.h |
---|
0,0 → 1,45 |
#ifndef _MEGA162_H_ |
#define _MEGA162_H_ |
/* Part-Code ISP */ |
// documented code (AVR109 AppNote) but not supported by AVRProg 1.40 |
// #define DEVTYPE_ISP 0x62 |
// fake ATmega16 instead: |
#define DEVTYPE_ISP 0x74 |
/* Part-Code Boot */ |
// documented code but not supported by AVRProg 1.40 |
// #define DEVTYPE_BOOT 0x63 |
// fake ATmega16: |
#define DEVTYPE_BOOT 0x75 |
#define SIG_BYTE1 0x1E |
#define SIG_BYTE2 0x94 |
#define SIG_BYTE3 0x04 |
#ifndef UART_USE_SECOND |
#define UART_BAUD_HIGH UBRR0H |
#define UART_BAUD_LOW UBRR0L |
#define UART_STATUS UCSR0A |
#define UART_TXREADY UDRE0 |
#define UART_RXREADY RXC0 |
#define UART_DOUBLE U2X0 |
#define UART_CTRL UCSR0B |
#define UART_CTRL_DATA ((1<<TXEN0) | (1<<RXEN0)) |
#define UART_CTRL2 UCSR0C |
#define UART_CTRL2_DATA ((1<<URSEL0) | (1<<UCSZ01) | (1<<UCSZ00)) |
#define UART_DATA UDR0 |
#else |
#define UART_BAUD_HIGH UBRR1H |
#define UART_BAUD_LOW UBRR1L |
#define UART_STATUS UCSR1A |
#define UART_TXREADY UDRE1 |
#define UART_RXREADY RXC1 |
#define UART_DOUBLE U2X1 |
#define UART_CTRL UCSR1B |
#define UART_CTRL_DATA ((1<<TXEN1) | (1<<RXEN1)) |
#define UART_CTRL2 UCSR1C |
#define UART_CTRL2_DATA ( (1<<URSEL1) | (1<<UCSZ11) | (1<<UCSZ10)) |
#define UART_DATA UDR1 |
#endif |
#endif // #ifndef _MEGA162_H_ |
/Transportables_Koptertool/tags/V3.9/Bootlader/mega169.h |
---|
0,0 → 1,23 |
#ifndef _MEGA169_H_ |
#define _MEGA169_H_ |
#define DEVTYPE_ISP 0x78 |
#define DEVTYPE_BOOT 0x79 |
#define SIG_BYTE3 0x1E |
#define SIG_BYTE2 0x94 |
#define SIG_BYTE1 0x05 |
#define UART_BAUD_HIGH UBRRH |
#define UART_BAUD_LOW UBRRL |
#define UART_STATUS UCSRA |
#define UART_TXREADY UDRE |
#define UART_RXREADY RXC |
#define UART_DOUBLE U2X |
#define UART_CTRL UCSRB |
#define UART_CTRL_DATA ((1<<TXEN) | (1<<RXEN)) |
#define UART_CTRL2 UCSRC |
#define UART_CTRL2_DATA ((1<<UCSZ1) | (1<<UCSZ0)) |
#define UART_DATA UDR |
#endif // #ifndef _MEGA169_H_ |
/Transportables_Koptertool/tags/V3.9/Bootlader/mega32.h |
---|
0,0 → 1,25 |
#ifndef _MEGA32_H_ |
#define _MEGA32_H_ |
/* Part-Code ISP */ |
#define DEVTYPE_ISP 0x72 |
/* Part-Code Boot */ |
#define DEVTYPE_BOOT 0x73 |
#define SIG_BYTE1 0x1E |
#define SIG_BYTE2 0x95 |
#define SIG_BYTE3 0x02 |
#define UART_BAUD_HIGH UBRRH |
#define UART_BAUD_LOW UBRRL |
#define UART_STATUS UCSRA |
#define UART_TXREADY UDRE |
#define UART_RXREADY RXC |
#define UART_DOUBLE U2X |
#define UART_CTRL UCSRB |
#define UART_CTRL_DATA ((1<<TXEN) | (1<<RXEN)) |
#define UART_CTRL2 UCSRC |
#define UART_CTRL2_DATA ((1<<URSEL) | (1<<UCSZ1) | (1<<UCSZ0)) |
#define UART_DATA UDR |
#endif // #ifndef _MEGA32_H_ |
/Transportables_Koptertool/tags/V3.9/Bootlader/mega324p.h |
---|
0,0 → 1,17 |
#ifndef _MEGA324P_H_ |
#define _MEGA324P_H_ |
/* I (M. Thomas) could not find an official Boot-ID |
for the ATmega324P so pretend it's an ATmega32 */ |
/* Part-Code ISP */ |
#define DEVTYPE_ISP 0x72 |
/* Part-Code Boot */ |
#define DEVTYPE_BOOT 0x73 |
#define SIG_BYTE1 0x1E |
#define SIG_BYTE2 0x95 |
#define SIG_BYTE3 0x08 |
#include "megaxx4p.h" |
#endif // #ifndef _MEGA324P_H_ |
/Transportables_Koptertool/tags/V3.9/Bootlader/mega64.h |
---|
0,0 → 1,39 |
#ifndef _MEGA64_H_ |
#define _MEGA64_H_ |
/* Part-Code ISP */ |
#define DEVTYPE_ISP 0x45 |
/* Part-Code Boot */ |
#define DEVTYPE_BOOT 0x46 |
#define SIG_BYTE1 0x1E |
#define SIG_BYTE2 0x96 |
#define SIG_BYTE3 0x02 |
#ifndef UART_USE_SECOND |
#define UART_BAUD_HIGH UBRR0H |
#define UART_BAUD_LOW UBRR0L |
#define UART_STATUS UCSR0A |
#define UART_TXREADY UDRE0 |
#define UART_RXREADY RXC0 |
#define UART_DOUBLE U2X0 |
#define UART_CTRL UCSR0B |
#define UART_CTRL_DATA ((1<<TXEN0) | (1<<RXEN0)) |
#define UART_CTRL2 UCSR0C |
#define UART_CTRL2_DATA ((1<<UCSZ01) | (1<<UCSZ00)) |
#define UART_DATA UDR0 |
#else |
#define UART_BAUD_HIGH UBRR1H |
#define UART_BAUD_LOW UBRR1L |
#define UART_STATUS UCSR1A |
#define UART_TXREADY UDRE1 |
#define UART_RXREADY RXC1 |
#define UART_DOUBLE U2X1 |
#define UART_CTRL UCSR1B |
#define UART_CTRL_DATA ((1<<TXEN1) | (1<<RXEN1)) |
#define UART_CTRL2 UCSR1C |
#define UART_CTRL2_DATA ((1<<UCSZ11) | (1<<UCSZ10)) |
#define UART_DATA UDR1 |
#endif |
#endif // #ifndef _MEGA64_H_ |
/Transportables_Koptertool/tags/V3.9/Bootlader/mega644.h |
---|
0,0 → 1,42 |
#ifndef _MEGA644_H_ |
#define _MEGA644_H_ |
/* I (M. Thomas) could not find an official Boot-ID |
for the ATmega644 so pretend it's an ATmega64 */ |
/* Part-Code ISP */ |
#define DEVTYPE_ISP 0x45 |
/* Part-Code Boot */ |
#define DEVTYPE_BOOT 0x46 |
#define SIG_BYTE1 0x1E |
#define SIG_BYTE2 0x96 |
#define SIG_BYTE3 0x09 |
#define UART_BAUD_HIGH UBRR0H |
#define UART_BAUD_LOW UBRR0L |
#define UART_STATUS UCSR0A |
#define UART_TXREADY UDRE0 |
#define UART_RXREADY RXC0 |
#define UART_DOUBLE U2X0 |
#define UART_CTRL UCSR0B |
#define UART_CTRL_DATA ((1<<TXEN0) | (1<<RXEN0)) |
#define UART_CTRL2 UCSR0C |
#define UART_CTRL2_DATA ( (1<<UCSZ01) | (1<<UCSZ00)) |
#define UART_DATA UDR0 |
#define WDT_OFF_SPECIAL |
static inline void bootloader_wdt_off(void) |
{ |
cli(); |
wdt_reset(); |
/* Clear WDRF in MCUSR */ |
MCUSR &= ~(1<<WDRF); |
/* Write logical one to WDCE and WDE */ |
/* Keep old prescaler setting to prevent unintentional time-out */ |
WDTCSR |= (1<<WDCE) | (1<<WDE); |
/* Turn off WDT */ |
WDTCSR = 0x00; |
} |
#endif // #ifndef _MEGA644_H_ |
/Transportables_Koptertool/tags/V3.9/Bootlader/mega644p.h |
---|
0,0 → 1,17 |
#ifndef _MEGA644P_H_ |
#define _MEGA644P_H_ |
/* I (M. Thomas) could not find an official Boot-ID |
for the ATmega644P so pretend it's an ATmega64 */ |
/* Part-Code ISP */ |
#define DEVTYPE_ISP 0x45 |
/* Part-Code Boot */ |
#define DEVTYPE_BOOT 0x46 |
#define SIG_BYTE1 0x1E |
#define SIG_BYTE2 0x96 |
#define SIG_BYTE3 0x0A |
#include "megaxx4p.h" |
#endif // #ifndef _MEGA644P_H_ |
/Transportables_Koptertool/tags/V3.9/Bootlader/mega8.h |
---|
0,0 → 1,25 |
#ifndef _MEGA8_H_ |
#define _MEGA8_H_ |
/* Part-Code ISP */ |
#define DEVTYPE_ISP 0x76 |
/* Part-Code BOOT */ |
#define DEVTYPE_BOOT 0x77 |
#define SIG_BYTE1 0x1E |
#define SIG_BYTE2 0x93 |
#define SIG_BYTE3 0x07 |
#define UART_BAUD_HIGH UBRRH |
#define UART_BAUD_LOW UBRRL |
#define UART_STATUS UCSRA |
#define UART_TXREADY UDRE |
#define UART_RXREADY RXC |
#define UART_DOUBLE U2X |
#define UART_CTRL UCSRB |
#define UART_CTRL_DATA ((1<<TXEN) | (1<<RXEN)) |
#define UART_CTRL2 UCSRC |
#define UART_CTRL2_DATA ((1<<URSEL) | (1<<UCSZ1) | (1<<UCSZ0)) |
#define UART_DATA UDR |
#endif // #ifndef _MEGA8_H_ |
/Transportables_Koptertool/tags/V3.9/Bootlader/megaxx4p.h |
---|
0,0 → 1,47 |
#ifndef _MEGAxx4_H_ |
#define _MEGAxx4_H_ |
#ifndef UART_USE_SECOND |
/* UART 0 */ |
#define UART_BAUD_HIGH UBRR0H |
#define UART_BAUD_LOW UBRR0L |
#define UART_STATUS UCSR0A |
#define UART_TXREADY UDRE0 |
#define UART_RXREADY RXC0 |
#define UART_DOUBLE U2X0 |
#define UART_CTRL UCSR0B |
#define UART_CTRL_DATA ((1<<TXEN0) | (1<<RXEN0)) |
#define UART_CTRL2 UCSR0C |
#define UART_CTRL2_DATA ( (1<<UCSZ01) | (1<<UCSZ00)) |
#define UART_DATA UDR0 |
#else |
/* UART 1 */ |
#define UART_BAUD_HIGH UBRR1H |
#define UART_BAUD_LOW UBRR1L |
#define UART_STATUS UCSR1A |
#define UART_TXREADY UDRE1 |
#define UART_RXREADY RXC1 |
#define UART_DOUBLE U2X1 |
#define UART_CTRL UCSR1B |
#define UART_CTRL_DATA ((1<<TXEN1) | (1<<RXEN1)) |
#define UART_CTRL2 UCSR1C |
#define UART_CTRL2_DATA ( (1<<UCSZ11) | (1<<UCSZ10)) |
#define UART_DATA UDR1 |
#endif |
#define WDT_OFF_SPECIAL |
static inline void bootloader_wdt_off(void) |
{ |
cli(); |
wdt_reset(); |
/* Clear WDRF in MCUSR */ |
MCUSR &= ~(1<<WDRF); |
/* Write logical one to WDCE and WDE */ |
/* Keep old prescaler setting to prevent unintentional time-out */ |
WDTCSR |= (1<<WDCE) | (1<<WDE); |
/* Turn off WDT */ |
WDTCSR = 0x00; |
} |
#endif // #ifndef _MEGA644_H_ |
/Transportables_Koptertool/tags/V3.9/Bootlader/readme.txt |
---|
0,0 → 1,267 |
====================================================== |
ATMEL AVR UART Bootloader for AVR-GCC/avr-libc |
by Martin Thomas, Kaiserslautern, Germany |
mthomas@rhrk.uni-kl.de |
eversmith@heizung-thomas.de |
http://www.siwawi.arubi.uni-kl.de/avr_projects |
** Addtional code and improvements contributed ** |
** by Uwe Bonnes, Bjoern Riemer and Olaf Rempel. ** |
Eearly versions of this bootloader-code have been |
based on the AVR Butterfly bootloader-source REV02 |
which has been available from atmel.com. |
====================================================== |
Programming-Software (on the "PC-Side"): |
* AVRProg (included in AVRStudio) available at www.atmel.com. |
MS-Windows only. AVRProg can be used as stand-alone application. |
(avrprog.exe) |
* avrdude available at http://savannah.nongnu.org/projects/avrdude/ |
"Multiplattform" |
* Installation instructions at the end of this file. |
3. Dec. 2008 - Version 0.85 |
* disable U2X before jump to app as suggested be Alexander Döller |
* moved UBRR-macros to main.c and changed them. Inspired by code from avr-libc setbaud. |
(macros which are commented out (//) are from Pavel Fertser) |
6. Nov. 2008 - Version 0.84 |
* Added definitions for ATmega64 provided by Pavel Fertser - Thanks. |
12. Apr. 2008 - Version 0.83 |
* Added definitions for ATmega644P and ATmega324P |
* Tested with ATmega324P, gcc 4.2.2, avr-libc 1.4.6 |
* Added testapp to verify "exit bootloader" with |
watchdog (n.b.: watchdog-disable called early in testapp) |
27. Jan. 2007 - Version 0.82 |
* Added definitions for ATmega644. |
* Using avr-lib's eeprom-functions (old "direct-access"-code |
has not been compatible with ATmega644). |
* Watchdog-disable at startup (configurable): avoids problems with |
repeated login to bootloader. Not needed if the bootloader is |
never re-entered again between an "exit programming" and |
a system-reset/power-toogle. |
* Additional watchdog disable-function for ATmega644. |
* Made watchdog-enable time at exit-programming a configuration-value |
(define). |
* Bootloader read-protection: if enabled the bootloader fakes |
an empty boot-section (configurable by define) |
Since more of the avr-libc functions's are used this version |
should be more portable for other AVRs but the size of the |
binary increases a little bit. |
Make sure to disable the watchdog early in the user-application |
esp. when using a "modern" AVR (i.e. ATmega48/88/168/644/324P/644P). |
3. Dec. 2006 - Version 0.81 |
* Added definitions for ATmega162. |
* Fixed init for double-speed (bitmask). Thanks to Bernhard Roth |
28. May 2006 - Version 0.8beta3 |
* Supports discarding of interrupt-vectors which saves some space |
if no interrupts are needed in the bootloader. Added option |
in makefile to enable this feature, modified LDFLAGS, |
additional code in main.c for a pseudo default_interrupt ISR. |
The modified linker-scripts have been contributed by |
Olaf Rempel (basicly just the .vector-section is not linked). |
* Reverted the order of signatur-byte-numbers in part- |
configurations to the usual order in the datasheet, |
also reverted in main.c for sending the signature. |
* Definitions for lock/fuse-readout. |
* Updated installation-instruction at the end of this file. |
* Added DEVTYPE_ISP/DEVTYPE_BOOT to part-configurations, |
added configuration-option for this in main.c. |
* A remark about the DEVTYPE: Usualy there are two |
Part-Codes/Device-Codes. One is for ISP: AVRProg shows |
the type of the AVR. The other code is for bootloading: |
AVRprog shows the type plus "BOOT". When a boot-device-code |
gets detected by AVRprog it "knows" how do handle the |
limited functionality of bootloaders. (When receiving the |
ISP-code AVRProg expects an AVR910-type programmer.) |
The offset between the codes is usualy 0x01 where the |
ISP-code is the smaller value, i.e. ATmega32 ISP-code |
is 0x72->"ATmega32" and boot-code is 0x73->"ATmega32 BOOT". |
When using avrdude the bootloader's device-code must match |
the device-code in the avrdude.conf. Check the avrdude- |
code to see if both codes (AVR910 and AVR109) are supported. |
-- I have got some e-mails from users which have been |
confused by this. Hopefully this explanation is good enough. |
* This bootloader lets the watchdog do a reset when the |
user selects "Exit programmer" (i.e. in AVRProg) after an |
update. Make sure to disable or reset the watchdog early in |
your application. |
27. May 2006 - Version 0.8beta2 |
* More very well done improvements contributed by Olaf Rempel. |
* Olaf Rempel also modified the STARTUP_WAIT method. |
21. May 2006 - Version 0.8beta |
* Version contributed by Olaf Rempel. He has done a lot of modifications. |
-> "cleaner code", smaller binaries. |
09. Feb. 2006 - Version 0.75 |
* additional STARTUP_WAIT support contributed by Bjoern Riemer |
18. Aug. 2005 - Version 0.74 |
* AT90CAN128 support contributed by Uwe Bonnes |
* Makefile modifications contributed by Uwe Bonnes |
23. Feb. 2005 - Version 0.7 |
* (Version 0.6 has never been available on the web-page) |
* ATmega128 support |
* code cleanup |
* This version has been tested with ATmega8, ATmega32 and |
ATmega128 |
7. Apr. 2004 - Version 0.5 |
* added different startup-methods |
* compatible with ATmega8 now |
* included makefile adapted to ATmega8 now |
(ATmega16 options still available) |
* fixed jump to application which did not work |
reliably before |
* tested with ATmega8 |
* minimal options and startup-code result in |
bootloader-size < 512 words |
6. Apr. 2004 - Version 0.4 |
* Buffered read of chars from UART during programming |
since eeprom-write is too slow for unbuffered |
operation. So EEPROM-upload does work now. |
* Added BOOTICE-mode to flash JTAGICE-compatible |
hardware (ATmega16@7,3Mhz) (if you know about BOOTICE, |
you may unterstand why this has been added, if not |
just keep the option disabled) |
* small changes in (my)boot.h (lock-bit-mask) found |
out during the development of the STK-500-compatible |
bootloader. But setting lock-bits still does not |
work with this bootloader. |
* read of the low-fuse byte works (high byte still TODO) |
* read of the lock-byte works (write still TODO) |
27. Mar 2004 - Version 0.3 |
Felt that as much functions from avr-libc's boot.h |
as possible should be used without modifications. |
Latest CVS-version of boot.h is included. |
Only the read-routine is still "self-made" based |
on ATMELs assembler-code. |
EEPROM write on Mega16 does not work (and did not |
work with V0.2 too). May be caused by my old Mega16 |
chip. Needs testing. Flash read/write and EEPROM |
read works. Still only tested with ATmega16. |
This version may not work with the ATmega169 any |
more. |
24. Mar 2004 - Version 0.2 |
During the development of a data-logger application |
with the AVR-Butterfly there was a need to make |
some changes in the bootloader. The same problem |
again: no IAR compiler. The same way to solve the |
problem: a port of the code to avr-gcc/avr-libc. |
So this code is based on the ATMEL Butterfly |
bootloader source code Rev 0.2 for IAR. |
The bootloader-port for the Butterfly which mimics |
the complete functionality of the original |
BF-bootloader is availabe at: |
www.siwawi.arubi.uni-kl.de/avr_projects |
Atmel used a separate "lib" written in "pure" |
assembly to access the low-level functions |
for flash read/write. Well, so far I |
don't know how to use "mixed language sources" |
with the avr-gcc toolchain, so the low-level |
routines have been implemented as inline assembler. |
The avr-libc boot.h module written by Eric |
Weddington served as a template Three of the four |
low-level routines found in lowlevel.c come from |
boot.h with minimal changes. The read routine has |
been developed based on the ATMEL assembler code. |
Ignore the fuse and lock-bit readout. Read and Set is |
not enabled (TODO). |
--------------- Installation ----------------- |
- Change the MCU type in the makefile. |
- Change the boot(loader)-size in Makefile. The needed |
space depends on the features selected in main.c |
- Set baudrate in main.c, a doublespeed configuration-option |
is available too. |
- Change the F_CPU in main.c to the clock-frequency |
of your board. See the datasheet for frequencies |
with minimum error at the selected baudrate. |
- Select the start-condition in main.c. |
- Please use at least avr-gcc 3.3.1/avr-libc 1.0 |
or WINAVR Sept. 2003 or later to compile and link |
this bootloader. |
- Upload the hex-File to the AVR (STK500, STK200, SP12 |
evertool, AVR910 etc.) |
- Program the "Boot Flash section size" (BOOTSZ fuses) |
according to the boot-size selected in the makefile |
i.e. BOOTSZ=00 for boot-size 1024 words (2048 bytes) |
on ATmega16 |
- enable the BOOT Reset Vector fuse (BOOTRST=0) |
- Set the lock bits to protect the bootloader from |
SPM-writes (Boot Loader Protection Mode 2 in STK500- |
plugin) so that it can not overwrite itself. |
- Connect the AVR UART Pins via level-shifter/inverter |
(i.e. MAX232) to your PCs COM-Port. |
- Reset the AVR while fullfilling the bootloader start- |
condition. (Default: selected pin connected to GND). |
The condition must be "true" until you see the |
AVRPROG dialog or avrdude connects. |
- Start AVRPROG (AVRStudio/Tools or stand-alone avrprog.exe) |
AVRDUDE is supported too, check it's manual |
for command-line options. Read the text above for |
information about Device-Types and AVRDUDE |
- AVRPROG or AVRDUDE should detect the bootloader. |
- see AVRStudio's online-help for more information how |
to use AVRPROG |
- make sure to EXIT from AVRPROG (button) to start |
your main-application or toogle power/reset. |
Feedback welcome, Good luck. |
Martin |
/Transportables_Koptertool/tags/V3.9/Bootlader/testapp/Makefile |
---|
0,0 → 1,619 |
# Hey Emacs, this is a -*- makefile -*- |
#---------------------------------------------------------------------------- |
# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al. |
# |
# Released to the Public Domain |
# |
# Additional material for this makefile was written by: |
# Peter Fleury |
# Tim Henigan |
# Colin O'Flynn |
# Reiner Patommel |
# Markus Pfaff |
# Sander Pool |
# Frederik Rouleau |
# Carlos Lamas |
# |
#---------------------------------------------------------------------------- |
# On command line: |
# |
# make all = Make software. |
# |
# make clean = Clean out built project files. |
# |
# make coff = Convert ELF to AVR COFF. |
# |
# make extcoff = Convert ELF to AVR Extended COFF. |
# |
# make program = Download the hex file to the device, using avrdude. |
# Please customize the avrdude settings below first! |
# |
# make debug = Start either simulavr or avarice as specified for debugging, |
# with avr-gdb or avr-insight as the front end for debugging. |
# |
# make filename.s = Just compile filename.c into the assembler code only. |
# |
# make filename.i = Create a preprocessed source file for use in submitting |
# bug reports to the GCC project. |
# |
# To rebuild project do "make clean" then "make all". |
#---------------------------------------------------------------------------- |
# MCU name |
MCU = atmega324p |
# Processor frequency. |
# This will define a symbol, F_CPU, in all source code files equal to the |
# processor frequency. You can then use this symbol in your source code to |
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done |
# automatically to create a 32-bit value in your source code. |
# Typical values are: |
# F_CPU = 1000000 |
# F_CPU = 1843200 |
# F_CPU = 2000000 |
# F_CPU = 3686400 |
# F_CPU = 4000000 |
# F_CPU = 7372800 |
# F_CPU = 8000000 |
# F_CPU = 11059200 |
# F_CPU = 14745600 |
# F_CPU = 16000000 |
# F_CPU = 18432000 |
# F_CPU = 20000000 |
F_CPU = 3686400 |
# Output format. (can be srec, ihex, binary) |
FORMAT = ihex |
# Target file name (without extension). |
TARGET = testapp |
# Object files directory |
# To put object files in current directory, use a dot (.), do NOT make |
# this an empty or blank macro! |
OBJDIR = . |
# List C source files here. (C dependencies are automatically generated.) |
SRC = $(TARGET).c |
# List C++ source files here. (C dependencies are automatically generated.) |
CPPSRC = |
# List Assembler source files here. |
# Make them always end in a capital .S. Files ending in a lowercase .s |
# will not be considered source files but generated files (assembler |
# output from the compiler), and will be deleted upon "make clean"! |
# Even though the DOS/Win* filesystem matches both .s and .S the same, |
# it will preserve the spelling of the filenames, and gcc itself does |
# care about how the name is spelled on its command-line. |
ASRC = |
# Optimization level, can be [0, 1, 2, 3, s]. |
# 0 = turn off optimization. s = optimize for size. |
# (Note: 3 is not always the best optimization level. See avr-libc FAQ.) |
OPT = s |
# Debugging format. |
# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs. |
# AVR Studio 4.10 requires dwarf-2. |
# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run. |
DEBUG = dwarf-2 |
# List any extra directories to look for include files here. |
# Each directory must be seperated by a space. |
# Use forward slashes for directory separators. |
# For a directory that has spaces, enclose it in quotes. |
EXTRAINCDIRS = |
# Compiler flag to set the C Standard level. |
# c89 = "ANSI" C |
# gnu89 = c89 plus GCC extensions |
# c99 = ISO C99 standard (not yet fully implemented) |
# gnu99 = c99 plus GCC extensions |
CSTANDARD = -std=gnu99 |
# Place -D or -U options here for C sources |
CDEFS = -DF_CPU=$(F_CPU)UL |
# Place -D or -U options here for ASM sources |
ADEFS = -DF_CPU=$(F_CPU) |
# Place -D or -U options here for C++ sources |
CPPDEFS = -DF_CPU=$(F_CPU)UL |
#CPPDEFS += -D__STDC_LIMIT_MACROS |
#CPPDEFS += -D__STDC_CONSTANT_MACROS |
#---------------- Compiler Options C ---------------- |
# -g*: generate debugging information |
# -O*: optimization level |
# -f...: tuning, see GCC manual and avr-libc documentation |
# -Wall...: warning level |
# -Wa,...: tell GCC to pass this to the assembler. |
# -adhlns...: create assembler listing |
CFLAGS = -g$(DEBUG) |
CFLAGS += $(CDEFS) |
CFLAGS += -O$(OPT) |
CFLAGS += -funsigned-char |
CFLAGS += -funsigned-bitfields |
CFLAGS += -fpack-struct |
CFLAGS += -fshort-enums |
CFLAGS += -Wall |
CFLAGS += -Wstrict-prototypes |
#CFLAGS += -mshort-calls |
#CFLAGS += -fno-unit-at-a-time |
#CFLAGS += -Wundef |
#CFLAGS += -Wunreachable-code |
#CFLAGS += -Wsign-compare |
CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst) |
CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) |
CFLAGS += $(CSTANDARD) |
#---------------- Compiler Options C++ ---------------- |
# -g*: generate debugging information |
# -O*: optimization level |
# -f...: tuning, see GCC manual and avr-libc documentation |
# -Wall...: warning level |
# -Wa,...: tell GCC to pass this to the assembler. |
# -adhlns...: create assembler listing |
CPPFLAGS = -g$(DEBUG) |
CPPFLAGS += $(CPPDEFS) |
CPPFLAGS += -O$(OPT) |
CPPFLAGS += -funsigned-char |
CPPFLAGS += -funsigned-bitfields |
CPPFLAGS += -fpack-struct |
CPPFLAGS += -fshort-enums |
CPPFLAGS += -fno-exceptions |
CPPFLAGS += -Wall |
CFLAGS += -Wundef |
#CPPFLAGS += -mshort-calls |
#CPPFLAGS += -fno-unit-at-a-time |
#CPPFLAGS += -Wstrict-prototypes |
#CPPFLAGS += -Wunreachable-code |
#CPPFLAGS += -Wsign-compare |
CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst) |
CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) |
#CPPFLAGS += $(CSTANDARD) |
#---------------- Assembler Options ---------------- |
# -Wa,...: tell GCC to pass this to the assembler. |
# -adhlns: create listing |
# -gstabs: have the assembler create line number information; note that |
# for use in COFF files, additional information about filenames |
# and function names needs to be present in the assembler source |
# files -- see avr-libc docs [FIXME: not yet described there] |
# -listing-cont-lines: Sets the maximum number of continuation lines of hex |
# dump that will be displayed for a given single line of source input. |
ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100 |
#---------------- Library Options ---------------- |
# Minimalistic printf version |
PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min |
# Floating point printf version (requires MATH_LIB = -lm below) |
PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt |
# If this is left blank, then it will use the Standard printf version. |
PRINTF_LIB = |
#PRINTF_LIB = $(PRINTF_LIB_MIN) |
#PRINTF_LIB = $(PRINTF_LIB_FLOAT) |
# Minimalistic scanf version |
SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min |
# Floating point + %[ scanf version (requires MATH_LIB = -lm below) |
SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt |
# If this is left blank, then it will use the Standard scanf version. |
SCANF_LIB = |
#SCANF_LIB = $(SCANF_LIB_MIN) |
#SCANF_LIB = $(SCANF_LIB_FLOAT) |
MATH_LIB = -lm |
# List any extra directories to look for libraries here. |
# Each directory must be seperated by a space. |
# Use forward slashes for directory separators. |
# For a directory that has spaces, enclose it in quotes. |
EXTRALIBDIRS = |
#---------------- External Memory Options ---------------- |
# 64 KB of external RAM, starting after internal RAM (ATmega128!), |
# used for variables (.data/.bss) and heap (malloc()). |
#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff |
# 64 KB of external RAM, starting after internal RAM (ATmega128!), |
# only used for heap (malloc()). |
#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff |
EXTMEMOPTS = |
#---------------- Linker Options ---------------- |
# -Wl,...: tell GCC to pass this to linker. |
# -Map: create map file |
# --cref: add cross reference to map file |
LDFLAGS = -Wl,-Map=$(TARGET).map,--cref |
LDFLAGS += $(EXTMEMOPTS) |
LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS)) |
LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) |
#LDFLAGS += -T linker_script.x |
#---------------- Programming Options (avrdude) ---------------- |
# Programming hardware: alf avr910 avrisp bascom bsd |
# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500 |
# |
# Type: avrdude -c ? |
# to get a full listing. |
# |
AVRDUDE_PROGRAMMER = stk500 |
# com1 = serial port. Use lpt1 to connect to parallel port. |
AVRDUDE_PORT = com1 # programmer connected to serial device |
AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex |
#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep |
# Uncomment the following if you want avrdude's erase cycle counter. |
# Note that this counter needs to be initialized first using -Yn, |
# see avrdude manual. |
#AVRDUDE_ERASE_COUNTER = -y |
# Uncomment the following if you do /not/ wish a verification to be |
# performed after programming the device. |
#AVRDUDE_NO_VERIFY = -V |
# Increase verbosity level. Please use this when submitting bug |
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> |
# to submit bug reports. |
#AVRDUDE_VERBOSE = -v -v |
AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) |
AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY) |
AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE) |
AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER) |
#---------------- Debugging Options ---------------- |
# For simulavr only - target MCU frequency. |
DEBUG_MFREQ = $(F_CPU) |
# Set the DEBUG_UI to either gdb or insight. |
# DEBUG_UI = gdb |
DEBUG_UI = insight |
# Set the debugging back-end to either avarice, simulavr. |
DEBUG_BACKEND = avarice |
#DEBUG_BACKEND = simulavr |
# GDB Init Filename. |
GDBINIT_FILE = __avr_gdbinit |
# When using avarice settings for the JTAG |
JTAG_DEV = /dev/com1 |
# Debugging port used to communicate between GDB / avarice / simulavr. |
DEBUG_PORT = 4242 |
# Debugging host used to communicate between GDB / avarice / simulavr, normally |
# just set to localhost unless doing some sort of crazy debugging when |
# avarice is running on a different computer. |
DEBUG_HOST = localhost |
#============================================================================ |
# Define programs and commands. |
SHELL = sh |
CC = avr-gcc |
OBJCOPY = avr-objcopy |
OBJDUMP = avr-objdump |
SIZE = avr-size |
AR = avr-ar rcs |
NM = avr-nm |
AVRDUDE = avrdude |
REMOVE = rm -f |
REMOVEDIR = rm -rf |
COPY = cp |
WINSHELL = cmd |
# Define Messages |
# English |
MSG_ERRORS_NONE = Errors: none |
MSG_BEGIN = -------- begin -------- |
MSG_END = -------- end -------- |
MSG_SIZE_BEFORE = Size before: |
MSG_SIZE_AFTER = Size after: |
MSG_COFF = Converting to AVR COFF: |
MSG_EXTENDED_COFF = Converting to AVR Extended COFF: |
MSG_FLASH = Creating load file for Flash: |
MSG_EEPROM = Creating load file for EEPROM: |
MSG_EXTENDED_LISTING = Creating Extended Listing: |
MSG_SYMBOL_TABLE = Creating Symbol Table: |
MSG_LINKING = Linking: |
MSG_COMPILING = Compiling C: |
MSG_COMPILING_CPP = Compiling C++: |
MSG_ASSEMBLING = Assembling: |
MSG_CLEANING = Cleaning project: |
MSG_CREATING_LIBRARY = Creating library: |
# Define all object files. |
OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) |
# Define all listing files. |
LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) |
# Compiler flags to generate dependency files. |
GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d |
# Combine all necessary flags and optional flags. |
# Add target processor to flags. |
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS) |
ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS) |
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) |
# Default target. |
all: begin gccversion sizebefore build sizeafter end |
# Change the build target to build a HEX file or a library. |
build: elf hex eep lss sym |
#build: lib |
elf: $(TARGET).elf |
hex: $(TARGET).hex |
eep: $(TARGET).eep |
lss: $(TARGET).lss |
sym: $(TARGET).sym |
LIBNAME=lib$(TARGET).a |
lib: $(LIBNAME) |
# Eye candy. |
# AVR Studio 3.x does not check make's exit code but relies on |
# the following magic strings to be generated by the compile job. |
begin: |
@echo |
@echo $(MSG_BEGIN) |
end: |
@echo $(MSG_END) |
@echo |
# Display size of file. |
HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex |
ELFSIZE = $(SIZE) --mcu=$(MCU) --format=avr $(TARGET).elf |
sizebefore: |
@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \ |
2>/dev/null; echo; fi |
sizeafter: |
@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \ |
2>/dev/null; echo; fi |
# Display compiler version information. |
gccversion : |
@$(CC) --version |
# Program the device. |
program: $(TARGET).hex $(TARGET).eep |
$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) |
# Generate avr-gdb config/init file which does the following: |
# define the reset signal, load the target file, connect to target, and set |
# a breakpoint at main(). |
gdb-config: |
@$(REMOVE) $(GDBINIT_FILE) |
@echo define reset >> $(GDBINIT_FILE) |
@echo SIGNAL SIGHUP >> $(GDBINIT_FILE) |
@echo end >> $(GDBINIT_FILE) |
@echo file $(TARGET).elf >> $(GDBINIT_FILE) |
@echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE) |
ifeq ($(DEBUG_BACKEND),simulavr) |
@echo load >> $(GDBINIT_FILE) |
endif |
@echo break main >> $(GDBINIT_FILE) |
debug: gdb-config $(TARGET).elf |
ifeq ($(DEBUG_BACKEND), avarice) |
@echo Starting AVaRICE - Press enter when "waiting to connect" message displays. |
@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \ |
$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT) |
@$(WINSHELL) /c pause |
else |
@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \ |
$(DEBUG_MFREQ) --port $(DEBUG_PORT) |
endif |
@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE) |
# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. |
COFFCONVERT = $(OBJCOPY) --debugging |
COFFCONVERT += --change-section-address .data-0x800000 |
COFFCONVERT += --change-section-address .bss-0x800000 |
COFFCONVERT += --change-section-address .noinit-0x800000 |
COFFCONVERT += --change-section-address .eeprom-0x810000 |
coff: $(TARGET).elf |
@echo |
@echo $(MSG_COFF) $(TARGET).cof |
$(COFFCONVERT) -O coff-avr $< $(TARGET).cof |
extcoff: $(TARGET).elf |
@echo |
@echo $(MSG_EXTENDED_COFF) $(TARGET).cof |
$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof |
# Create final output files (.hex, .eep) from ELF output file. |
%.hex: %.elf |
@echo |
@echo $(MSG_FLASH) $@ |
$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ |
%.eep: %.elf |
@echo |
@echo $(MSG_EEPROM) $@ |
-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ |
--change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0 |
# Create extended listing file from ELF output file. |
%.lss: %.elf |
@echo |
@echo $(MSG_EXTENDED_LISTING) $@ |
$(OBJDUMP) -h -S $< > $@ |
# Create a symbol table from ELF output file. |
%.sym: %.elf |
@echo |
@echo $(MSG_SYMBOL_TABLE) $@ |
$(NM) -n $< > $@ |
# Create library from object files. |
.SECONDARY : $(TARGET).a |
.PRECIOUS : $(OBJ) |
%.a: $(OBJ) |
@echo |
@echo $(MSG_CREATING_LIBRARY) $@ |
$(AR) $@ $(OBJ) |
# Link: create ELF output file from object files. |
.SECONDARY : $(TARGET).elf |
.PRECIOUS : $(OBJ) |
%.elf: $(OBJ) |
@echo |
@echo $(MSG_LINKING) $@ |
$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS) |
# Compile: create object files from C source files. |
$(OBJDIR)/%.o : %.c |
@echo |
@echo $(MSG_COMPILING) $< |
$(CC) -c $(ALL_CFLAGS) $< -o $@ |
# Compile: create object files from C++ source files. |
$(OBJDIR)/%.o : %.cpp |
@echo |
@echo $(MSG_COMPILING_CPP) $< |
$(CC) -c $(ALL_CPPFLAGS) $< -o $@ |
# Compile: create assembler files from C source files. |
%.s : %.c |
$(CC) -S $(ALL_CFLAGS) $< -o $@ |
# Compile: create assembler files from C++ source files. |
%.s : %.cpp |
$(CC) -S $(ALL_CPPFLAGS) $< -o $@ |
# Assemble: create object files from assembler source files. |
$(OBJDIR)/%.o : %.S |
@echo |
@echo $(MSG_ASSEMBLING) $< |
$(CC) -c $(ALL_ASFLAGS) $< -o $@ |
# Create preprocessed source for use in sending a bug report. |
%.i : %.c |
$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ |
# Target: clean project. |
clean: begin clean_list end |
clean_list : |
@echo |
@echo $(MSG_CLEANING) |
$(REMOVE) $(TARGET).hex |
$(REMOVE) $(TARGET).eep |
$(REMOVE) $(TARGET).cof |
$(REMOVE) $(TARGET).elf |
$(REMOVE) $(TARGET).map |
$(REMOVE) $(TARGET).sym |
$(REMOVE) $(TARGET).lss |
$(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o) |
$(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst) |
$(REMOVE) $(SRC:.c=.s) |
$(REMOVE) $(SRC:.c=.d) |
$(REMOVE) $(SRC:.c=.i) |
$(REMOVEDIR) .dep |
# Create object files directory |
$(shell mkdir $(OBJDIR) 2>/dev/null) |
# Include the dependency files. |
-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*) |
# Listing of phony targets. |
.PHONY : all begin finish end sizebefore sizeafter gccversion \ |
build elf hex eep lss sym coff extcoff \ |
clean clean_list program debug gdb-config |
/Transportables_Koptertool/tags/V3.9/Bootlader/testapp/testapp.c |
---|
0,0 → 1,62 |
// Martin Thomas 4/2008 |
#include <avr/io.h> |
#include <avr/interrupt.h> |
#include <avr/wdt.h> |
#include <util/delay.h> |
#define LED_PORT PORTB |
#define LED_DDR DDRB |
#define LED_BIT PB2 |
#define BT_PORT PORTC |
#define BT_DDR DDRC |
#define BT_PIN PINC |
#define BT_BIT PC7 |
static inline void my_wdt_off(void) |
{ |
cli(); |
wdt_reset(); |
/* Clear WDRF in MCUSR */ |
MCUSR &= ~(1<<WDRF); |
/* Write logical one to WDCE and WDE */ |
/* Keep old prescaler setting to prevent unintentional time-out */ |
WDTCSR |= (1<<WDCE) | (1<<WDE); |
/* Turn off WDT */ |
WDTCSR = 0x00; |
} |
static void my_delay( void ) |
{ |
int i; |
for ( i=0; i<500; i++ ) { |
_delay_ms(1); |
} |
} |
int main( void ) |
{ |
my_wdt_off(); |
LED_PORT |= ( 1<<LED_BIT ); |
LED_DDR |= ( 1<<LED_BIT ); |
BT_DDR &= ~( 1<<BT_BIT ); |
BT_PORT |= ( 1<<BT_BIT ); |
while ( 1 ) { |
LED_PORT &= ~( 1<<LED_BIT ); |
my_delay(); |
LED_PORT |= ( 1<<LED_BIT ); |
my_delay(); |
if ( !( BT_PIN & ( 1<<BT_BIT ) ) ) { |
/* start bootloader */ |
wdt_enable( WDTO_250MS ); |
while (1) { ; } |
} |
} |
return 0; /* never reached */ |
} |
/Transportables_Koptertool/tags/V3.9/Bootlader/testavrdude/dummy.hex |
---|
0,0 → 1,117 |
:103800000C942A1C0C94451C0C94451C0C94451CCF |
:103810000C94451C0C94451C0C94451C0C94451CA4 |
:103820000C94451C0C94451C0C94451C0C94451C94 |
:103830000C94451C0C94451C0C94451C0C94451C84 |
:103840000C94451C0C94451C0C94451C0C94451C74 |
:103850000C94451C11241FBECFE5D4E0DEBFCDBFC4 |
:1038600010E0A0E6B0E0EEE2FFE302C005900D92AA |
:10387000A036B107D9F710E0A0E6B0E001C01D9274 |
:10388000A53EB107E1F70C94871D0C94001C8F9A9C |
:1038900084E083BD89E185BD089581E40E94E21E34 |
:1038A00086E50E94E21E82E50E94E21E82E40E94FA |
:1038B000E21E8FE40E94E21E8FE40E94E21E84E575 |
:1038C0000E94E21E08958F929F92AF92BF92CF9274 |
:1038D000DF92EF92FF920F931F93CF93DF936C01D0 |
:1038E000962EEE24FF2487010E591F4FE7012196E3 |
:1038F000EC14FD0418F40E94E61E01C08FEFF801DD |
:1039000080837E01C038D10570F3EE24FF248091BE |
:10391000E400853721F08B3311F0C7018CC0A090F3 |
:10392000E200B090E300E199FECF8FB6F89426E470 |
:10393000921609F07DC08091E40087010E591F4F57 |
:10394000E7012196EEEFFFEFCE0EDF1E8537F1F493 |
:10395000F8018081282F3327FE01EE59FF4F808127 |
:103960009927982F8827282B392B7E010894E11C52 |
:10397000F11C41E08091E2009091E3000901FC011B |
:1039800040935700E8951124029628C080E40E94D5 |
:103990004B1F8091E3000E944B1F8091E2000E9428 |
:1039A0004B1FF80180810E944B1F88E40E944B1F2F |
:1039B0008091E3000E944B1F8091E2000E944B1F08 |
:1039C0007E010894E11CF11CCE59DF4F88810E94D2 |
:1039D0004B1F8091E2009091E30001969093E300E9 |
:1039E0008093E200C114D10409F0A5CF8091E400D6 |
:1039F000853769F485E0F50180935700E89507B6AF |
:103A000000FCFDCF81E180935700E89511C08CE464 |
:103A10000E944B1F8B2D99270E944B1F8A2D0E94BD |
:103A20004B1F80E00E944B1F88E893E10E94F51E27 |
:103A30008FBE8DE090E0DF91CF911F910F91FF90AD |
:103A4000EF90DF90CF90BF90AF909F908F900895B0 |
:103A5000FF920F931F93CF93DF93EC01FFB6F8947F |
:103A6000E199FECF8091E4008537E9F4653409F4EB |
:103A700047C060E08091E2009091E3000E94EB1E5D |
:103A80008C010E94E21E812F99270E94E21E8091E4 |
:103A9000E2009091E30002969093E3008093E200AD |
:103AA000229739F72DC08B3359F580E20E944B1FC6 |
:103AB0008091E3000E944B1F8091E2000E944B1F07 |
:103AC0008FEF0E944B1F0E94E21E88E20E944B1F54 |
:103AD0008091E3000E944B1F8091E2000E944B1FE7 |
:103AE0008FEF0E944B1F0E94E21E8091E200909196 |
:103AF000E30001969093E3008093E2002297A9F6F9 |
:103B0000FFBEDF91CF911F910F91FF900895CFE5F8 |
:103B1000D4E0DEBFCDBFF89401E005BF82E085BFF1 |
:103B2000A698AE9A60E087E190E00E94D81E9E9B26 |
:103B300008C0AE9805BF15BEE0916000F09161002D |
:103B40000995BB9AC39A0E94401F0E94471C0E947D |
:103B5000E61E813611F489E528C18134F9F40E940A |
:103B6000E61E99279093E3008093E200182F002728 |
:103B70000E94E61E282F3327202B312B3093E300A1 |
:103B80002093E2008091E400853709F083C0220F82 |
:103B9000331F3093E3002093E2007CC0823689F427 |
:103BA00089E50E94E21E8091E400853729F480E0D7 |
:103BB0000E94E21E80E8F9C080E00E94E21E80E4DC |
:103BC000F4C0823489F40E94E61E9927182F00273A |
:103BD0000E94E61E9927082B192B0E94E61E682FCB |
:103BE000C8010E94631CE1C0873689F40E94E61E6A |
:103BF0009927182F00270E94E61E9927082B192BBA |
:103C00000E94E61E682FC8010E94281DA0CF85369D |
:103C1000B1F58091E4008537F9F41092E300109239 |
:103C2000E20043E020E030E0F90140935700E895DE |
:103C300007B600FCFDCFC90180589F4F9C0158E397 |
:103C40008030950788F39093E3008093E20081E150 |
:103C500080935700E8951EC08B33E1F48CEA0E94F4 |
:103C60004B1F80E80E944B1F80E00E944B1F80E0AA |
:103C70000E944B1F8CE893E20E94F51E0BC0853416 |
:103C800059F488E190E028E00FB6F894A89581BD3A |
:103C90000FBE21BD8DE089C0803539F48091E400EC |
:103CA0008B33C1F70E94511FF5CF8C3439F48091CA |
:103CB000E4008B3379F70E946D1FECCF803711F44D |
:103CC00083E573C0823711F48FEF6FC08E3459F4DF |
:103CD0008091E400853711F488E967C08B3309F0DF |
:103CE00036CF8EED62C08C3619F40E94E61ED2CF1C |
:103CF000843741F485E70E94E21E8BE30E94E21EB6 |
:103D000080E053C0883731F40E94E61E823031F4DF |
:103D1000C398C0CF893721F40E94E61EC39ABACF58 |
:103D2000843529F40E94E61E8093E400B3CF8335E6 |
:103D300019F40E944D1C0BCF863529F480E30E94B4 |
:103D4000E21E87E332C0833711F58091E4008537A6 |
:103D500041F483E00E94E21E84E90E94E21E8EE1AB |
:103D600024C08B3309F0F3CE03E0015080E30E94BE |
:103D70004B1F80E00E944B1F802F0E944B1F8FEF34 |
:103D80000E944B1F0E94E21E002379F7E0CE8D3483 |
:103D900041F488B398E0892788BB84E70E94E21E3B |
:103DA00079CF8B3109F4D3CE8FE30E94E21ECFCEC0 |
:103DB0009C01832F992780BD29B988E18AB986E8BB |
:103DC00080BD08955D9BFECF8CB908955F9BFECFAB |
:103DD0008CB199270895FC0160FD60935700C89548 |
:103DE000802DE395C895902D0895CF93DF93CDB79F |
:103DF000DEB722970FB6F894DEBF0FBECDBF039695 |
:103E000065E070E00E94831F9B0144275527DA017B |
:103E1000C90163E0880F991FAA1FBB1F6A95D1F7DC |
:103E2000821B930BA40BB50B9C0119821A8289810A |
:103E30009A818217930750F489819A810196898328 |
:103E40009A8389819A8182179307B0F322960FB6DD |
:103E5000F894DEBF0FBECDBFDF91CF910895D89803 |
:103E600088E092E50E94F51E0895D89A88E092E5D0 |
:103E70000E94F51E08950E94351F0E942F1F08956D |
:103E8000C79A87B3806B87BBD09ABE9883E58DB9FC |
:103E90000E94351F08958FB9779BFECF8FB1992768 |
:103EA0000895CF93C7980E943B1FC0E08CEA0E9400 |
:103EB0004B1F83E50E944B1F8FEF0E944B1F8335E2 |
:103EC00011F4C1E402C00E943B1F80E00E944B1F1E |
:103ED000CF5FC03458F3CF9108950E943B1F0E94DA |
:103EE000351F08950E94511F8CEA0E944B1F80E8E5 |
:103EF0000E944B1F80E00E944B1F80E00E944B1FDE |
:103F00000E946D1F0895AA1BBB1B51E107C0AA1F89 |
:103F1000BB1FA617B70710F0A61BB70B881F991F6A |
:0E3F20005A95A9F780959095BC01CD010895A2 |
:0400000300003800C1 |
:00000001FF |
/Transportables_Koptertool/tags/V3.9/Bootlader/testavrdude/go.cmd |
---|
0,0 → 1,20 |
@echo off |
rem Use avrdude as programming-software with the AVRProg compatible bootloader |
rem Martin Thomas, 2006 |
rem Verfiy that the bootloader is configured with #define DEVTYPE DEVTYPE_ISP |
rem since it seems that avrdude does not work with "Boot" device-types and needs |
rem ISP device-types (at least in version 5.1 as in WinAVR 4/06) |
set HEXFILE=cansniffer.hex |
set PROGRAMMER=avr109 |
set PORT=com2 |
set BAUD=19200 |
set PART=atmega32 |
rem * disable safemode - bootloader can not "restore" fuses anyway |
set DIS_SAVE=-u |
avrdude %DIS_SAVE% -p %PART% -P %PORT% -c %PROGRAMMER% -b %BAUD% -v -U flash:w:%HEXFILE% |
rem pause |