1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00

Merge pull request #12411 from benpicco/atmega128rfa1

boards/microduino-corerf: Initial support
This commit is contained in:
Marian Buschsieweke 2019-10-17 21:19:19 +02:00 committed by GitHub
commit cf81dffaee
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
75 changed files with 694 additions and 59 deletions

View File

@ -29,6 +29,13 @@
void led_init(void);
/*
* Add an empty led_init() as fall back.
* If at link time another implementation of led_init() not marked as weak
* (a.k.a. a strong symbol) is present, it will be linked in instead.
*/
void __attribute__((weak)) led_init(void) {}
void board_init(void)
{
#ifdef CPU_ATMEGA32U4

View File

@ -121,7 +121,7 @@ extern "C" {
#define TIMER_1_ISRA TIMER3_COMPA_vect
#define TIMER_1_ISRB TIMER3_COMPB_vect
#define TIMER_1_ISRC TIMER3_COMPC_vect
#elif defined(CPU_ATMEGA256RFR2)
#elif defined(CPU_ATMEGA128RFA1) || defined(CPU_ATMEGA256RFR2)
#define TIMER_NUMOF (3U)
#define TIMER_CHANNELS (3)
@ -203,7 +203,8 @@ extern "C" {
*/
#ifndef UART_NUMOF
#if defined(CPU_ATMEGA256RFR2) || defined(CPU_ATMEGA1281) || defined(CPU_ATMEGA1284P) || defined(CPU_ATMEGA2560)
#if defined(CPU_ATMEGA128RFA1) || defined(CPU_ATMEGA256RFR2) || \
defined(CPU_ATMEGA1281) || defined(CPU_ATMEGA1284P) || defined(CPU_ATMEGA2560)
#define UART_NUMOF (2U)
/* UART0 is used for stdio */
@ -295,7 +296,8 @@ extern "C" {
* @{
*/
#ifndef ADC_NUMOF
#if defined(CPU_ATMEGA256RFR2) || defined(CPU_ATMEGA328P) || defined(CPU_ATMEGA1281) || defined(CPU_ATMEGA1284P) || defined(CPU_ATMEGA32U4)
#if defined(CPU_ATMEGA128RFA1) || defined(CPU_ATMEGA256RFR2) || defined(CPU_ATMEGA328P) || \
defined(CPU_ATMEGA1281) || defined(CPU_ATMEGA1284P) || defined(CPU_ATMEGA32U4)
#define ADC_NUMOF (8U)
#elif defined (CPU_ATMEGA2560)
#define ADC_NUMOF (16U)

View File

@ -0,0 +1,5 @@
MODULE = board
DIRS = $(RIOTBOARD)/common/atmega
include $(RIOTBASE)/Makefile.base

View File

@ -0,0 +1 @@
USEMODULE += boards_common_atmega

View File

@ -0,0 +1,13 @@
CPU = atmega128rfa1
# This board is based on an atmega CPU, thus import the features from it
FEATURES_PROVIDED += periph_adc
FEATURES_PROVIDED += periph_gpio periph_gpio_irq
FEATURES_PROVIDED += periph_i2c
FEATURES_PROVIDED += periph_spi
FEATURES_PROVIDED += periph_timer
FEATURES_PROVIDED += periph_uart
# Put defined MCU peripherals here (in alphabetical order)
# Peripherals are defined in common/arduino-atmega/Makefile.features
# Add only additional Peripherals

View File

@ -0,0 +1,17 @@
# configure the terminal program
PORT_LINUX ?= /dev/ttyACM0
PORT_DARWIN ?= $(firstword $(sort $(wildcard /dev/tty.usbmodem*)))
BAUD ?= 57600
include $(RIOTMAKE)/tools/serial.inc.mk
# PROGRAMMER defaults to UM232H which is a FT232H breakout board
# externally connected using wires
PROGRAMMER_MICRODUINO_CORERF ?= UM232H
PROGRAMMER ?= $(PROGRAMMER_MICRODUINO_CORERF)
# We don't use a bootloader
BOOTLOADER_SIZE ?= 0
ROM_RESERVED ?= $(BOOTLOADER_SIZE)
include $(RIOTMAKE)/tools/avrdude.inc.mk
include $(RIOTBOARD)/common/atmega/Makefile.include

View File

@ -0,0 +1,82 @@
/**
* @defgroup boards_microduino-corerf Microduino CoreRF
* @ingroup boards
* @brief Support for the Microduino CoreRF board
# Hardware
## Pinout
![corerf-pinout](https://wiki.microduinoinc.com/images/d/df/RF%E5%BC%95%E8%84%9A.jpg)
Warning: Unlike on other ATmega MCUs, the GPIOs are not 5V tolerant.
## Board
The board is just a breakout for the ATmega128RFA1 MCU.
## MCU Details
| MCU | ATmega128RFA1 |
|:------------- -|:--------------------------|
| Family | ATmega |
| Vendor | Atmel |
| Package | QFN/MLF |
| SRAM | 16K |
| Flash | 128K |
| EEPROM | 4K |
| Core Frequency | 8MHz (16MHz no power save mode) |
| Oscillators | 32.768 kHz & 16 MHz |
| Timerr | 6 ( 2x8bit & 4x16bit ) |
|Analog Comparator| 1 |
| ADCs | 1x 15 channel 6 to 12-bit |
| USARTs | 2 |
| SPIs | 3 (1 SPI & 2 USART SPI) |
| I2Cs | 1 (called TWI) |
| Vcc | 1.8V - 3.6V |
| Datasheet / Reference Manual | [Datasheet and Reference Manual](http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-8266-MCU_Wireless-ATmega128RFA1_Datasheet.pdf) |
| Board Manual | [Wiki Page](https://wiki.microduinoinc.com/Microduino-Module_CoreRF) |
The MCU comes with a 2.4 GHz IEEE 802.15.4 radio that is compatible with the
Atmel AT86RF23x line of transceivers with the only difference being that it is
not being accessed over an SPI bus, but instead the radio registers are directly
mapped into memory.
# Flashing RIOT
Flashing RIOT on the CoreRF is done using the SPI method.
Using a cheap FT232H breakout board, connect the board as follows:
| FT232H | Microduino CoreRF |
|:------ |:----------------- |
| D0 | D13 (SCK) |
| D1 | D11 (MOSI) |
| D2 | D12 (MISO) |
| D3 | RST (Reset) |
| 3.3V | 3.3V |
| GND | GND |
Now you can simply type
`make flash BOARD=microduino-corerf`
This should take care of everything!
You will need a separate adapter for UART:
| FT232R | Microduino CoreRF |
|:------ |:----------------- |
| TX | D0 |
| RX | D1 |
# Troubleshooting
## Using the external crystal oscillator (Transceiver Crystal Oscillator) and deep sleep
When the external crystal oscillator is used as system clock and the device is put into deep sleep mode it seems that
the clocks for all peripherals are enabled and set to the smallest divider (highest frequency). This leads to a higher
power consumption. When the device should be put into deep sleep it is recommended to use the internal RC oscillator
as system clock source.
## Pin Change Interrupts
More pins can be used for hardware interrupts using the Pin Change
Interrupt feature. See @ref boards_common_atmega for details.
*/

View File

@ -0,0 +1,57 @@
/*
* Copyright (C) 2019 Benjamin Valentin
*
* 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_microduino-corerf
* @{
*
* @file
* @brief Board specific definitions for the Microduino CoreRF board.
*
* @author Benjamin Valentin <benpicco@googlemail.com>
*/
#ifndef BOARD_H
#define BOARD_H
#include "cpu.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @name baudrate for STDIO terminal
*
* @{
*/
#ifndef STDIO_UART_BAUDRATE
#define STDIO_UART_BAUDRATE (57600U) /**< Sets Baudrate for e.g. Shell */
#endif
/** @} */
/**
* @name xtimer configuration values
* @{
*/
#define XTIMER_WIDTH (16)
#define XTIMER_HZ (250000UL)
#define XTIMER_BACKOFF (40)
/** @} */
/**
* @brief Initialize board specific hardware, including clock, LEDs and stdio
*/
void board_init(void);
#ifdef __cplusplus
}
#endif
#endif /* BOARD_H */
/** @} */

View File

@ -0,0 +1,30 @@
/*
* Copyright (C) 2019 Benjamin Valentin
*
* 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_microduino-corerf
* @{
*
* @file
* @brief Peripheral MCU configuration for the Microduino CoreRF board
*
* @author Benjamin Valentin <benpicco@googlemail.com>
*/
#ifndef PERIPH_CONF_H
#define PERIPH_CONF_H
#include "periph_conf_atmega_common.h"
#ifdef __cplusplus
extern "C" {
}
#endif
#endif /* PERIPH_CONF_H */
/** @} */

View File

@ -0,0 +1,7 @@
# define the module that is build
MODULE = cpu
# add a list of subdirectories, that should also be build
DIRS = $(RIOTCPU)/atmega_common/
include $(RIOTBASE)/Makefile.base

View File

@ -0,0 +1,6 @@
# additional PCINTs for atmega128rfa1
ifneq (,$(filter atmega_pcint,$(USEMODULE)))
USEMODULE += atmega_pcint1
endif
include $(RIOTCPU)/atmega_common/Makefile.dep

View File

@ -0,0 +1,9 @@
include $(RIOTCPU)/atmega_common/Makefile.features
# common feature are defined in atmega_common/Makefile.features
# Only add Additional features
# additional PCINT for atmega128rfa1
FEATURES_PROVIDED += atmega_pcint1
# Various other features (if any)
FEATURES_PROVIDED += periph_cpuid

View File

@ -0,0 +1,13 @@
# tell the build system that the CPU depends on the atmega common files
USEMODULE += atmega_common
RAM_LEN = 16K
ROM_LEN = 128K
# expand atmega_pcint for atmega128rfa1
ifneq (,$(filter atmega_pcint,$(USEMODULE)))
USEMODULE += atmega_pcint1
endif
# CPU depends on the atmega common module, so include it
include $(RIOTCPU)/atmega_common/Makefile.include

View File

@ -0,0 +1,5 @@
/**
* @defgroup cpu_atmega128rfa1 Atmel ATmega128rfa1
* @ingroup cpu
* @brief Implementation of Atmel's ATmega128rfa1 MCU
*/

View File

@ -0,0 +1,15 @@
#ifndef ATMEGA_PCINT_H
#define ATMEGA_PCINT_H
#ifdef __cplusplus
extern "C" {
#endif
#define ATMEGA_PCINT_MAP_PCINT0 GPIO_PIN(PORT_B, 0), GPIO_PIN(PORT_B, 1), GPIO_PIN(PORT_B, 2), GPIO_PIN(PORT_B, 3), GPIO_PIN(PORT_B, 4), GPIO_PIN(PORT_B, 5), GPIO_PIN(PORT_B, 6), GPIO_PIN(PORT_B, 7)
#define ATMEGA_PCINT_MAP_PCINT1 GPIO_PIN(PORT_E, 0), GPIO_UNDEF, GPIO_UNDEF, GPIO_UNDEF, GPIO_UNDEF, GPIO_UNDEF, GPIO_UNDEF, GPIO_UNDEF
#ifdef __cplusplus
}
#endif
#endif /* ATMEGA_PCINT_H */

View File

@ -0,0 +1,83 @@
/*
* Copyright (C) Josua Arndt, Steffen Robertz 2017 RWTH Aachen
*
* 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 cpu_atmega128rfa1
* @{
*
* @file
* @brief CPU specific definitions for internal peripheral handling
*
* @author Josua Arndt <jarndt@ias.rwth-aachen.de>
* @author Steffen Robertz <steffen.robertz@rwth-aachen.de>
*/
#ifndef PERIPH_CPU_H
#define PERIPH_CPU_H
#include "periph_cpu_common.h"
#include "atmega_regs_common.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @name Length of the CPU_ID in octets
* @{
*/
#define CPUID_LEN (8U)
/** @} */
/**
* @name Available ports on the ATmega128rfa1 MCU
* @{
*/
enum {
PORT_B = 1, /**< port B */
PORT_D = 3, /**< port D */
PORT_E = 4, /**< port E */
PORT_F = 5, /**< port F */
PORT_G = 6, /**< port G */
};
/**
* @brief Available external interrupt pins on the ATmega128rfa1 MCU
*
* In order of their interrupt number.
*/
#define CPU_ATMEGA_EXT_INTS { GPIO_PIN(PORT_D, 0), \
GPIO_PIN(PORT_D, 1), \
GPIO_PIN(PORT_D, 2), \
GPIO_PIN(PORT_D, 3), \
GPIO_PIN(PORT_E, 4), \
GPIO_PIN(PORT_E, 5), \
GPIO_PIN(PORT_E, 6), \
GPIO_PIN(PORT_E, 7) }
/**
* @name Defines for the I2C interface
* @{
*/
#define I2C_PORT_REG PORTD
#define I2C_PIN_MASK (1 << PORTD1) | (1 << PORTD0)
/** @} */
/**
* @name EEPROM configuration
* @{
*/
#define EEPROM_SIZE (4096U) /* 4kB */
/** @} */
#ifdef __cplusplus
}
#endif
#endif /* PERIPH_CPU_H */
/** @} */

View File

@ -0,0 +1,14 @@
avr linkerscript
================
Starting from avr-binutils 2.26, the linker defines symbol that can be
overriden to configure ROM and RAM length.
This ldscript is used for supporting older versions on avr-binutils like on
ubuntu xenial.
Generated by extracting the output of
avr-gcc -Wl,--verbose -mmcu=$(CPU)
With avr-binutils 2.26

View File

@ -0,0 +1,262 @@
/* Script for -n: mix text and data on same page */
/* Copyright (C) 2014-2015 Free Software Foundation, Inc.
Copying and distribution of this script, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved. */
OUTPUT_FORMAT("elf32-avr","elf32-avr","elf32-avr")
OUTPUT_ARCH(avr:51)
__TEXT_REGION_LENGTH__ = DEFINED(__TEXT_REGION_LENGTH__) ? __TEXT_REGION_LENGTH__ : 128K;
__DATA_REGION_LENGTH__ = DEFINED(__DATA_REGION_LENGTH__) ? __DATA_REGION_LENGTH__ : 0xff00;
__EEPROM_REGION_LENGTH__ = DEFINED(__EEPROM_REGION_LENGTH__) ? __EEPROM_REGION_LENGTH__ : 64K;
__FUSE_REGION_LENGTH__ = DEFINED(__FUSE_REGION_LENGTH__) ? __FUSE_REGION_LENGTH__ : 1K;
__LOCK_REGION_LENGTH__ = DEFINED(__LOCK_REGION_LENGTH__) ? __LOCK_REGION_LENGTH__ : 1K;
__SIGNATURE_REGION_LENGTH__ = DEFINED(__SIGNATURE_REGION_LENGTH__) ? __SIGNATURE_REGION_LENGTH__ : 1K;
__USER_SIGNATURE_REGION_LENGTH__ = DEFINED(__USER_SIGNATURE_REGION_LENGTH__) ? __USER_SIGNATURE_REGION_LENGTH__ : 1K;
MEMORY
{
text (rx) : ORIGIN = 0, LENGTH = __TEXT_REGION_LENGTH__
data (rw!x) : ORIGIN = 0x800200, LENGTH = __DATA_REGION_LENGTH__
eeprom (rw!x) : ORIGIN = 0x810000, LENGTH = __EEPROM_REGION_LENGTH__
fuse (rw!x) : ORIGIN = 0x820000, LENGTH = __FUSE_REGION_LENGTH__
lock (rw!x) : ORIGIN = 0x830000, LENGTH = __LOCK_REGION_LENGTH__
signature (rw!x) : ORIGIN = 0x840000, LENGTH = __SIGNATURE_REGION_LENGTH__
user_signatures (rw!x) : ORIGIN = 0x850000, LENGTH = __USER_SIGNATURE_REGION_LENGTH__
}
SECTIONS
{
/* Read-only sections, merged into text segment: */
.hash : { *(.hash) }
.dynsym : { *(.dynsym) }
.dynstr : { *(.dynstr) }
.gnu.version : { *(.gnu.version) }
.gnu.version_d : { *(.gnu.version_d) }
.gnu.version_r : { *(.gnu.version_r) }
.rel.init : { *(.rel.init) }
.rela.init : { *(.rela.init) }
.rel.text :
{
*(.rel.text)
*(.rel.text.*)
*(.rel.gnu.linkonce.t*)
}
.rela.text :
{
*(.rela.text)
*(.rela.text.*)
*(.rela.gnu.linkonce.t*)
}
.rel.fini : { *(.rel.fini) }
.rela.fini : { *(.rela.fini) }
.rel.rodata :
{
*(.rel.rodata)
*(.rel.rodata.*)
*(.rel.gnu.linkonce.r*)
}
.rela.rodata :
{
*(.rela.rodata)
*(.rela.rodata.*)
*(.rela.gnu.linkonce.r*)
}
.rel.data :
{
*(.rel.data)
*(.rel.data.*)
*(.rel.gnu.linkonce.d*)
}
.rela.data :
{
*(.rela.data)
*(.rela.data.*)
*(.rela.gnu.linkonce.d*)
}
.rel.ctors : { *(.rel.ctors) }
.rela.ctors : { *(.rela.ctors) }
.rel.dtors : { *(.rel.dtors) }
.rela.dtors : { *(.rela.dtors) }
.rel.got : { *(.rel.got) }
.rela.got : { *(.rela.got) }
.rel.bss : { *(.rel.bss) }
.rela.bss : { *(.rela.bss) }
.rel.plt : { *(.rel.plt) }
.rela.plt : { *(.rela.plt) }
/* Internal text space or external memory. */
.text :
{
*(.vectors)
KEEP(*(.vectors))
/* For data that needs to reside in the lower 64k of progmem. */
*(.progmem.gcc*)
/* PR 13812: Placing the trampolines here gives a better chance
that they will be in range of the code that uses them. */
. = ALIGN(2);
__trampolines_start = . ;
/* The jump trampolines for the 16-bit limited relocs will reside here. */
*(.trampolines)
*(.trampolines*)
__trampolines_end = . ;
/* avr-libc expects these data to reside in lower 64K. */
*libprintf_flt.a:*(.progmem.data)
*libc.a:*(.progmem.data)
*(.progmem*)
. = ALIGN(2);
/* For future tablejump instruction arrays for 3 byte pc devices.
We don't relax jump/call instructions within these sections. */
*(.jumptables)
*(.jumptables*)
/* For code that needs to reside in the lower 128k progmem. */
*(.lowtext)
*(.lowtext*)
__ctors_start = . ;
*(.ctors)
__ctors_end = . ;
__dtors_start = . ;
*(.dtors)
__dtors_end = . ;
KEEP(SORT(*)(.ctors))
KEEP(SORT(*)(.dtors))
/* From this point on, we don't bother about wether the insns are
below or above the 16 bits boundary. */
*(.init0) /* Start here after reset. */
KEEP (*(.init0))
*(.init1)
KEEP (*(.init1))
*(.init2) /* Clear __zero_reg__, set up stack pointer. */
KEEP (*(.init2))
*(.init3)
KEEP (*(.init3))
*(.init4) /* Initialize data and BSS. */
KEEP (*(.init4))
*(.init5)
KEEP (*(.init5))
*(.init6) /* C++ constructors. */
KEEP (*(.init6))
*(.init7)
KEEP (*(.init7))
*(.init8)
KEEP (*(.init8))
*(.init9) /* Call main(). */
KEEP (*(.init9))
*(.text)
. = ALIGN(2);
*(.text.*)
. = ALIGN(2);
*(.fini9) /* _exit() starts here. */
KEEP (*(.fini9))
*(.fini8)
KEEP (*(.fini8))
*(.fini7)
KEEP (*(.fini7))
*(.fini6) /* C++ destructors. */
KEEP (*(.fini6))
*(.fini5)
KEEP (*(.fini5))
*(.fini4)
KEEP (*(.fini4))
*(.fini3)
KEEP (*(.fini3))
*(.fini2)
KEEP (*(.fini2))
*(.fini1)
KEEP (*(.fini1))
*(.fini0) /* Infinite loop after program termination. */
KEEP (*(.fini0))
_etext = . ;
} > text
.data :
{
PROVIDE (__data_start = .) ;
*(.data)
*(.data*)
*(.rodata) /* We need to include .rodata here if gcc is used */
*(.rodata*) /* with -fdata-sections. */
*(.gnu.linkonce.d*)
. = ALIGN(2);
_edata = . ;
PROVIDE (__data_end = .) ;
} > data AT> text
.bss ADDR(.data) + SIZEOF (.data) : AT (ADDR (.bss))
{
PROVIDE (__bss_start = .) ;
*(.bss)
*(.bss*)
*(COMMON)
PROVIDE (__bss_end = .) ;
} > data
__data_load_start = LOADADDR(.data);
__data_load_end = __data_load_start + SIZEOF(.data);
/* Global data not cleared after reset. */
.noinit ADDR(.bss) + SIZEOF (.bss) : AT (ADDR (.noinit))
{
PROVIDE (__noinit_start = .) ;
*(.noinit*)
PROVIDE (__noinit_end = .) ;
_end = . ;
PROVIDE (__heap_start = .) ;
} > data
.eeprom :
{
/* See .data above... */
KEEP(*(.eeprom*))
__eeprom_end = . ;
} > eeprom
.fuse :
{
KEEP(*(.fuse))
KEEP(*(.lfuse))
KEEP(*(.hfuse))
KEEP(*(.efuse))
} > fuse
.lock :
{
KEEP(*(.lock*))
} > lock
.signature :
{
KEEP(*(.signature*))
} > signature
.user_signatures :
{
KEEP(*(.user_signatures*))
} > user_signatures
/* Stabs debugging sections. */
.stab 0 : { *(.stab) }
.stabstr 0 : { *(.stabstr) }
.stab.excl 0 : { *(.stab.excl) }
.stab.exclstr 0 : { *(.stab.exclstr) }
.stab.index 0 : { *(.stab.index) }
.stab.indexstr 0 : { *(.stab.indexstr) }
.comment 0 : { *(.comment) }
.note.gnu.build-id : { *(.note.gnu.build-id) }
/* DWARF debug sections.
Symbols in the DWARF debugging sections are relative to the beginning
of the section so we begin them at 0. */
/* DWARF 1 */
.debug 0 : { *(.debug) }
.line 0 : { *(.line) }
/* GNU DWARF 1 extensions */
.debug_srcinfo 0 : { *(.debug_srcinfo) }
.debug_sfnames 0 : { *(.debug_sfnames) }
/* DWARF 1.1 and DWARF 2 */
.debug_aranges 0 : { *(.debug_aranges) }
.debug_pubnames 0 : { *(.debug_pubnames) }
/* DWARF 2 */
.debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
.debug_abbrev 0 : { *(.debug_abbrev) }
.debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end ) }
.debug_frame 0 : { *(.debug_frame) }
.debug_str 0 : { *(.debug_str) }
.debug_loc 0 : { *(.debug_loc) }
.debug_macinfo 0 : { *(.debug_macinfo) }
/* SGI/MIPS DWARF 2 extensions */
.debug_weaknames 0 : { *(.debug_weaknames) }
.debug_funcnames 0 : { *(.debug_funcnames) }
.debug_typenames 0 : { *(.debug_typenames) }
.debug_varnames 0 : { *(.debug_varnames) }
/* DWARF 3 */
.debug_pubtypes 0 : { *(.debug_pubtypes) }
.debug_ranges 0 : { *(.debug_ranges) }
/* DWARF Extension. */
.debug_macro 0 : { *(.debug_macro) }
}

View File

@ -2,6 +2,6 @@
MODULE = cpu
# add a list of subdirectories, that should also be build
DIRS = periph $(RIOTCPU)/atmega_common/
DIRS = $(RIOTCPU)/atmega_common/
include $(RIOTBASE)/Makefile.base

View File

@ -1,9 +1,6 @@
# tell the build system that the CPU depends on the atmega common files
USEMODULE += atmega_common
#include periph module
USEMODULE += periph
RAM_LEN = 32K
ROM_LEN = 256K

View File

@ -68,20 +68,11 @@ enum {
#define I2C_PIN_MASK (1 << PORTD1) | (1 << PORTD0)
/** @} */
/**
* @name GPIO pin not defined
* @{
*/
#ifndef GPIO_UNDEF
#define GPIO_UNDEF (0xFFFF)
#endif
/** @}*/
/**
* @name EEPROM configuration
* @{
*/
#define EEPROM_SIZE (8192U) /* 8kB */
#define EEPROM_SIZE (8192U) /* 8kB */
/** @} */
#ifdef __cplusplus

View File

@ -1 +0,0 @@
include $(RIOTMAKE)/periph.mk

View File

@ -170,7 +170,7 @@ ISR(BADISR_vect)
"STOP Execution.\n"));
}
#if defined (CPU_ATMEGA256RFR2)
#if defined(CPU_ATMEGA128RFA1) || defined (CPU_ATMEGA256RFR2)
ISR(BAT_LOW_vect, ISR_BLOCK)
{
__enter_isr();

View File

@ -114,7 +114,7 @@ int adc_sample(adc_t line, adc_res_t res)
#if defined(CPU_ATMEGA328P) || defined(CPU_ATMEGA1281) || defined(CPU_ATMEGA1284P) || defined(CPU_ATMEGA32U4)
ADMUX &= 0xf0;
ADMUX |= line;
#elif defined(CPU_ATMEGA2560) || defined(CPU_ATMEGA256RFR2)
#elif defined(CPU_ATMEGA2560) || defined(CPU_ATMEGA128RFA1) || defined(CPU_ATMEGA256RFR2)
if (line < 8) {
ADCSRB &= ~(1 << MUX5);
ADMUX &= 0xf0;

View File

@ -7,7 +7,7 @@
*/
/**
* @ingroup cpu_atmega256rfr2
* @ingroup cpu_atmega_common
* @{
*
* @file
@ -55,7 +55,7 @@ void cpuid_get(void *id)
signature_0, /* 0x1E Atmel manufacturer ID */
signature_1, /* 0xA8 Part Number high byte */
signature_2, /* 0x02 Part Number low byte */
MAN_ID_0, /* 0x1F Atmel JEDEC manufacturer ID */
MAN_ID_0, /* 0x1F Atmel JEDEC manufacturer ID */
PART_NUM, /* 0x94 PART_NUM Identification */
VERSION_NUM, /* 0x02 VERSION_NUM Identification */
/* last two bytes can be set to flash page 1. for differentiation of different boards */
@ -63,14 +63,5 @@ void cpuid_get(void *id)
usr_sign_1, /* user signature 1 */
};
#if defined(ENABLE_DEBUG)
DEBUG("CPUID: " );
for (uint8_t i=0; i<CPUID_LEN; i++)
{
DEBUG(" %02x ", addr[i] );
}
DEBUG("\n" );
#endif
memcpy( id , addr, CPUID_LEN);
memcpy(id, addr, CPUID_LEN);
}

View File

@ -62,7 +62,7 @@ void spi_init_pins(spi_t bus)
#if defined (CPU_ATMEGA1284P)
DDRB |= ((1 << DDB4) | (1 << DDB5) | (1 << DDB7));
#endif
#if defined (CPU_ATMEGA256RFR2)
#if defined(CPU_ATMEGA128RFA1) || defined(CPU_ATMEGA256RFR2)
/* Master: PB3 MISO set to out
* PB2 MOSI set to input by hardware
* PB1 SCK set to out

View File

@ -69,7 +69,7 @@ extern "C" {
#define CMD_R_RX_PL_WID 0x60
#define CMD_W_ACK_PAYLOAD 0xa8
#define CMD_W_TX_PAYLOAD_NOACK 0xb0
#define CMD_NOP 0xff
#define CMD_NOOP 0xff
#define REGISTER_MASK 0x1F
/** @} */

View File

@ -40,7 +40,7 @@ int nrf24l01p_read_reg(const nrf24l01p_t *dev, char reg, char *answer)
spi_acquire(dev->spi, dev->cs, SPI_MODE, SPI_CLK);
*answer = (char)spi_transfer_reg(dev->spi, dev->cs,
(CMD_R_REGISTER | (REGISTER_MASK & reg)),
CMD_NOP);
CMD_NOOP);
/* Release the bus for other threads. */
spi_release(dev->spi);
@ -581,7 +581,7 @@ int nrf24l01p_get_status(const nrf24l01p_t *dev)
/* Acquire exclusive access to the bus. */
spi_acquire(dev->spi, dev->cs, SPI_MODE, SPI_CLK);
status = spi_transfer_byte(dev->spi, dev->cs, false, CMD_NOP);
status = spi_transfer_byte(dev->spi, dev->cs, false, CMD_NOOP);
/* Release the bus for other threads. */
spi_release(dev->spi);

View File

@ -11,6 +11,7 @@ BOARD_INSUFFICIENT_MEMORY := \
i-nucleo-lrwan1 \
mega-xplained \
microbit \
microduino-corerf \
msb-430 \
msb-430h \
nrf51dk \

View File

@ -9,6 +9,7 @@ BOARD_INSUFFICIENT_MEMORY := \
hifive1b \
i-nucleo-lrwan1 \
mega-xplained \
microduino-corerf \
msb-430 \
msb-430h \
nucleo-f030r8 \

View File

@ -9,6 +9,7 @@ BOARD_INSUFFICIENT_MEMORY := \
hifive1b \
i-nucleo-lrwan1 \
mega-xplained \
microduino-corerf \
msb-430 \
msb-430h \
nucleo-f030r8 \

View File

@ -10,7 +10,7 @@ RIOTBASE ?= $(CURDIR)/../..
# TinyDTLS only has support for 32-bit architectures ATM
BOARD_BLACKLIST := arduino-duemilanove arduino-leonardo \
arduino-mega2560 arduino-nano \
arduino-uno chronos mega-xplained \
arduino-uno chronos mega-xplained microduino-corerf \
msb-430 msb-430h telosb waspmote-pro wsn430-v1_3b \
wsn430-v1_4 z1

View File

@ -9,6 +9,7 @@ BOARD_INSUFFICIENT_MEMORY := \
hifive1b \
i-nucleo-lrwan1 \
mega-xplained \
microduino-corerf \
msb-430 \
msb-430h \
nucleo-f030r8 \

View File

@ -7,6 +7,7 @@ BOARD_INSUFFICIENT_MEMORY := \
chronos \
i-nucleo-lrwan1 \
mega-xplained \
microduino-corerf \
msb-430 \
msb-430h \
nucleo-f030r8 \

View File

@ -19,6 +19,7 @@ BOARD_INSUFFICIENT_MEMORY := \
lsn50 \
maple-mini \
mega-xplained \
microduino-corerf \
microbit \
msb-430 \
msb-430h \

View File

@ -13,6 +13,7 @@ BOARD_INSUFFICIENT_MEMORY := \
i-nucleo-lrwan1 \
mega-xplained \
microbit \
microduino-corerf \
msb-430 \
msb-430h \
nucleo-f030r8 \

View File

@ -14,6 +14,7 @@ BOARD_INSUFFICIENT_MEMORY := \
hifive1b \
i-nucleo-lrwan1 \
mega-xplained \
microduino-corerf \
microbit \
msb-430 \
msb-430h \

View File

@ -11,7 +11,7 @@ BOARD_BLACKLIST := arduino-duemilanove arduino-leonardo arduino-mega2560 \
arduino-nano arduino-uno chronos \
msb-430 msb-430h telosb waspmote-pro wsn430-v1_3b \
wsn430-v1_4 z1 pic32-wifire pic32-clicker \
mega-xplained
mega-xplained microduino-corerf
# Comment this out to disable code in RIOT that does safety checking
# which is not needed in a production environment but helps in the

View File

@ -8,7 +8,7 @@ RIOTBASE ?= $(CURDIR)/../..
BOARD_BLACKLIST := arduino-duemilanove arduino-leonardo \
arduino-mega2560 arduino-nano arduino-uno \
chronos hifive1 hifive1b mega-xplained \
chronos hifive1 hifive1b mega-xplained microduino-corerf \
msb-430 msb-430h pic32-clicker pic32-wifire telosb \
waspmote-pro wsn430-v1_3b wsn430-v1_4 z1

View File

@ -9,7 +9,7 @@ RIOTBASE ?= $(CURDIR)/../..
BOARD_BLACKLIST := arduino-duemilanove arduino-leonardo \
arduino-mega2560 arduino-nano \
arduino-uno chronos hifive1 hifive1b \
mega-xplained msb-430 msb-430h pic32-clicker \
mega-xplained microduino-corerf msb-430 msb-430h pic32-clicker \
pic32-wifire telosb waspmote-pro wsn430-v1_3b wsn430-v1_4 z1
# Comment this out to disable code in RIOT that does safety checking

View File

@ -7,6 +7,7 @@ BOARD_INSUFFICIENT_MEMORY := \
chronos \
i-nucleo-lrwan1 \
mega-xplained \
microduino-corerf \
msb-430 \
msb-430h \
nucleo-f030r8 \

View File

@ -8,6 +8,7 @@ BOARD_INSUFFICIENT_MEMORY := \
chronos \
i-nucleo-lrwan1 \
mega-xplained \
microduino-corerf \
msb-430 \
msb-430h \
nrf51dk \

View File

@ -17,12 +17,6 @@ USEMODULE += atmega_common
# export the peripheral drivers to be linked into the final binary
USEMODULE += atmega_common_periph
# Export the peripheral drivers to be linked into the final binary, for now
# only atmega126rfr2 has periph drivers
ifeq ($(CPU), atmega256rfr2)
USEMODULE += periph
endif
# the atmel port uses stdio_uart
USEMODULE += stdio_uart

View File

@ -1,5 +1,6 @@
BOARD_INSUFFICIENT_MEMORY := \
arduino-mega2560 \
mega-xplained \
microduino-corerf \
waspmote-pro \
#

View File

@ -8,6 +8,7 @@ BOARD_INSUFFICIENT_MEMORY := \
bluepill \
i-nucleo-lrwan1 \
mega-xplained \
microduino-corerf \
nucleo-f031k6 \
nucleo-f042k6 \
nucleo-f072rb \

View File

@ -6,6 +6,7 @@ BOARD_INSUFFICIENT_MEMORY := \
arduino-uno \
i-nucleo-lrwan1 \
mega-xplained \
microduino-corerf \
msb-430 \
msb-430h \
nucleo-f031k6 \

View File

@ -32,7 +32,7 @@
#include "xtimer.h"
#include "hih6130.h"
#define SLEEP (100 * 1000U)
#define SLEEP_USEC (100 * 1000U)
int main(void)
{
@ -52,7 +52,7 @@ int main(void)
float integral = 0.f;
float fractional;
xtimer_usleep(SLEEP);
xtimer_usleep(SLEEP_USEC);
status = hih6130_get_humidity_temperature_float(&dev, &hum, &temp);
if (status < 0) {

View File

@ -0,0 +1,6 @@
BOARD_INSUFFICIENT_MEMORY := \
arduino-duemilanove \
arduino-leonardo \
arduino-nano \
arduino-uno \
#

View File

@ -8,6 +8,7 @@ BOARD_INSUFFICIENT_MEMORY := \
hifive1b \
i-nucleo-lrwan1 \
mega-xplained \
microduino-corerf \
msb-430 \
msb-430h \
nucleo-f030r8 \

View File

@ -8,6 +8,7 @@ BOARD_INSUFFICIENT_MEMORY := \
hifive1b \
i-nucleo-lrwan1 \
mega-xplained \
microduino-corerf \
msb-430 \
msb-430h \
nucleo-f030r8 \

View File

@ -21,6 +21,7 @@ BOARD_INSUFFICIENT_MEMORY := \
maple-mini \
mega-xplained \
microbit \
microduino-corerf \
msb-430 \
msb-430h \
nrf51dk \

View File

@ -8,6 +8,7 @@ BOARD_INSUFFICIENT_MEMORY := \
hifive1b \
i-nucleo-lrwan1 \
mega-xplained \
microduino-corerf \
msb-430 \
msb-430h \
nucleo-f030r8 \

View File

@ -9,6 +9,7 @@ BOARD_INSUFFICIENT_MEMORY := \
hifive1b \
i-nucleo-lrwan1 \
mega-xplained \
microduino-corerf \
msb-430 \
msb-430h \
nucleo-f030r8 \

View File

@ -8,6 +8,7 @@ BOARD_INSUFFICIENT_MEMORY := \
hifive1b \
i-nucleo-lrwan1 \
mega-xplained \
microduino-corerf \
msb-430 \
msb-430h \
nucleo-f030r8 \

View File

@ -12,6 +12,7 @@ BOARD_INSUFFICIENT_MEMORY := \
i-nucleo-lrwan1 \
mega-xplained \
microbit \
microduino-corerf \
msb-430 \
msb-430h \
nrf51dongle \

View File

@ -2,7 +2,7 @@ include ../Makefile.tests_common
BOARD_BLACKLIST := arduino-duemilanove arduino-leonardo \
arduino-mega2560 arduino-nano \
arduino-uno mega-xplained waspmote-pro
arduino-uno mega-xplained microduino-corerf waspmote-pro
# arduino-mega2560: builds locally but breaks travis (possibly because of
# differences in the toolchain)
# The MSP boards don't feature round(), exp(), and log(), which are used in the unittests

View File

@ -7,6 +7,7 @@ BOARD_INSUFFICIENT_MEMORY := \
chronos \
i-nucleo-lrwan1 \
mega-xplained \
microduino-corerf \
msb-430 \
msb-430h \
nucleo-f030r8 \

View File

@ -2,7 +2,7 @@ include ../Makefile.tests_common
BOARD_BLACKLIST := arduino-duemilanove arduino-leonardo \
arduino-mega2560 arduino-nano \
arduino-uno chronos mega-xplained \
arduino-uno chronos mega-xplained microduino-corerf \
msb-430 msb-430h telosb waspmote-pro \
wsn430-v1_3b wsn430-v1_4 z1

View File

@ -3,7 +3,7 @@ include ../Makefile.tests_common
# No 8 bit and 16 bit support
BOARD_BLACKLIST := arduino-duemilanove arduino-leonardo \
arduino-mega2560 arduino-nano \
arduino-uno chronos mega-xplained \
arduino-uno chronos mega-xplained microduino-corerf \
msb-430 msb-430h telosb waspmote-pro wsn430-v1_3b \
wsn430-v1_4 z1

View File

@ -7,6 +7,7 @@ BOARD_BLACKLIST := arduino-duemilanove \
arduino-uno \
chronos \
mega-xplained \
microduino-corerf \
msb-430 \
msb-430h \
telosb \

View File

@ -2,7 +2,7 @@ include ../Makefile.tests_common
BOARD_BLACKLIST := arduino-duemilanove arduino-leonardo \
arduino-mega2560 arduino-nano \
arduino-uno chronos mega-xplained \
arduino-uno chronos mega-xplained microduino-corerf \
msb-430 msb-430h telosb waspmote-pro wsn430-v1_3b \
wsn430-v1_4 z1

View File

@ -5,6 +5,7 @@ BOARD_INSUFFICIENT_MEMORY := \
arduino-uno \
chronos \
mega-xplained \
microduino-corerf \
msb-430 \
msb-430h \
nucleo-f031k6 \

View File

@ -3,7 +3,7 @@ include ../Makefile.tests_common
# msp430 and avr have problems with int width and libcoaps usage of :x notation in structs
BOARD_BLACKLIST := arduino-duemilanove arduino-leonardo \
arduino-mega2560 arduino-nano \
arduino-uno chronos mega-xplained msb-430 \
arduino-uno chronos mega-xplained microduino-corerf msb-430 \
msb-430h telosb waspmote-pro wsn430-v1_3b wsn430-v1_4 z1
USEMODULE += gnrc_ipv6

View File

@ -3,7 +3,7 @@ include ../Makefile.tests_common
# HACL* only compiles on 32bit platforms
BOARD_BLACKLIST := arduino-duemilanove arduino-leonardo \
arduino-mega2560 arduino-nano \
arduino-uno chronos mega-xplained \
arduino-uno chronos mega-xplained microduino-corerf \
msb-430 msb-430h telosb waspmote-pro wsn430-v1_3b \
wsn430-v1_4 z1

View File

@ -4,7 +4,7 @@ include ../Makefile.tests_common
# MSP430 boards: invalid alignment of 'hydro_random_context'
BOARD_BLACKLIST := arduino-duemilanove arduino-leonardo \
arduino-mega2560 arduino-uno \
mega-xplained waspmote-pro \
mega-xplained microduino-corerf waspmote-pro \
chronos msb-430 msb-430h telosb wsn430-v1_3b wsn430-v1_4 z1
USEPKG += libhydrogen

View File

@ -3,7 +3,7 @@ include ../Makefile.tests_common
# No 8 bit and 16 bit support
BOARD_BLACKLIST := arduino-duemilanove arduino-leonardo \
arduino-mega2560 arduino-nano \
arduino-uno chronos mega-xplained \
arduino-uno chronos mega-xplained microduino-corerf \
msb-430 msb-430h telosb waspmote-pro wsn430-v1_3b \
wsn430-v1_4 z1

View File

@ -11,6 +11,7 @@ BOARD_BLACKLIST := arduino-duemilanove \
hifive1 \
hifive1b \
mega-xplained \
microduino-corerf \
msb-430 \
msb-430h \
msbiot \

View File

@ -5,7 +5,7 @@ BOARD_BLACKLIST := arduino-duemilanove arduino-leonardo \
arduino-mega2560 arduino-nano \
arduino-uno chronos esp32-mh-et-live-minikit \
esp32-olimex-evb esp32-wemos-lolin-d32-pro \
esp32-wroom-32 esp32-wrover-kit \
esp32-wroom-32 esp32-wrover-kit microduino-corerf \
mega-xplained msb-430 msb-430h telosb waspmote-pro \
wsn430-v1_3b wsn430-v1_4 z1 \

View File

@ -5,6 +5,7 @@ BOARD_INSUFFICIENT_MEMORY := \
arduino-nano \
arduino-uno \
mega-xplained \
microduino-corerf \
nucleo-f031k6 \
nucleo-f042k6 \
#

View File

@ -15,6 +15,7 @@ BOARD_BLACKLIST := \
hifive1 \
hifive1b \
mega-xplained \
microduino-corerf \
msb-430 \
msb-430h \
pic32-clicker \

View File

@ -7,7 +7,7 @@ BOARD ?= native
BOARD_BLACKLIST := arduino-duemilanove arduino-leonardo \
arduino-mega2560 arduino-nano \
arduino-uno chronos esp8266-esp-12x esp8266-olimex-mod \
esp8266-sparkfun-thing mega-xplained \
esp8266-sparkfun-thing mega-xplained microduino-corerf \
msb-430 msb-430h telosb waspmote-pro \
wsn430-v1_3b wsn430-v1_4 z1

View File

@ -7,7 +7,7 @@ BOARD ?= native
BOARD_BLACKLIST := arduino-duemilanove arduino-leonardo \
arduino-mega2560 arduino-nano \
arduino-uno chronos esp8266-esp-12x esp8266-olimex-mod \
esp8266-sparkfun-thing mega-xplained \
esp8266-sparkfun-thing mega-xplained microduino-corerf \
msb-430 msb-430h telosb waspmote-pro \
wsn430-v1_3b wsn430-v1_4 z1

View File

@ -8,6 +8,7 @@ BOARD_INSUFFICIENT_MEMORY := \
hifive1b \
i-nucleo-lrwan1 \
mega-xplained \
microduino-corerf \
nucleo-f031k6 \
stm32l0538-disco \
waspmote-pro \

View File

@ -8,6 +8,7 @@ BOARD_BLACKLIST += arduino-nano
BOARD_BLACKLIST += arduino-uno
BOARD_BLACKLIST += chronos
BOARD_BLACKLIST += mega-xplained
BOARD_BLACKLIST += microduino-corerf
BOARD_BLACKLIST += msb-430
BOARD_BLACKLIST += msb-430h
BOARD_BLACKLIST += telosb

View File

@ -35,6 +35,7 @@ BOARD_INSUFFICIENT_MEMORY := \
maple-mini \
mega-xplained \
microbit \
microduino-corerf \
msb-430 \
msb-430h \
nrf51dk \