1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2025-12-15 09:33:50 +01:00

cpu/samd21: add support for SAMD20

This commit is contained in:
Benjamin Valentin 2020-06-17 16:38:52 +02:00
parent 7b65398ae1
commit 31b8dad147
7 changed files with 43 additions and 8 deletions

View File

@ -1,7 +1,12 @@
CPU_FAM := $(shell echo $(CPU_MODEL) | cut -c -6)
FEATURES_PROVIDED += periph_cpuid
FEATURES_PROVIDED += periph_dma
CPU_MODELS_WITHOUT_DMA = samd20%
ifeq (,$(filter $(CPU_MODELS_WITHOUT_DMA),$(CPU_MODEL)))
FEATURES_PROVIDED += periph_dma
endif
FEATURES_PROVIDED += periph_flashpage
FEATURES_PROVIDED += periph_flashpage_pagewise
FEATURES_PROVIDED += periph_flashpage_rwee

View File

@ -5,7 +5,7 @@ CFLAGS += -DCPU_FAM_$(call uppercase_and_underscore,$(CPU_FAM))
CFLAGS += -D__$(call uppercase_and_underscore,$(CPU_MODEL))__
# Compute CPU_LINE
LINE := $(shell echo $(CPU_MODEL) | sed -E -e 's/^sam([a-z][0-9][0-9])(.)([0-9][0-9])(.)/\1 \2 \3 \4/')
LINE := $(shell echo $(CPU_MODEL) | sed -E -e 's/^sam([a-z][0-9][0-9])(.)([0-9][0-9])(.)*/\1 \2 \3 \4/')
FAMILY := $(word 1, $(LINE))
TYPE1 := $(word 2, $(LINE))
MEMORY := $(word 3, $(LINE))
@ -16,7 +16,7 @@ ROM_LEN := $(shell echo $$((1 << $(MEMORY))))
# get vendor file to extract RAM length
VENDOR_FILE := $(shell find $(RIOTCPU)/sam0_common/include/vendor/sam$(FAMILY) -name $(CPU_MODEL).h | grep include.*/sam)
RAM_LEN := $(shell sed -E -n 's/\#define (HMCRAMC0_SIZE|HSRAM_SIZE).*(0x[[:xdigit:]]*).*/\2/p' $(VENDOR_FILE))
RAM_LEN := $(shell sed -E -n 's/\#define (HRAMC0_SIZE|HMCRAMC0_SIZE|HSRAM_SIZE).*(0x[[:xdigit:]]*).*/\2/p' $(VENDOR_FILE))
ROM_START_ADDR ?= 0x00000000
RAM_START_ADDR ?= 0x20000000

View File

@ -31,6 +31,10 @@
#if defined(CPU_SAMD10)
#include "vendor/samd10/include/samd10.h"
#elif defined(CPU_SAMD20)
#include "vendor/samd20/include/samd20.h"
#elif defined(CPU_SAMD20B)
#include "vendor/samd20/include_b/samd20.h"
#elif defined(CPU_SAMD21A)
#include "vendor/samd21/include_a/samd21.h"
#elif defined(CPU_SAMD21B)

View File

@ -849,6 +849,7 @@ typedef struct {
*/
#define WDT_HAS_INIT (1)
#if defined(REV_DMAC) || DOXYGEN
/**
* @name sam0 DMA peripheral
* @{
@ -1117,6 +1118,7 @@ void dma_wait(dma_t dma);
*/
void dma_cancel(dma_t dma);
/** @} */
#endif /* REV_DMAC || DOXYGEN */
/**
* @name sam0 RTC Tamper Detection

View File

@ -1,6 +1,11 @@
ifneq (,$(filter samd10%,$(CPU_MODEL)))
CFLAGS += -DCPU_SAMD10
endif
ifneq (,$(filter samd20%b,$(CPU_MODEL)))
CFLAGS += -DCPU_SAMD20B
else ifneq (,$(filter samd20%,$(CPU_MODEL)))
CFLAGS += -DCPU_SAMD20
endif
ifneq (,$(filter samd21%a,$(CPU_MODEL)))
CFLAGS += -DCPU_SAMD21A
endif

View File

@ -68,6 +68,10 @@
#define GCLK_GENCTRL_SRC_FDPLL (GCLK_GENCTRL_SRC_FDPLL_Val << GCLK_GENCTRL_SRC_Pos)
#endif
#ifndef GCLK_CLKCTRL_ID_DFLL48
#define GCLK_CLKCTRL_ID_DFLL48 GCLK_CLKCTRL_ID_DFLL48M
#endif
void sam0_gclk_enable(uint8_t id)
{
(void) id;

View File

@ -49,6 +49,9 @@ WEAK_DEFAULT void isr_tcc0(void);
WEAK_DEFAULT void isr_tcc1(void);
WEAK_DEFAULT void isr_tcc2(void);
WEAK_DEFAULT void isr_tcc3(void);
WEAK_DEFAULT void isr_tc0(void);
WEAK_DEFAULT void isr_tc1(void);
WEAK_DEFAULT void isr_tc2(void);
WEAK_DEFAULT void isr_tc3(void);
WEAK_DEFAULT void isr_tc4(void);
WEAK_DEFAULT void isr_tc5(void);
@ -82,14 +85,26 @@ ISR_VECTOR(1) const isr_t vector_cpu[CPU_IRQ_NUMOF] = {
isr_sercom3, /* 12 Serial Communication Interface 3 */
isr_sercom4, /* 13 Serial Communication Interface 4 */
isr_sercom5, /* 14 Serial Communication Interface 5 */
#ifdef TCC0
isr_tcc0, /* 15 Timer Counter Control 0 */
#else
isr_tc0, /* 15 Basic Timer Counter 0 */
#endif
#ifdef TCC1
isr_tcc1, /* 16 Timer Counter Control 1 */
#else
isr_tc1, /* 16 Basic Timer Counter 1 */
#endif
#ifdef TCC2
isr_tcc2, /* 17 Timer Counter Control 2 */
isr_tc3, /* 18 Basic Timer Counter 0 */
isr_tc4, /* 19 Basic Timer Counter 1 */
isr_tc5, /* 20 Basic Timer Counter 2 */
isr_tc6, /* 21 Basic Timer Counter 3 */
isr_tc7, /* 22 Basic Timer Counter 4 */
#else
isr_tc2, /* 17 Basic Timer Counter 2 */
#endif
isr_tc3, /* 18 Basic Timer Counter 3 */
isr_tc4, /* 19 Basic Timer Counter 4 */
isr_tc5, /* 20 Basic Timer Counter 5 */
isr_tc6, /* 21 Basic Timer Counter 6 */
isr_tc7, /* 22 Basic Timer Counter 7 */
isr_adc, /* 23 Analog Digital Converter */
isr_ac, /* 24 Analog Comparators */
isr_dac, /* 25 Digital Analog Converter */