aboutsummaryrefslogtreecommitdiff
path: root/bootloaders
diff options
context:
space:
mode:
Diffstat (limited to 'bootloaders')
-rw-r--r--bootloaders/atmega/ATmegaBOOT_168.c23
-rwxr-xr-x[-rw-r--r--]bootloaders/atmega/Makefile27
-rw-r--r--bootloaders/bt/ATmegaBOOT_168.c21
-rw-r--r--bootloaders/caterina/Caterina-Genuino-Micro.hex257
-rw-r--r--bootloaders/caterina/Caterina-Genuino-Micro.txt19
-rw-r--r--bootloaders/optiboot/optiboot.c2
-rw-r--r--bootloaders/optiboot/pin_defs.h2
-rw-r--r--bootloaders/stk500v2/avrinterruptnames.h8
8 files changed, 330 insertions, 29 deletions
diff --git a/bootloaders/atmega/ATmegaBOOT_168.c b/bootloaders/atmega/ATmegaBOOT_168.c
index ff21903..ff2c4e4 100644
--- a/bootloaders/atmega/ATmegaBOOT_168.c
+++ b/bootloaders/atmega/ATmegaBOOT_168.c
@@ -73,7 +73,7 @@
/* 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__)
+#if !defined(__AVR_ATmega168__) || !defined(__AVR_ATmega328P__) || !defined(__AVR_ATmega328__)
#include <avr/eeprom.h>
#endif
@@ -202,6 +202,11 @@
#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_ATmega162__
#define SIG2 0x94
#define SIG3 0x04
@@ -367,7 +372,7 @@ int main(void)
UBRRHI = (F_CPU/(BAUD_RATE*16L)-1) >> 8;
UCSRA = 0x00;
UCSRB = _BV(TXEN)|_BV(RXEN);
-#elif defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__)
+#elif defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) || defined (__AVR_ATmega328__)
#ifdef DOUBLE_SPEED
UCSR0A = (1<<U2X0); //Double speed mode USART0
@@ -556,7 +561,7 @@ int main(void)
if (flags.eeprom) { //Write to EEPROM one byte at a time
address.word <<= 1;
for(w=0;w<length.word;w++) {
-#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__)
+#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328__)
while(EECR & (1<<EEPE));
EEAR = (uint16_t)(void *)address.word;
EEDR = buff[w];
@@ -578,7 +583,7 @@ int main(void)
/* 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(__AVR_ATmega1280__) || defined(__AVR_ATmega1281__)
+#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
@@ -677,7 +682,7 @@ int main(void)
"rjmp write_page \n\t"
"block_done: \n\t"
"clr __zero_reg__ \n\t" //restore zero register
-#if defined __AVR_ATmega168__ || __AVR_ATmega328P__ || __AVR_ATmega128__ || __AVR_ATmega1280__ || __AVR_ATmega1281__
+#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328__) || defined(__AVR_ATmega128__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega1281__)
: "=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"
@@ -710,7 +715,7 @@ int main(void)
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__)
+#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328__)
while(EECR & (1<<EEPE));
EEAR = (uint16_t)(void *)address.word;
EECR |= (1<<EERE);
@@ -926,7 +931,7 @@ void putch(char ch)
while (!(UCSR1A & _BV(UDRE1)));
UDR1 = ch;
}
-#elif defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__)
+#elif defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) || defined (__AVR_ATmega328__)
while (!(UCSR0A & _BV(UDRE0)));
UDR0 = ch;
#else
@@ -964,7 +969,7 @@ char getch(void)
return UDR1;
}
return 0;
-#elif defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__)
+#elif defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) || defined (__AVR_ATmega328__)
uint32_t count = 0;
while(!(UCSR0A & _BV(RXC0))){
/* 20060803 DojoCorp:: Addon coming from the previous Bootloader*/
@@ -1001,7 +1006,7 @@ void getNch(uint8_t count)
while(!(UCSR1A & _BV(RXC1)));
UDR1;
}
-#elif defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__)
+#elif defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) || defined (__AVR_ATmega328__)
getch();
#else
/* m8,16,32,169,8515,8535,163 */
diff --git a/bootloaders/atmega/Makefile b/bootloaders/atmega/Makefile
index 36a3b6b..efe92e6 100644..100755
--- a/bootloaders/atmega/Makefile
+++ b/bootloaders/atmega/Makefile
@@ -48,9 +48,9 @@ STK500-2 = $(STK500) -d$(MCU_TARGET) -ms -q -lCF -LCF -cUSB -I200kHz -s -wt
OBJ = $(PROGRAM).o
-OPTIMIZE = -O2
+OPTIMIZE = -Os
-DEFS =
+DEFS =
LIBS =
CC = avr-gcc
@@ -128,7 +128,7 @@ pro20_isp: isp
diecimila: TARGET = diecimila
diecimila: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>4' '-DNUM_LED_FLASHES=1'
-diecimila: AVR_FREQ = 16000000L
+diecimila: AVR_FREQ = 16000000L
diecimila: $(PROGRAM)_diecimila.hex
diecimila_isp: diecimila
@@ -153,7 +153,7 @@ ng_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: AVR_FREQ = 16000000L
atmega328: LDSECTION = --section-start=.text=0x7800
atmega328: $(PROGRAM)_atmega328.hex
@@ -165,10 +165,25 @@ 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: AVR_FREQ = 8000000L
atmega328_pro8: LDSECTION = --section-start=.text=0x7800
atmega328_pro8: $(PROGRAM)_atmega328_pro_8MHz.hex
@@ -183,7 +198,7 @@ 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: AVR_FREQ = 16000000L
mega: LDSECTION = --section-start=.text=0x1F000
mega: $(PROGRAM)_atmega1280.hex
diff --git a/bootloaders/bt/ATmegaBOOT_168.c b/bootloaders/bt/ATmegaBOOT_168.c
index c73eefa..d477e7a 100644
--- a/bootloaders/bt/ATmegaBOOT_168.c
+++ b/bootloaders/bt/ATmegaBOOT_168.c
@@ -79,7 +79,7 @@
/* 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__)
+#if !defined(__AVR_ATmega168__) || !defined(__AVR_ATmega328P__) || !defined(__AVR_ATmega328__)
#include <avr/eeprom.h>
#endif
@@ -194,6 +194,11 @@
#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_ATmega162__
#define SIG2 0x94
#define SIG3 0x04
@@ -335,7 +340,7 @@ int main(void)
UBRRHI = (F_CPU/(BAUD_RATE*16L)-1) >> 8;
UCSRA = 0x00;
UCSRB = _BV(TXEN)|_BV(RXEN);
-#elif defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__)
+#elif defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328__)
UBRR0H = ((F_CPU / 16 + BAUD_RATE / 2) / BAUD_RATE - 1) >> 8;
UBRR0L = ((F_CPU / 16 + BAUD_RATE / 2) / BAUD_RATE - 1);
@@ -557,7 +562,7 @@ putch(0x0D);
if (getch() == ' ') {
if (flags.eeprom) { //Write to EEPROM one byte at a time
for(w=0;w<length.word;w++) {
-#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__)
+#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328__)
while(EECR & (1<<EEPE));
EEAR = (uint16_t)(void *)address.word;
EEDR = buff[w];
@@ -675,7 +680,7 @@ putch(0x0D);
"rjmp write_page \n\t"
"block_done: \n\t"
"clr __zero_reg__ \n\t" //restore zero register
-#if defined __AVR_ATmega168__ || __AVR_ATmega328P__
+#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) || defined(__AVR_ATmega_328__)
: "=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"
@@ -707,7 +712,7 @@ putch(0x0D);
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__ || __AVR_ATmega328P__
+#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328__)
while(EECR & (1<<EEPE));
EEAR = (uint16_t)(void *)address.word;
EECR |= (1<<EERE);
@@ -921,7 +926,7 @@ void putch(char ch)
while (!(UCSR1A & _BV(UDRE1)));
UDR1 = ch;
}
-#elif defined (__AVR_ATmega168__) || defined(__AVR_ATmega328P__)
+#elif defined (__AVR_ATmega168__) || defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328__)
while (!(UCSR0A & _BV(UDRE0)));
UDR0 = ch;
#else
@@ -944,7 +949,7 @@ char getch(void)
return UDR1;
}
return 0;
-#elif defined (__AVR_ATmega168__) || defined(__AVR_ATmega328P__)
+#elif defined (__AVR_ATmega168__) || defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328__)
uint32_t count = 0;
while(!(UCSR0A & _BV(RXC0))){
/* 20060803 DojoCorp:: Addon coming from the previous Bootloader*/
@@ -982,7 +987,7 @@ void getNch(uint8_t count)
while(!(UCSR1A & _BV(RXC1)));
UDR1;
}
-#elif (defined __AVR_ATmega168__) || defined(__AVR_ATmega328P__)
+#elif (defined __AVR_ATmega168__) || defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328__)
while(!(UCSR0A & _BV(RXC0)));
UDR0;
#else
diff --git a/bootloaders/caterina/Caterina-Genuino-Micro.hex b/bootloaders/caterina/Caterina-Genuino-Micro.hex
new file mode 100644
index 0000000..b658b28
--- /dev/null
+++ b/bootloaders/caterina/Caterina-Genuino-Micro.hex
@@ -0,0 +1,257 @@
+:1070000055C000006EC000006CC000006AC00000E7
+:1070100068C0000066C0000064C0000062C00000DC
+:1070200060C000005EC00000F2C400005AC0000052
+:1070300058C0000056C0000054C0000052C00000FC
+:1070400050C0000078C000004CC000004AC00000E2
+:1070500048C0000046C0000044C0000042C000001C
+:1070600040C000003EC000003CC000003AC000002C
+:1070700038C0000036C0000034C0000032C000003C
+:1070800030C000002EC000002CC000002AC000004C
+:1070900028C0000026C0000024C0000022C000005C
+:1070A00020C000001EC000001CC0000011241FBE34
+:1070B000CFEFDAE0DEBFCDBF11E0A0E0B1E0E2E368
+:1070C000FFE702C005900D92A83AB107D9F711E089
+:1070D000A8EAB1E001C01D92AE3BB107E1F78FD342
+:1070E00026C78ECFF89410926F00109281001092F4
+:1070F00085001092840081E085BF15BE47985D9899
+:1071000028980C94000008952091B2013091B301A9
+:107110002F5F3F4F3093B3012093B201932F37FF7E
+:1071200003C08EEF831B982F990F921710F4479886
+:107130000895479A08951F920F920FB60F92112447
+:107140002F938F939F93EF93FF931092850010924C
+:1071500084008091A8019091A901009741F00197C6
+:107160009093A9018093A801892B09F45D988091DF
+:10717000AA019091AB01009741F001979093AB0168
+:107180008093AA01892B09F42898E0E0F0E085912A
+:1071900094918F5F9F4F49F08091AC019091AD0128
+:1071A00001969093AD018093AC01FF91EF919F9177
+:1071B0008F912F910F900FBE0F901F90189584E024
+:1071C0008093E9000DC08091E8008B778093E80000
+:1071D00003C08EB3882351F08091E80082FFF9CF7D
+:1071E0008091E80085FFEFCF8091F1000895982FFE
+:1071F00083E08093E9008091E80085FD0DC08091D7
+:10720000E8008E778093E80003C08EB3882369F08E
+:107210008091E80080FFF9CF9093F1005D9A84E6B9
+:1072200090E09093A9018093A80108954F925F92F6
+:107230006F927F928F929F92AF92BF92CF92DF9286
+:10724000EF92FF920F931F93CF93DF9384E080938D
+:10725000E9008091E80082FF57C2289A84E690E016
+:107260009093AB018093AA01AADF182F853481F493
+:107270008CE49DE19093AD018093AC0107B600FCD6
+:10728000FDCFF999FECF81E180935700E89503C0C7
+:10729000843519F494DF8DE00DC28C34E1F3803530
+:1072A000D1F3843721F484E4A2DF80E003C2813685
+:1072B00011F489E5FFC18134B1F481DF182F7FDF3C
+:1072C00090E0880F991FAA2797FDA095BA2F312F1C
+:1072D000330F20E0442737FD4095542F822B932B0A
+:1072E000A42BB52BB8C1803711F483E5E3C18335F6
+:1072F00049F4C0E0D1E089917ADF21E0C730D207BC
+:10730000D1F7D9C1863521F481E371DF80E3D2C1A1
+:10731000833731F487E86BDF85E969DF8EE1CAC125
+:107320008536B9F4E0E0F0E093E085E09093570013
+:10733000E89507B600FCFDCF80935700E89507B6A7
+:1073400000FCFDCFE058FF4FA0E7E030FA0771F7EF
+:10735000A2CF823739F4E1E0F0E089E08093570072
+:107360008491A8C1863439F4E0E0F0E089E08093AC
+:10737000570084919FC18E3439F4E3E0F0E089E056
+:1073800080935700849196C1813539F4E2E0F0E0B2
+:1073900089E08093570084918DC1823631F489E56C
+:1073A00026DF80E024DF80E885C1823419F087364B
+:1073B00009F0E5C01092AD011092AC0100DF082F7A
+:1073C000FEDEF82EFCDE682E8554823008F071C196
+:1073D000902F80E0CF2DD0E0C82BD92B10926F00DA
+:1073E000173609F04BC081E180935700E895DD2402
+:1073F000CC24C3943FC0E090AE01F090AF01009167
+:10740000B0011091B101B6E46B16D9F4ED2DF0E0A6
+:10741000EE29FF29E4918E2FEADEDD2081F082E063
+:1074200090E0A0E0B0E0E80EF91E0A1F1B1FE092FA
+:10743000AE01F092AF010093B0011093B101DC24D2
+:1074400018C0D801C701B695A7959795879559D5C6
+:10745000CEDE82E090E0A0E0B0E0E80EF91E0A1F68
+:107460001B1FE092AE01F092AF010093B0011093A8
+:10747000B1012197209709F0BECF7DC08090AE0169
+:107480009090AF01A090B001B090B10196E4691660
+:1074900009F05DC083E0F40180935700E89507B6DA
+:1074A00000FCFDCF54C0F6E46F1661F5772031F192
+:1074B000E090AE01F090AF010091B0011091B101E8
+:1074C0007EDED82ECC24852D90E08C299D29F701D5
+:1074D0000C0140925700E895112482E090E0A0E072
+:1074E000B0E0E80EF91E0A1F1B1FE092AE01F092F9
+:1074F000AF010093B0011093B10102C060DE582EBD
+:10750000742423C0E090AE01F090AF010091B0016F
+:107510001091B10116950795F794E79450DE682F06
+:10752000C701F7D48091AE019091AF01A091B00155
+:10753000B091B1010296A11DB11D8093AE0190934F
+:10754000AF01A093B001B093B101219704C05524BD
+:10755000772444244394209709F0A5CF96E4691634
+:1075600041F485E0F40180935700E89507B600FCEC
+:10757000FDCF8DE03CDE82E080936F009CC08334C1
+:1075800071F40091AE011091AF0119DE90E021E09D
+:10759000F8010C0120935700E89511247CCE833626
+:1075A00019F5E090AE01F090AF010091B00110919B
+:1075B000B10105DEF701E16090E021E00C012093CC
+:1075C0005700E895112482E090E0A0E0B0E0E80EDA
+:1075D000F91E0A1F1B1FE092AE01F092AF0100934B
+:1075E000B0011093B10157CE8D3661F4E091AE0138
+:1075F000F091AF0185E080935700E89507B600FC55
+:10760000FDCF49CE823551F4E091AE01F091AF014A
+:1076100005911491812FEBDD802F4CC0843421F52E
+:10762000E090AE01F090AF010091B0011091B10176
+:1076300016950795F794E794C2DD682FC70169D4C2
+:107640008091AE019091AF01A091B001B091B101D4
+:107650000296A11DB11D8093AE019093AF01A0933E
+:10766000B001B093B10117CE843609F5E090AE01B8
+:10767000F090AF010091B0011091B101D801C701A4
+:10768000B695A795979587953CD4B1DD82E090E0BB
+:10769000A0E0B0E0E80EF91E0A1F1B1FE092AE0149
+:1076A000F092AF010093B0011093B10104C08B318F
+:1076B00011F08FE39CDD83E08093E9009091E80076
+:1076C0008091E8008E778093E80095FF04C010C099
+:1076D0008EB38823C9F08091E80080FFF9CF8091B4
+:1076E000E8008E778093E80003C08EB3882361F0B2
+:1076F0008091E80080FFF9CF84E08093E9008091D9
+:10770000E8008B778093E800DF91CF911F910F9174
+:10771000FF90EF90DF90CF90BF90AF909F908F90B1
+:107720007F906F905F904F9008959091B601892F50
+:107730008F77813249F58091B7018032A1F0813293
+:1077400019F5913A09F58091E800877F8093E80068
+:107750008DE091E067E070E00BD28091E8008B77DC
+:107760008093E8000895913279F48091E800877F52
+:107770008093E8008DE091E067E070E05DD2809159
+:10778000E8008E778093E800089582E061EC42E0A3
+:10779000B5D083E061E842E1B1D084E060E842E145
+:1077A000ADC084B7877F84BF88E10FB6F89480931B
+:1077B0006000109260000FBE20E880E090E00FB6FD
+:1077C000F89420936100809361000FBE81E085BF33
+:1077D00092E095BF3F9A209A559AE1E6F0E0208327
+:1077E000108247985D982898109289008AEF8093BC
+:1077F000880090936F0083E080938100F0C04091F7
+:10780000000850910108109201081092000894B7E6
+:1078100014BE88E10FB6F894809360001092600067
+:107820000FBE292F30E0F901E270F07091FD18C011
+:1078300090FF05C0859194918F5F9F4F81F423FF46
+:107840000FC08091090190910A014817590741F032
+:10785000E0E0F0E0859194918F5F9F4F09F042DC6A
+:10786000A0DF78941092AD011092AC010CC0DEDC68
+:1078700036D38091AC019091AD0181549F4110F0BD
+:107880001092140141DC80911401882381F78091CA
+:10789000E00081608093E00025DC80E090E00895C6
+:1078A000FA01923049F0933061F09130F9F485E1BA
+:1078B00091E022E130E01EC087E291E02EE330E06B
+:1078C00019C0882329F485E691E024E030E012C055
+:1078D000813029F489E691E022E230E00BC0823069
+:1078E00029F48DE891E028E130E004C080E090E0E8
+:1078F00020E030E091838083C90108958093E900FE
+:107900008091EB0081608093EB001092ED0060931A
+:10791000EC004093ED008091EE00881F8827881FBF
+:1079200008958091B60188238CF403C08EB3882318
+:10793000B1F08091E80082FFF9CF8091E8008B7769
+:107940008093E80008958EB3882349F08091E80081
+:1079500080FFF9CF8091E8008E778093E80008954A
+:10796000EF92FF920F931F9345D04CD008ED10E09B
+:10797000F80180818F778083808180688083808117
+:107980008F7D808319BC1EBA1092B40180EEE82E60
+:10799000F12CF70180818B7F8083F80180818160E9
+:1079A000808380E060E042E0A9DFE1EEF0E08081EA
+:1079B0008E7F8083E2EEF0E0808181608083808131
+:1079C00088608083F70180818E7F8083F8018081C9
+:1079D000806180831F910F91FF90EF900895E7EDF4
+:1079E000F0E08081816080838AE482BF81E08093BF
+:1079F000B501B6CFE8EDF0E080818E7F80831092F4
+:107A0000E20008951092DA001092E10008951F92AA
+:107A10000F920FB60F9211242F933F934F935F93C2
+:107A20006F937F938F939F93AF93BF93EF93FF9346
+:107A30008091DA0080FF1BC08091D80080FF17C0C2
+:107A40008091DA008E7F8093DA008091D90080FFE8
+:107A50000BC080E189BD82E189BD09B400FEFDCF84
+:107A600081E08EBB3BD203C019BC1EBA37D28091D5
+:107A7000E10080FF17C08091E20080FF13C0809179
+:107A8000E2008E7F8093E2008091E200806180932B
+:107A9000E2008091D80080628093D80019BC85E014
+:107AA0008EBB1CD28091E10084FF2CC08091E2004B
+:107AB00084FF28C080E189BD82E189BD09B400FE50
+:107AC000FDCF8091D8008F7D8093D8008091E10018
+:107AD0008F7E8093E1008091E2008F7E8093E200B0
+:107AE0008091E20081608093E2008091B40188235C
+:107AF00031F48091E30087FD02C081E001C084E0A1
+:107B00008EBBECD18091E10083FF21C08091E20027
+:107B100083FF1DC08091E100877F8093E10082E0B8
+:107B20008EBB1092B4018091E1008E7F8093E100C2
+:107B30008091E2008E7F8093E2008091E20080617C
+:107B40008093E20080E060E042E0D8DEC7D1FF91A0
+:107B5000EF91BF91AF919F918F917F916F915F91C5
+:107B60004F913F912F910F900FBE0F901F9018953E
+:107B70009C014091BC015091BD014617570718F474
+:107B8000F90190E044C06115710511F0AB01F8CF27
+:107B90008091E8008E778093E80040E050E0F0CFDD
+:107BA0008EB3882309F444C0853009F443C0809122
+:107BB000E80083FF02C081E008958091E80082FD23
+:107BC00031C08091E80080FF22C08091F300909145
+:107BD000F200782F60E0292F30E0262B372B07C0EA
+:107BE00081918093F100415050402F5F3F4F4115EC
+:107BF000510519F02830310598F390E0283031050F
+:107C000009F491E08091E8008E778093E8004115B7
+:107C1000510531F6992321F605C08EB3882341F032
+:107C2000853041F08091E80082FFF7CF80E0089531
+:107C300082E0089583E008959C016115710529F49F
+:107C40008091E8008B778093E800F90126C08EB31D
+:107C5000882391F1853091F18091E80083FF02C083
+:107C600081E008958091E80082FFF1CF06C0809105
+:107C7000F10081936150704059F02091F3008091A0
+:107C8000F200322F20E090E0822B932B892B79F7A2
+:107C90008091E8008B778093E80061157105B9F653
+:107CA00005C08EB3882341F0853041F08091E80013
+:107CB00080FFF7CF80E0089582E0089583E0089583
+:107CC0000F931F93DF93CF9300D0CDB7DEB7E6EBD2
+:107CD000F1E08091F100819381E0EE3BF807C9F774
+:107CE00024DD8091E80083FFE4C08091B60190918B
+:107CF000B701953009F46DC0963040F4913081F1B0
+:107D0000913070F0933009F0D4C02AC0983009F453
+:107D1000A3C0993009F4B2C0963009F0CAC07CC043
+:107D2000803809F4C6C0823809F0C3C08091BA0116
+:107D300087708093E9008091EB001092E900209118
+:107D4000E800277F2093E80090E025E0969587954E
+:107D50002A95E1F781708093F1001092F10087C0BD
+:107D6000882319F0823009F0A4C08F71823009F0A5
+:107D7000A0C08091B801882331F52091BA01277005
+:107D800009F497C02093E9008091EB0080FF1BC0AD
+:107D9000933021F48091EB00806213C08091EB005E
+:107DA00080618093EB0081E090E002C0880F991F12
+:107DB0002A95E2F78093EA001092EA008091EB00A6
+:107DC00088608093EB001092E9008091E800877F43
+:107DD00051C0882309F06DC01091B8011F770FB70B
+:107DE000F8948091E800877F8093E8009ADD809185
+:107DF000E80080FFFCCF8091E3008078812B8093A6
+:107E0000E30080688093E300112311F482E001C055
+:107E100083E08EBB0FBF4DC08058823008F049C050
+:107E20008091B8019091B9016091BA01AE014F5FA4
+:107E30005F4F36DDBC01009709F43BC08091E8003C
+:107E4000877F8093E80089819A8192DE8091E800A3
+:107E50008B778093E8002DC0803859F58091E80039
+:107E6000877F8093E8008091B4018093F100809136
+:107E7000E8008E778093E80054DD1BC08823C9F4A6
+:107E80009091B8019230A8F48091E800877F8093A8
+:107E9000E8009093B40145DD8091B401882331F46A
+:107EA0008091E30087FD02C081E001C084E08EBBC9
+:107EB0006CDC8091E80083FF0AC08091EB00806257
+:107EC0008093EB008091E800877F8093E8000F901B
+:107ED0000F90CF91DF911F910F91089508951F93F7
+:107EE0008EB3882361F01091E9001092E90080912F
+:107EF000E80083FF01C0E4DE17701093E9001F91D2
+:107F00000895F999FECF92BD81BDF89A992780B561
+:107F10000895262FF999FECF1FBA92BD81BD20BDCD
+:107F20000FB6F894FA9AF99A0FBE01960895F8944C
+:027F3000FFCF81
+:107F32004341544552494E41007777000800000002
+:107F4200000000080112011001020000084123375D
+:107F52000201000201000109023E0002010080321A
+:107F6200090400000102020100052400100104249A
+:107F720002040524060001070582030800FF090424
+:107F82000100020A000000070504021000010705B3
+:107F92008302100001040309042203470065006EF6
+:107FA20000750069006E006F0020004D00690063DB
+:107FB2000072006F00200020002000000018034122
+:107FC2000072006400750069006E006F0020004CB2
+:087FD200004C00430000000018
+:040000030000700089
+:00000001FF
diff --git a/bootloaders/caterina/Caterina-Genuino-Micro.txt b/bootloaders/caterina/Caterina-Genuino-Micro.txt
new file mode 100644
index 0000000..fd29bd8
--- /dev/null
+++ b/bootloaders/caterina/Caterina-Genuino-Micro.txt
@@ -0,0 +1,19 @@
+GENUINO MICRO PRODUCTION FIRMWARES
+==================================
+
+Bootloader:
+-----------
+
+Name: Caterina-Genuino-Micro.hex
+
+Notes:
+Builds against LUFA version 111009
+make version 3.81
+avrdude version 5.11
+
+All AVR tools except avrdude were installed by CrossPack 20100115:
+avr-gcc version 4.3.3 (GCC)
+Thread model: single
+Configured with: ../configure —prefix=/usr/local/CrossPack-AVR-20100115 —disable-dependency-tracking —disable-nls —disable-werror —target=avr —enable-languages=c,c++ —disable-nls —disable-libssp —with-dwarf2
+avr-libc version 1.6.7
+binutils version 2.19
diff --git a/bootloaders/optiboot/optiboot.c b/bootloaders/optiboot/optiboot.c
index 41545b7..bd3a1db 100644
--- a/bootloaders/optiboot/optiboot.c
+++ b/bootloaders/optiboot/optiboot.c
@@ -231,7 +231,7 @@ void appStart() __attribute__ ((naked));
#if defined(__AVR_ATmega168__)
#define RAMSTART (0x100)
#define NRWWSTART (0x3800)
-#elif defined(__AVR_ATmega328P__)
+#elif defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328__)
#define RAMSTART (0x100)
#define NRWWSTART (0x7000)
#elif defined (__AVR_ATmega644P__)
diff --git a/bootloaders/optiboot/pin_defs.h b/bootloaders/optiboot/pin_defs.h
index 27d7772..61ce64e 100644
--- a/bootloaders/optiboot/pin_defs.h
+++ b/bootloaders/optiboot/pin_defs.h
@@ -1,4 +1,4 @@
-#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) || defined(__AVR_ATmega88) || defined(__AVR_ATmega8__) || defined(__AVR_ATmega88__)
+#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328__) || defined(__AVR_ATmega88) || defined(__AVR_ATmega8__) || defined(__AVR_ATmega88__)
/* Onboard LED is connected to pin PB5 in Arduino NG, Diecimila, and Duemilanove */
#define LED_DDR DDRB
#define LED_PORT PORTB
diff --git a/bootloaders/stk500v2/avrinterruptnames.h b/bootloaders/stk500v2/avrinterruptnames.h
index f862f9a..e7e3ed9 100644
--- a/bootloaders/stk500v2/avrinterruptnames.h
+++ b/bootloaders/stk500v2/avrinterruptnames.h
@@ -327,8 +327,8 @@
//**************************************************************************************************
-#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__)
-#pragma mark __AVR_ATmega168__ / __AVR_ATmega328P__
+#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328__)
+#pragma mark __AVR_ATmega168__ / __AVR_ATmega328P__ / __AVR_ATmega328__
#define _INTERRUPT_NAMES_DEFINED_
@@ -496,8 +496,8 @@ PGM_P gInterruptNameTable[] PROGMEM =
//**************************************************************************************************
-#if defined(__AVR_ATmega324P__ ) || defined(__AVR_ATmega644__ ) || defined(__AVR_ATmega644P__)
-#pragma mark __AVR_ATmega324P__ __AVR_ATmega644__ __AVR_ATmega644P__
+#if defined(__AVR_ATmega324P__ ) || defined(__AVR_ATmega644__ ) || defined(__AVR_ATmega644P__) || defined(__AVR_ATmega1284P__)
+#pragma mark __AVR_ATmega324P__ __AVR_ATmega644__ __AVR_ATmega644P__ __AVR_ATmega1284P__
#define _INTERRUPT_NAMES_DEFINED_