Initial support for ATtiny85 (#8632)

* Initial support for ATtiny85

* Update mcu selection
This commit is contained in:
Joel Challis 2020-04-02 22:23:57 +01:00 committed by GitHub
parent f2901375ce
commit 9c4bf0ac4a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 33 additions and 8 deletions

View file

@ -63,6 +63,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

View file

@ -287,3 +287,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

View file

@ -247,7 +247,7 @@ void bootloader_jump(void) {
#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;

View file

@ -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
} }