-
Notifications
You must be signed in to change notification settings - Fork 2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
19754: boards/atmega8: new board r=benpicco a=hugueslarrive ### Contribution description Splitted from: - #19740 ### Testing procedure Tested on atmega8 with: - #19755 ### Issues/PRs references Dependencies: - #19753 - #19752 - #19751 Co-authored-by: Hugues Larrive <hlarrive@pm.me>
- Loading branch information
Showing
410 changed files
with
970 additions
and
13 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
# Copyright (c) 2020 HAW Hamburg | ||
# | ||
# This file is subject to the terms and conditions of the GNU Lesser | ||
# General Public License v2.1. See the file LICENSE in the top level | ||
# directory for more details. | ||
|
||
config BOARD | ||
default "atmega8" if BOARD_ATMEGA8 | ||
|
||
config BOARD_ATMEGA8 | ||
bool | ||
default y | ||
select CPU_MODEL_ATMEGA8 | ||
# Put defined MCU peripherals here (in alphabetical order) | ||
select HAS_PERIPH_ADC | ||
select HAS_PERIPH_GPIO | ||
select HAS_PERIPH_I2C | ||
select HAS_PERIPH_PWM | ||
select HAS_PERIPH_SPI | ||
select HAS_PERIPH_TIMER | ||
select HAS_PERIPH_UART | ||
# Various other features (if any) | ||
select MODULE_BOARDS_COMMON_ATMEGA if TEST_KCONFIG | ||
|
||
source "$(RIOTBOARD)/common/atmega/Kconfig" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
MODULE = board | ||
|
||
DIRS = $(RIOTBOARD)/common/atmega | ||
|
||
include $(RIOTBASE)/Makefile.base |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
USEMODULE += boards_common_atmega |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
CPU = atmega8 | ||
|
||
FEATURES_PROVIDED += periph_adc | ||
FEATURES_PROVIDED += periph_gpio | ||
FEATURES_PROVIDED += periph_i2c | ||
FEATURES_PROVIDED += periph_pwm | ||
FEATURES_PROVIDED += periph_spi | ||
FEATURES_PROVIDED += periph_timer | ||
FEATURES_PROVIDED += periph_uart |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
# configure the terminal program | ||
PORT_LINUX ?= /dev/ttyUSB0 | ||
PORT_DARWIN ?= $(firstword $(sort $(wildcard /dev/tty.usbmodem*))) | ||
BAUD ?= 9600 | ||
ATMEGA8_CLOCK ?= | ||
|
||
# Allow overwriting programmer via env variables without affecting other boards | ||
PROGRAMMER_BOARD_ATMEGA8 ?= usbasp | ||
# ICSP programmer to use for avrdude | ||
AVRDUDE_PROGRAMMER ?= $(PROGRAMMER_BOARD_ATMEGA8) | ||
|
||
ifneq (,$(ATMEGA8_CLOCK)) | ||
CFLAGS += -DCLOCK_CORECLOCK=$(ATMEGA8_CLOCK) | ||
endif | ||
|
||
include $(RIOTBOARD)/common/atmega/Makefile.include |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,99 @@ | ||
/** | ||
@defgroup boards_atmega8 Standalone ATmega8 | ||
@ingroup boards | ||
@brief Support for using the ATmega8 as standalone board | ||
|
||
## Overview | ||
|
||
As the ATmega8 can run from the internal oscillator, placing it on a breadboard, | ||
connecting an USB-UART adapter and power is enough to run RIOT on it. (An ISP | ||
programmer will be needed to program it; or to program a bootloader to | ||
subsequently allow programming via UART.) | ||
|
||
### MCU | ||
| MCU | ATmega8 | | ||
|:------------- |:--------------------------------------------- | | ||
| Family | AVR/ATmega | | ||
| Vendor | Microchip (previously Atmel) | | ||
| RAM | 1KiB | | ||
| Flash | 8KiB | | ||
| EEPROM | 512B | | ||
| Frequency | 1MHz/8MHz (up to 16MHz with external clock) | | ||
| Timers | 3 (2x 8bit, 1x 16bit) | | ||
| ADCs | 6 analog input pins | | ||
| UARTs | 1 | | ||
| SPIs | 1 | | ||
| I2Cs | 1 (called TWI) | | ||
| Vcc | 4.5V - 5.5V (ATmega8), 2.7V - 5.5V (ATmega8L) | | ||
| Datasheet | [Official datasheet](https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-2486-8-bit-AVR-microcontroller-ATmega8_L_datasheet.pdf) | | ||
|
||
### Pinout | ||
|
||
\htmlonly<style>div.image img[src="https://camo.githubusercontent.com/c55beef2f138da61fe671a1e4a307ff4ffbc318d/68747470733a2f2f692e696d6775722e636f6d2f715849456368542e6a7067"]{width:100%;}</style>\endhtmlonly | ||
@image html "https://camo.githubusercontent.com/c55beef2f138da61fe671a1e4a307ff4ffbc318d/68747470733a2f2f692e696d6775722e636f6d2f715849456368542e6a7067" "Pinout of the ATmega328p"<br> | ||
|
||
All credit for above pinout image goes to https://github.com/MCUdude/MiniCore#pinout | ||
|
||
### Clock Frequency | ||
|
||
The ATmega8 has an internal oscillators clocked at 1MHz that allow it to be | ||
operated without any external clock source or crystal. By default the fuses are | ||
configured to use the internal oscillator and an operating mode resulting in a | ||
clock speed of 1MHz. By setting the `CKSEL` fuses to 0100 the clock will operate | ||
at 8MHz without an external clock source. This can be done like this: | ||
|
||
avrdude -c usbasp -p m8 -B 32 -U lfuse:w:0xe4:m | ||
|
||
(Replace `usbasp` with the ISP programmer you are using. The `-B 32` might | ||
be needed on some ISP programmers to communicate with slow ATmega MCUs. It will | ||
not be needed anymore after the clock device has been disabled.) | ||
|
||
This "board" is configured to use 8MHz as core clock, so that the ATmega8 | ||
runs at the highest frequency possible without external clock sources. | ||
|
||
By setting the environment variable `ATMEGA8_CLOCK` to a custom frequency in | ||
Hz (e.g. `1000000` for 1MHz), this core clock can be changed easily. Refer to | ||
the datasheet on how to configure the ATmega8 to use an external crystal, an | ||
external clock source or the clock divider. | ||
|
||
### Relation Between Supply Voltage, Clock Frequency and Power Consumption | ||
|
||
A higher supply voltage results in a higher current drawn. Thus, lower power | ||
consumption can be achieved by using a lower supply voltage. However, higher | ||
clock frequencies require higher supply voltages for reliable operation. | ||
|
||
The lowest possible supply voltage at 8 MHz is 2.7V (Atmega8L) or | ||
4.5V (Atmega8). | ||
|
||
## Flashing the Device | ||
|
||
In order to flash the ATmega8 without a bootloader, an ISP programmer is | ||
needed. Connect the programmer as follows: | ||
|
||
| ISP pin | ATmega8 pin | | ||
|:-------- |:-------------- | | ||
| MISO | 18/PB4/MISO | | ||
| VCC | 7/VCC | | ||
| SCK | 19/PB5/SCK | | ||
| MOSI | 17/PB3/MOSI | | ||
| RESET | 1/RESET | | ||
| Ground | 22/GND | | ||
|
||
The tool `avrdude` needs to be installed. When using the `usbasp` running | ||
|
||
make BOARD=atmega8 flash | ||
|
||
will take care of everything. To use the programmer `<FOOBAR>` instead, run | ||
|
||
make BOARD=atmega8 PROGRAMMER=<FOOBAR> flash | ||
|
||
## Serial Terminal | ||
|
||
Connect a TTL adapter with pins 2/RXD and 3/TXD an run | ||
|
||
make BOARD=atmega8 term | ||
|
||
Please note that the supply voltage should be compatible with the logic level of | ||
the TTL adapter. Usually everything between 3.3 V and 5 V should work. | ||
|
||
*/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
/* | ||
* Copyright (C) 2014 Freie Universität Berlin, Hinnerk van Bruinehsen | ||
* 2016 Laurent Navet <laurent.navet@gmail.com> | ||
* 2019 Otto-von-Guericke-Universität Magdeburg | ||
* 2023 Hugues Larrive | ||
* | ||
* This file is subject to the terms and conditions of the GNU Lesser | ||
* General Public License v2.1. See the file LICENSE in the top level | ||
* directory for more details. | ||
*/ | ||
|
||
/** | ||
* @ingroup boards_atmega8 | ||
* @{ | ||
* | ||
* @file | ||
* @brief Board specific definitions for the standalone ATmega8 "board" | ||
* | ||
* @author Marian Buschsieweke <marian.buschsieweke@ovgu.de> | ||
* @author Hinnerk van Bruinehsen <h.v.bruinehsen@fu-berlin.de> | ||
* @author Laurent Navet <laurent.navet@gmail.com> | ||
* @author Hugues Larrive <hugues.larrive@pm.me> | ||
*/ | ||
|
||
#ifndef BOARD_H | ||
#define BOARD_H | ||
|
||
#include "cpu.h" | ||
#include "periph_conf.h" | ||
|
||
#ifdef __cplusplus | ||
extern "C" { | ||
#endif | ||
|
||
/** | ||
* @name STDIO configuration | ||
* | ||
* As the CPU is too slow to handle 115200 baud, we set the default | ||
* baudrate to 9600 for this board | ||
* @{ | ||
*/ | ||
#define STDIO_UART_BAUDRATE (9600U) | ||
/** @} */ | ||
|
||
/** | ||
* @name xtimer configuration values | ||
* @{ | ||
*/ | ||
#define XTIMER_WIDTH (16) | ||
#if CLOCK_CORECLOCK > 4000000UL | ||
#define XTIMER_HZ (CLOCK_CORECLOCK / 64) | ||
#else | ||
#define XTIMER_HZ (CLOCK_CORECLOCK / 8) | ||
#endif | ||
#define XTIMER_BACKOFF (40) | ||
/** @} */ | ||
|
||
#ifdef __cplusplus | ||
} | ||
#endif | ||
|
||
#endif /* BOARD_H */ | ||
/** @} */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
/* | ||
* Copyright (C) 2019 Otto-von-Guericke-Universität Magdeburg | ||
* 2023 Hugues Larrive | ||
* | ||
* This file is subject to the terms and conditions of the GNU Lesser | ||
* General Public License v2.1. See the file LICENSE in the top level | ||
* directory for more details. | ||
*/ | ||
|
||
/** | ||
* @ingroup boards_atmega8 | ||
* @{ | ||
* | ||
* @file | ||
* @brief Peripheral MCU configuration for the ATmega8 standalone "board" | ||
* | ||
* @author Marian Buschsieweke <marian.buschsieweke@ovgu.de> | ||
* @author Hugues Larrive <hugues.larrive@pm.me> | ||
*/ | ||
|
||
#ifndef PERIPH_CONF_H | ||
#define PERIPH_CONF_H | ||
|
||
#ifdef __cplusplus | ||
extern "C" { | ||
#endif | ||
|
||
/** | ||
* @name Clock configuration | ||
* @{ | ||
*/ | ||
#ifndef CLOCK_CORECLOCK | ||
/* Using 8MHz internal oscillator as default clock source */ | ||
#define CLOCK_CORECLOCK (8000000UL) | ||
#endif | ||
/** @} */ | ||
|
||
#ifdef __cplusplus | ||
} | ||
#endif | ||
|
||
#include "periph_conf_atmega_common.h" | ||
|
||
#endif /* PERIPH_CONF_H */ | ||
/** @} */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,3 @@ | ||
CPU_FAM = atmega8 | ||
|
||
include $(RIOTCPU)/atmega_common/Makefile.features |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.