ソースを参照

Initial support for ATtiny85 (#8632)

* Initial support for ATtiny85

* Update mcu selection
Joel Challis 5 年 前
コミット
9c4bf0ac4a

+ 3 - 0
quantum/config_common.h

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

+ 15 - 0
quantum/mcu_selection.mk

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

+ 1 - 1
tmk_core/common/avr/bootloader.c

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

+ 13 - 6
tmk_core/common/avr/timer.c

@@ -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
     // Timer0 CTC mode
     TCCR0A = _BV(WGM01);
     TCCR0A = _BV(WGM01);
     TCCR0B = prescaler;
     TCCR0B = prescaler;
 
 
-    OCR0A  = TIMER_RAW_TOP;
-    TIMSK0 = _BV(OCIE0A);
+    OCR0A = TIMER_RAW_TOP;
+    TIMSK = _BV(OCIE0A);
 #else
 #else
     // Timer0 CTC mode
     // Timer0 CTC mode
-    TCCR0 = _BV(WGM01) | prescaler;
+    TCCR0A = _BV(WGM01);
+    TCCR0B = prescaler;
 
 
-    OCR0  = TIMER_RAW_TOP;
-    TIMSK = _BV(OCIE0);
+    OCR0A  = TIMER_RAW_TOP;
+    TIMSK0 = _BV(OCIE0A);
 #endif
 #endif
 }
 }