Initial support for ATtiny85 (#8632)
* Initial support for ATtiny85 * Update mcu selection
This commit is contained in:
committed by
Florian Didron
parent
65de39bb6d
commit
fec6ee365c
@@ -64,6 +64,9 @@
|
|||||||
# define PINB_ADDRESS 0x3
|
# define PINB_ADDRESS 0x3
|
||||||
# define PINC_ADDRESS 0x6
|
# define PINC_ADDRESS 0x6
|
||||||
# define PIND_ADDRESS 0x9
|
# define PIND_ADDRESS 0x9
|
||||||
|
# elif defined(__AVR_ATtiny85__)
|
||||||
|
# define ADDRESS_BASE 0x10
|
||||||
|
# define PINB_ADDRESS 0x6
|
||||||
# else
|
# else
|
||||||
# error "Pins are not defined"
|
# error "Pins are not defined"
|
||||||
# endif
|
# endif
|
||||||
|
|||||||
@@ -290,3 +290,18 @@ ifneq (,$(filter $(MCU),atmega328p))
|
|||||||
NO_UART ?= yes
|
NO_UART ?= yes
|
||||||
NO_SUSPEND_POWER_DOWN ?= yes
|
NO_SUSPEND_POWER_DOWN ?= yes
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifneq (,$(filter $(MCU),attiny85))
|
||||||
|
PROTOCOL = VUSB
|
||||||
|
|
||||||
|
# Processor frequency.
|
||||||
|
# This will define a symbol, F_CPU, in all source code files equal to the
|
||||||
|
# processor frequency in Hz. 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.
|
||||||
|
F_CPU ?= 16500000
|
||||||
|
|
||||||
|
# unsupported features for now
|
||||||
|
NO_UART ?= yes
|
||||||
|
NO_SUSPEND_POWER_DOWN ?= yes
|
||||||
|
endif
|
||||||
|
|||||||
@@ -237,17 +237,17 @@ void bootloader_jump(void) {
|
|||||||
"bootloader_startup_loop%=: \n\t"
|
"bootloader_startup_loop%=: \n\t"
|
||||||
"rjmp bootloader_startup_loop%= \n\t"
|
"rjmp bootloader_startup_loop%= \n\t"
|
||||||
:
|
:
|
||||||
: [ mcucsrio ] "I"(_SFR_IO_ADDR(MCUCSR)),
|
: [mcucsrio] "I"(_SFR_IO_ADDR(MCUCSR)),
|
||||||
# if (FLASHEND > 131071)
|
# if (FLASHEND > 131071)
|
||||||
[ ramendhi ] "M"(((RAMEND - 2) >> 8) & 0xff), [ ramendlo ] "M"(((RAMEND - 2) >> 0) & 0xff), [ bootaddrhi ] "M"((((FLASH_SIZE - BOOTLOADER_SIZE) >> 1) >> 16) & 0xff),
|
[ramendhi] "M"(((RAMEND - 2) >> 8) & 0xff), [ramendlo] "M"(((RAMEND - 2) >> 0) & 0xff), [bootaddrhi] "M"((((FLASH_SIZE - BOOTLOADER_SIZE) >> 1) >> 16) & 0xff),
|
||||||
# else
|
# else
|
||||||
[ ramendhi ] "M"(((RAMEND - 1) >> 8) & 0xff), [ ramendlo ] "M"(((RAMEND - 1) >> 0) & 0xff),
|
[ramendhi] "M"(((RAMEND - 1) >> 8) & 0xff), [ramendlo] "M"(((RAMEND - 1) >> 0) & 0xff),
|
||||||
# endif
|
# endif
|
||||||
[ bootaddrme ] "M"((((FLASH_SIZE - BOOTLOADER_SIZE) >> 1) >> 8) & 0xff), [ bootaddrlo ] "M"((((FLASH_SIZE - BOOTLOADER_SIZE) >> 1) >> 0) & 0xff));
|
[bootaddrme] "M"((((FLASH_SIZE - BOOTLOADER_SIZE) >> 1) >> 8) & 0xff), [bootaddrlo] "M"((((FLASH_SIZE - BOOTLOADER_SIZE) >> 1) >> 0) & 0xff));
|
||||||
|
|
||||||
#else // Assume remaining boards are DFU, even if the flag isn't set
|
#else // Assume remaining boards are DFU, even if the flag isn't set
|
||||||
|
|
||||||
# if !(defined(__AVR_ATmega32A__) || defined(__AVR_ATmega328P__)) // no USB - maybe BOOTLOADER_BOOTLOADHID instead though?
|
# if !(defined(__AVR_ATmega32A__) || defined(__AVR_ATmega328P__) || defined(__AVR_ATtiny85__)) // no USB - maybe BOOTLOADER_BOOTLOADHID instead though?
|
||||||
UDCON = 1;
|
UDCON = 1;
|
||||||
USBCON = (1 << FRZCLK); // disable USB
|
USBCON = (1 << FRZCLK); // disable USB
|
||||||
UCSR1B = 0;
|
UCSR1B = 0;
|
||||||
|
|||||||
@@ -45,19 +45,26 @@ void timer_init(void) {
|
|||||||
# error "Timer prescaler value is not valid"
|
# error "Timer prescaler value is not valid"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef __AVR_ATmega32A__
|
#if defined(__AVR_ATmega32A__)
|
||||||
|
// Timer0 CTC mode
|
||||||
|
TCCR0 = _BV(WGM01) | prescaler;
|
||||||
|
|
||||||
|
OCR0 = TIMER_RAW_TOP;
|
||||||
|
TIMSK = _BV(OCIE0);
|
||||||
|
#elif defined(__AVR_ATtiny85__)
|
||||||
|
// Timer0 CTC mode
|
||||||
|
TCCR0A = _BV(WGM01);
|
||||||
|
TCCR0B = prescaler;
|
||||||
|
|
||||||
|
OCR0A = TIMER_RAW_TOP;
|
||||||
|
TIMSK = _BV(OCIE0A);
|
||||||
|
#else
|
||||||
// Timer0 CTC mode
|
// Timer0 CTC mode
|
||||||
TCCR0A = _BV(WGM01);
|
TCCR0A = _BV(WGM01);
|
||||||
TCCR0B = prescaler;
|
TCCR0B = prescaler;
|
||||||
|
|
||||||
OCR0A = TIMER_RAW_TOP;
|
OCR0A = TIMER_RAW_TOP;
|
||||||
TIMSK0 = _BV(OCIE0A);
|
TIMSK0 = _BV(OCIE0A);
|
||||||
#else
|
|
||||||
// Timer0 CTC mode
|
|
||||||
TCCR0 = _BV(WGM01) | prescaler;
|
|
||||||
|
|
||||||
OCR0 = TIMER_RAW_TOP;
|
|
||||||
TIMSK = _BV(OCIE0);
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user