Browse Source

Merge pull request #1 from jlefley/atmega328p

Add support for atmega328p
pull/2/head
Olaf Rempel 4 years ago
parent
commit
31d65c76d7
2 changed files with 22 additions and 5 deletions
  1. +8
    -0
      Makefile
  2. +14
    -5
      main.c

+ 8
- 0
Makefile View File

@@ -39,6 +39,14 @@ AVRDUDE_FUSES=lfuse:w:0xc2:m hfuse:w:0xdd:m efuse:w:0xfa:m
BOOTLOADER_START=0x3C00
endif

ifeq ($(MCU), atmega328p)
# (8Mhz internal RC-Osz., 2.7V BOD)
AVRDUDE_MCU=m328p -F
AVRDUDE_FUSES=lfuse:w:0xc2:m hfuse:w:0xda:m efuse:w:0xfd:m

BOOTLOADER_START=0x7800
endif

# ---------------------------------------------------------------------------

CFLAGS = -pipe -g -Os -mmcu=$(MCU) -Wall -fdata-sections -ffunction-sections

+ 14
- 5
main.c View File

@@ -35,6 +35,11 @@
* Fuse E: 0xfa (512 words bootloader)
* Fuse H: 0xdd (2.7V BOD)
* Fuse L: 0xc2 (8Mhz internal RC-Osz.)
*
* atmega328p:
* Fuse E: 0xfd (2.7V BOD)
* Fuse H: 0xda (1024 words bootloader)
* Fuse L: 0xc2 (8Mhz internal RC-Osz.)
*/

#if defined (__AVR_ATmega8__)
@@ -49,6 +54,10 @@
#define VERSION_STRING "TWIBOOT m168v2.1"
#define SIGNATURE_BYTES 0x1E, 0x94, 0x06

#elif defined (__AVR_ATmega328P__)
#define VERSION_STRING "TWIBOOT m328pv2.1"
#define SIGNATURE_BYTES 0x1E, 0x95, 0x0F

#else
#error MCU not supported
#endif
@@ -145,7 +154,7 @@
* SLA+W, 0x02, 0x02, addrh, addrl, {* bytes}, STO
*/

const static uint8_t info[16] = VERSION_STRING;
const static uint8_t info[18] = VERSION_STRING;
const static uint8_t chipinfo[8] = {
SIGNATURE_BYTES,

@@ -214,7 +223,7 @@ static void write_eeprom_byte(uint8_t val)
#if defined (__AVR_ATmega8__)
EECR |= (1<<EEMWE);
EECR |= (1<<EEWE);
#elif defined (__AVR_ATmega88__) || defined (__AVR_ATmega168__)
#elif defined (__AVR_ATmega88__) || defined (__AVR_ATmega168__) || defined (__AVR_ATmega328P__)
EECR |= (1<<EEMPE);
EECR |= (1<<EEPE);
#endif
@@ -403,7 +412,7 @@ static void (*jump_to_app)(void) __attribute__ ((noreturn)) = 0x0000;
* system reset. So disable it as soon as possible.
* automagically called on startup
*/
#if defined (__AVR_ATmega88__) || defined (__AVR_ATmega168__)
#if defined (__AVR_ATmega88__) || defined (__AVR_ATmega168__) || defined (__AVR_ATmega328P__)
void disable_wdt_timer(void) __attribute__((naked, section(".init3")));
void disable_wdt_timer(void)
{
@@ -427,7 +436,7 @@ int main(void)

TCCR0 = (1<<CS02) | (1<<CS00);
TIMSK = (1<<TOIE0);
#elif defined (__AVR_ATmega88__) || defined (__AVR_ATmega168__)
#elif defined (__AVR_ATmega88__) || defined (__AVR_ATmega168__) || defined (__AVR_ATmega328P__)
MCUCR = (1<<IVCE);
MCUCR = (1<<IVSEL);

@@ -454,7 +463,7 @@ int main(void)

GICR = (1<<IVCE);
GICR = (0<<IVSEL);
#elif defined (__AVR_ATmega88__) || defined (__AVR_ATmega168__)
#elif defined (__AVR_ATmega88__) || defined (__AVR_ATmega168__) || defined (__AVR_ATmega328P__)
TIMSK0 = 0x00;
TCCR0B = 0x00;


Loading…
Cancel
Save