adds support for the atmega328 (#9043)
Co-authored-by: Ryan <fauxpark@gmail.com>
This commit is contained in:
		| @@ -22,7 +22,7 @@ Then place this include at the top of your code: | ||||
|  | ||||
| ### AVR | ||||
|  | ||||
| |Channel|AT90USB64/128|ATmega16/32U4|ATmega32A|ATmega328P| | ||||
| |Channel|AT90USB64/128|ATmega16/32U4|ATmega32A|ATmega328/P| | ||||
| |-------|-------------|-------------|---------|----------| | ||||
| |0      |`F0`         |`F0`         |`A0`     |`C0`      | | ||||
| |1      |`F1`         |`F1`         |`A1`     |`C1`      | | ||||
| @@ -39,7 +39,7 @@ Then place this include at the top of your code: | ||||
| |12     |             |`B5`         |         |          | | ||||
| |13     |             |`B6`         |         |          | | ||||
|  | ||||
| <sup>\* The ATmega328P possesses two extra ADC channels; however, they are not present on the DIP pinout, and are not shared with GPIO pins. You can use `adc_read()` directly to gain access to these.</sup> | ||||
| <sup>\* The ATmega328/P possesses two extra ADC channels; however, they are not present on the DIP pinout, and are not shared with GPIO pins. You can use `adc_read()` directly to gain access to these.</sup> | ||||
|  | ||||
| ### ARM | ||||
|  | ||||
|   | ||||
| @@ -14,6 +14,7 @@ Certain MCUs which do not have native USB will use [V-USB](https://www.obdev.at/ | ||||
|  | ||||
| * [ATmega32A](https://www.microchip.com/wwwproducts/en/ATmega32A) | ||||
| * [ATmega328P](https://www.microchip.com/wwwproducts/en/ATmega328P) | ||||
| * [ATmega328](https://www.microchip.com/wwwproducts/en/ATmega328) | ||||
|  | ||||
| ## ARM | ||||
|  | ||||
|   | ||||
| @@ -89,7 +89,7 @@ BACKLIGHT_DRIVER = pwm | ||||
|  | ||||
| Hardware PWM is supported according to the following table: | ||||
|  | ||||
| |Backlight Pin|AT90USB64/128|ATmega16/32U4|ATmega16/32U2|ATmega32A|ATmega328P| | ||||
| |Backlight Pin|AT90USB64/128|ATmega16/32U4|ATmega16/32U2|ATmega32A|ATmega328/P| | ||||
| |-------------|-------------|-------------|-------------|---------|----------| | ||||
| |`B1`         |             |             |             |         |Timer 1   | | ||||
| |`B2`         |             |             |             |         |Timer 1   | | ||||
|   | ||||
| @@ -11,7 +11,7 @@ No special setup is required - just connect the `SS`, `SCK`, `MOSI` and `MISO` p | ||||
| |ATMega16/32U2/4|`B0`|`B1` |`B2`  |`B3`  | | ||||
| |AT90USB64/128  |`B0`|`B1` |`B2`  |`B3`  | | ||||
| |ATmega32A      |`B4`|`B7` |`B5`  |`B6`  | | ||||
| |ATmega328P     |`B2`|`B5` |`B3`  |`B4`  | | ||||
| |ATmega328/P    |`B2`|`B5` |`B3`  |`B4`  | | ||||
|  | ||||
| You may use more than one slave select pin, not just the `SS` pin. This is useful when you have multiple devices connected and need to communicate with them individually. | ||||
| `SPI_SS_PIN` can be passed to `spi_start()` to refer to `SS`. | ||||
|   | ||||
| @@ -38,7 +38,7 @@ int16_t analogRead(uint8_t pin) { | ||||
|     // clang-format on | ||||
|     if (pin >= 12) return 0; | ||||
|     return adc_read(pgm_read_byte(pin_to_mux + pin)); | ||||
| #elif defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB647__) || defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__) || defined(__AVR_ATmega328P__) | ||||
| #elif defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB647__) || defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__) || defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328__) | ||||
|     if (pin >= 8) return 0; | ||||
|     return adc_read(pin); | ||||
| #else | ||||
| @@ -85,7 +85,7 @@ uint8_t pinToMux(pin_t pin) { | ||||
|         case A6: return _BV(MUX2) | _BV(MUX1);  // ADC6 | ||||
|         case A7: return _BV(MUX2) | _BV(MUX1) | _BV(MUX0);  // ADC7 | ||||
|         default: return _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1) | _BV(MUX0);  // 0V | ||||
| #elif defined(__AVR_ATmega328P__) | ||||
| #elif defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328__) | ||||
|         case C0: return 0;  // ADC0 | ||||
|         case C1: return _BV(MUX0);  // ADC1 | ||||
|         case C2: return _BV(MUX1);  // ADC2 | ||||
|   | ||||
| @@ -28,7 +28,7 @@ | ||||
| #    define SPI_SCK_PIN B7 | ||||
| #    define SPI_MOSI_PIN B5 | ||||
| #    define SPI_MISO_PIN B6 | ||||
| #elif defined(__AVR_ATmega328P__) | ||||
| #elif defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328__) | ||||
| #    define SPI_SCK_PIN B5 | ||||
| #    define SPI_MOSI_PIN B3 | ||||
| #    define SPI_MISO_PIN B4 | ||||
|   | ||||
| @@ -25,7 +25,7 @@ typedef int16_t spi_status_t; | ||||
| #    define SPI_SS_PIN B0 | ||||
| #elif defined(__AVR_ATmega32A__) | ||||
| #    define SPI_SS_PIN B4 | ||||
| #elif defined(__AVR_ATmega328P__) | ||||
| #elif defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328__) | ||||
| #    define SPI_SS_PIN B2 | ||||
| #endif | ||||
|  | ||||
|   | ||||
| @@ -103,7 +103,7 @@ | ||||
| #        define COMxx1 COM1A1 | ||||
| #        define OCRxx OCR1A | ||||
| #    endif | ||||
| #elif defined(__AVR_ATmega328P__) && (BACKLIGHT_PIN == B1 || BACKLIGHT_PIN == B2) | ||||
| #elif (defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328__)) && (BACKLIGHT_PIN == B1 || BACKLIGHT_PIN == B2) | ||||
| #    define HARDWARE_PWM | ||||
| #    define ICRx ICR1 | ||||
| #    define TCCRxA TCCR1A | ||||
|   | ||||
| @@ -58,7 +58,7 @@ | ||||
| #        define PINC_ADDRESS 0x3 | ||||
| #        define PINB_ADDRESS 0x6 | ||||
| #        define PINA_ADDRESS 0x9 | ||||
| #    elif defined(__AVR_ATmega328P__) | ||||
| #    elif defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328__) | ||||
| #        define ADDRESS_BASE 0x00 | ||||
| #        define PINB_ADDRESS 0x3 | ||||
| #        define PINC_ADDRESS 0x6 | ||||
|   | ||||
| @@ -288,6 +288,24 @@ ifneq (,$(filter $(MCU),atmega328p)) | ||||
|   NO_SUSPEND_POWER_DOWN ?= yes | ||||
| endif | ||||
|  | ||||
| ifneq (,$(filter $(MCU),atmega328)) | ||||
|   # MCU name for avrdude | ||||
|   AVRDUDE_MCU = m328 | ||||
|  | ||||
|   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 ?= 16000000 | ||||
|  | ||||
|   # unsupported features for now | ||||
|   NO_UART ?= yes | ||||
|   NO_SUSPEND_POWER_DOWN ?= yes | ||||
| endif | ||||
|  | ||||
| ifneq (,$(filter $(MCU),attiny85)) | ||||
|   PROTOCOL = VUSB | ||||
|  | ||||
|   | ||||
| @@ -247,7 +247,7 @@ void bootloader_jump(void) { | ||||
|  | ||||
| #else  // Assume remaining boards are DFU, even if the flag isn't set | ||||
|  | ||||
| #    if !(defined(__AVR_ATmega32A__) || defined(__AVR_ATmega328P__) || defined(__AVR_ATtiny85__))  // no USB - maybe BOOTLOADER_BOOTLOADHID instead though? | ||||
| #    if !(defined(__AVR_ATmega32A__) || defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328__) || defined(__AVR_ATtiny85__))  // no USB - maybe BOOTLOADER_BOOTLOADHID instead though? | ||||
|     UDCON  = 1; | ||||
|     USBCON = (1 << FRZCLK);  // disable USB | ||||
|     UCSR1B = 0; | ||||
|   | ||||
| @@ -31,7 +31,7 @@ | ||||
|  | ||||
| #include "uart.h" | ||||
|  | ||||
| #if defined(__AVR_ATmega168__) || defined(__AVR_ATmega168P__) || defined(__AVR_ATmega328P__) | ||||
| #if defined(__AVR_ATmega168__) || defined(__AVR_ATmega168P__) || defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328__) | ||||
| #    define UDRn UDR0 | ||||
| #    define UBRRnL UBRR0L | ||||
| #    define UCSRnA UCSR0A | ||||
|   | ||||
		Reference in New Issue
	
	Block a user