28 #include "periph_cpu.h"
75 #define CLOCK_USE_PLL (1)
80 #define CLOCK_USE_XOSC32_DFLL (0)
88 #define GEN2_ULP32K (0)
95 #define CLOCK_PLL_MUL (47U)
100 #define CLOCK_PLL_DIV (1U)
105 #define CLOCK_CORECLOCK (((CLOCK_PLL_MUL + 1) * 1000000U) / CLOCK_PLL_DIV)
106 #elif CLOCK_USE_XOSC32_DFLL
111 #define CLOCK_CORECLOCK (48000000U)
116 #define CLOCK_XOSC32K (32768UL)
117 #define CLOCK_8MHZ (1)
123 #define CLOCK_DIV (1U)
124 #define CLOCK_CORECLOCK (8000000 / CLOCK_DIV)
135 .pm_mask = PM_APBCMASK_TC3,
136 .gclk_ctrl = GCLK_CLKCTRL_ID_TCC2_TC3,
137 #if CLOCK_USE_PLL || CLOCK_USE_XOSC32_DFLL
138 .gclk_src = SAM0_GCLK_1MHZ,
140 .gclk_src = SAM0_GCLK_MAIN,
142 .flags = TC_CTRLA_MODE_COUNT16,
147 .pm_mask = PM_APBCMASK_TC4 | PM_APBCMASK_TC5,
148 .gclk_ctrl = GCLK_CLKCTRL_ID_TC4_TC5,
149 #if CLOCK_USE_PLL || CLOCK_USE_XOSC32_DFLL
150 .gclk_src = SAM0_GCLK_1MHZ,
152 .gclk_src = SAM0_GCLK_MAIN,
154 .flags = TC_CTRLA_MODE_COUNT32,
162 #define TIMER_0_MAX_VALUE 0xffff
163 #define TIMER_0_ISR isr_tc3
164 #define TIMER_1_ISR isr_tc4
165 #define TIMER_NUMOF ARRAY_SIZE(timer_config)
173 .dev = &SERCOM0->USART,
174 .rx_pin = GPIO_PIN(PA, 5),
175 .tx_pin = GPIO_PIN(PA, 4),
176 #ifdef MODULE_PERIPH_UART_HW_FC
177 .rts_pin = GPIO_PIN(PA, 6),
178 .cts_pin = GPIO_PIN(PA, 7),
181 .rx_pad = UART_PAD_RX_1,
182 #ifdef MODULE_PERIPH_UART_HW_FC
183 .tx_pad = UART_PAD_TX_0_RTS_2_CTS_3,
185 .tx_pad = UART_PAD_TX_0,
187 .flags = UART_FLAG_NONE,
188 .gclk_src = SAM0_GCLK_MAIN,
191 .dev = &SERCOM5->USART,
192 .rx_pin = GPIO_PIN(PA, 23),
193 .tx_pin = GPIO_PIN(PA, 22),
194 #ifdef MODULE_PERIPH_UART_HW_FC
195 .rts_pin = GPIO_PIN(PB, 22),
196 .cts_pin = GPIO_PIN(PB, 23),
199 .rx_pad = UART_PAD_RX_1,
200 #ifdef MODULE_PERIPH_UART_HW_FC
201 .tx_pad = UART_PAD_TX_0_RTS_2_CTS_3,
203 .tx_pad = UART_PAD_TX_0,
205 .flags = UART_FLAG_NONE,
206 .gclk_src = SAM0_GCLK_MAIN,
213 #define UART_0_ISR isr_sercom0
214 #define UART_1_ISR isr_sercom5
215 #define UART_NUMOF ARRAY_SIZE(uart_config)
238 {GPIO_PIN(PA, 6), GPIO_MUX_E, 0},
239 {GPIO_PIN(PA, 7), GPIO_MUX_E, 1},
256 {GPIO_PIN(PA, 16), GPIO_MUX_F, 0},
257 {GPIO_PIN(PA, 18), GPIO_MUX_F, 2},
258 {GPIO_PIN(PA, 19), GPIO_MUX_F, 3},
278 #define PWM_NUMOF ARRAY_SIZE(pwm_config)
286 .dev = &SERCOM4->SPI,
287 .miso_pin = GPIO_PIN(PC, 19),
288 .mosi_pin = GPIO_PIN(PB, 30),
289 .clk_pin = GPIO_PIN(PC, 18),
290 .miso_mux = GPIO_MUX_F,
291 .mosi_mux = GPIO_MUX_F,
292 .clk_mux = GPIO_MUX_F,
293 .miso_pad = SPI_PAD_MISO_0,
294 .mosi_pad = SPI_PAD_MOSI_2_SCK_3,
295 .gclk_src = SAM0_GCLK_MAIN,
296 #ifdef MODULE_PERIPH_DMA
297 .tx_trigger = SERCOM4_DMAC_ID_TX,
298 .rx_trigger = SERCOM4_DMAC_ID_RX,
302 .dev = &SERCOM5->SPI,
303 .miso_pin = GPIO_PIN(PB, 2),
304 .mosi_pin = GPIO_PIN(PB, 22),
305 .clk_pin = GPIO_PIN(PB, 23),
306 .miso_mux = GPIO_MUX_D,
307 .mosi_mux = GPIO_MUX_D,
308 .clk_mux = GPIO_MUX_D,
309 .miso_pad = SPI_PAD_MISO_0,
310 .mosi_pad = SPI_PAD_MOSI_2_SCK_3,
311 .gclk_src = SAM0_GCLK_MAIN,
312 #ifdef MODULE_PERIPH_DMA
313 .tx_trigger = SERCOM5_DMAC_ID_TX,
314 .rx_trigger = SERCOM5_DMAC_ID_RX,
323 #define SPI_NUMOF ARRAY_SIZE(spi_config)
333 static const i2c_conf_t
i2c_config[] = {{.dev = &(SERCOM3->I2CM),
334 .speed = I2C_SPEED_NORMAL,
335 .scl_pin = GPIO_PIN(PA, 17),
336 .sda_pin = GPIO_PIN(PA, 16),
338 .gclk_src = SAM0_GCLK_MAIN,
339 .flags = I2C_FLAG_NONE}};
345 #define I2C_NUMOF ARRAY_SIZE(i2c_config)
352 #ifndef RTT_FREQUENCY
358 #define RTT_FREQUENCY (32768U)
360 #define RTT_MIN_OFFSET (10U)
367 #define ADC_PRESCALER ADC_CTRLB_PRESCALER_DIV512
368 #define ADC_NEG_INPUT ADC_INPUTCTRL_MUXNEG_GND
369 #define ADC_GAIN_FACTOR_DEFAULT ADC_INPUTCTRL_GAIN_1X
370 #define ADC_REF_DEFAULT ADC_REFCTRL_REFSEL_INT1V
373 #ifdef CONFIG_ADC_VREF_DEFAULT
374 #undef ADC_REF_DEFAULT
375 #define ADC_REF_DEFAULT ADC_REFCTRL_REFSEL_INT1V
377 #ifdef CONFIG_ADC_VREF_INTVCC0
378 #undef ADC_REF_DEFAULT
379 #define ADC_REF_DEFAULT ADC_REFCTRL_REFSEL_INTVCC0
381 #ifdef CONFIG_ADC_VREF_INTVCC1
382 #undef ADC_REF_DEFAULT
383 #define ADC_REF_DEFAULT ADC_REFCTRL_REFSEL_INTVCC1
385 #ifdef CONFIG_ADC_VREF_EXT1
386 #undef ADC_REF_DEFAULT
387 #define ADC_REF_DEFAULT ADC_REFCTRL_REFSEL_AREFA
389 #ifdef CONFIG_ADC_VREF_EXT1
390 #undef ADC_REF_DEFAULT
391 #define ADC_REF_DEFAULT ADC_REFCTRL_REFSEL_AREFB
398 {GPIO_PIN(PA, 6), ADC_INPUTCTRL_MUXPOS_PIN6},
399 {GPIO_PIN(PA, 7), ADC_INPUTCTRL_MUXPOS_PIN7},
406 #define ADC_NUMOF ARRAY_SIZE(adc_channels)
413 .dm = GPIO_PIN(PA, 24),
414 .dp = GPIO_PIN(PA, 25),
416 .device = &USB->DEVICE,
417 .gclk_src = SAM0_GCLK_MAIN,
static const uart_conf_t uart_config[]
UART config.
static const adc_conf_chan_t adc_channels[]
ADC configuration.
static const pwm_conf_t pwm_config[]
PWM device configuration.
static const sam0_common_usb_config_t sam_usbdev_config[]
USB peripheral configuration.
static const pwm_conf_chan_t pwm_chan1_config[]
IF PWM_1 is enabled then the following values are configured:
static const spi_conf_t spi_config[]
SPI config.
static const tc32_conf_t timer_config[]
Timer peripheral configuration.
static const i2c_conf_t i2c_config[]
I2C devices configuration.
static const pwm_conf_chan_t pwm_chan0_config[]
IF PWM_0 is enabled then the following values are configured: