mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2024-12-29 04:50:03 +01:00
d37adee32d
There is no hardware limitation for custom boards based on STM32 to uses SPI bus with signals coming from different PORT and alternate functions. This patch allow alternate's function definition per pin basis, thus enable the support of SPI bus signals routed on differents PORT. Signed-off-by: Yannick Gicquel <ygicquel@gmail.com>
230 lines
5.6 KiB
C
230 lines
5.6 KiB
C
/*
|
|
* Copyright (C) 2016 Inria
|
|
* Copyright (C) 2017 OTA keys S.A.
|
|
*
|
|
* 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_nucleo-f413zh
|
|
* @{
|
|
*
|
|
* @file
|
|
* @name Peripheral MCU configuration for the nucleo-f413zh board
|
|
*
|
|
* @author Alexandre Abadie <alexandre.abadie@inria.fr>
|
|
* @author Vincent Dupont <vincent@otakeys.com>
|
|
*/
|
|
|
|
#ifndef PERIPH_CONF_H
|
|
#define PERIPH_CONF_H
|
|
|
|
#include "periph_cpu.h"
|
|
#include "f4/cfg_clock_100_8_1.h"
|
|
#include "cfg_i2c1_pb8_pb9.h"
|
|
#include "cfg_timer_tim5.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/**
|
|
* @name DMA streams configuration
|
|
* @{
|
|
*/
|
|
#ifdef MODULE_PERIPH_DMA
|
|
static const dma_conf_t dma_config[] = {
|
|
{ .stream = 4 },
|
|
{ .stream = 14 },
|
|
{ .stream = 6 },
|
|
{ .stream = 10 },
|
|
{ .stream = 8 },
|
|
};
|
|
|
|
#define DMA_0_ISR isr_dma1_stream4
|
|
#define DMA_1_ISR isr_dma2_stream6
|
|
#define DMA_2_ISR isr_dma1_stream6
|
|
#define DMA_3_ISR isr_dma2_stream2
|
|
#define DMA_4_ISR isr_dma2_stream0
|
|
|
|
#define DMA_NUMOF ARRAY_SIZE(dma_config)
|
|
#endif
|
|
/** @} */
|
|
|
|
/**
|
|
* @name UART configuration
|
|
* @{
|
|
*/
|
|
static const uart_conf_t uart_config[] = {
|
|
{
|
|
.dev = USART3,
|
|
.rcc_mask = RCC_APB1ENR_USART3EN,
|
|
.rx_pin = GPIO_PIN(PORT_D, 9),
|
|
.tx_pin = GPIO_PIN(PORT_D, 8),
|
|
.rx_af = GPIO_AF7,
|
|
.tx_af = GPIO_AF7,
|
|
.bus = APB1,
|
|
.irqn = USART3_IRQn,
|
|
#ifdef MODULE_PERIPH_DMA
|
|
.dma = 0,
|
|
.dma_chan = 7,
|
|
#endif
|
|
},
|
|
{
|
|
.dev = USART6,
|
|
.rcc_mask = RCC_APB2ENR_USART6EN,
|
|
.rx_pin = GPIO_PIN(PORT_G, 9),
|
|
.tx_pin = GPIO_PIN(PORT_G, 14),
|
|
.rx_af = GPIO_AF8,
|
|
.tx_af = GPIO_AF8,
|
|
.bus = APB2,
|
|
.irqn = USART6_IRQn,
|
|
#ifdef MODULE_PERIPH_DMA
|
|
.dma = 1,
|
|
.dma_chan = 5,
|
|
#endif
|
|
},
|
|
{
|
|
.dev = USART2,
|
|
.rcc_mask = RCC_APB1ENR_USART2EN,
|
|
.rx_pin = GPIO_PIN(PORT_D, 6),
|
|
.tx_pin = GPIO_PIN(PORT_D, 5),
|
|
.rx_af = GPIO_AF7,
|
|
.tx_af = GPIO_AF7,
|
|
.bus = APB1,
|
|
.irqn = USART2_IRQn,
|
|
#ifdef MODULE_PERIPH_DMA
|
|
.dma = 3,
|
|
.dma_chan = 4,
|
|
#endif
|
|
},
|
|
};
|
|
|
|
#define UART_0_ISR (isr_usart3)
|
|
#define UART_0_DMA_ISR (isr_dma1_stream6)
|
|
#define UART_1_ISR (isr_usart6)
|
|
#define UART_1_DMA_ISR (isr_dma1_stream5)
|
|
#define UART_2_ISR (isr_usart2)
|
|
#define UART_2_DMA_ISR (isr_dma1_stream4)
|
|
|
|
#define UART_NUMOF ARRAY_SIZE(uart_config)
|
|
/** @} */
|
|
|
|
/**
|
|
* @name PWM configuration
|
|
* @{
|
|
*/
|
|
static const pwm_conf_t pwm_config[] = {
|
|
{
|
|
.dev = TIM1,
|
|
.rcc_mask = RCC_APB2ENR_TIM1EN,
|
|
.chan = { { .pin = GPIO_PIN(PORT_E, 9) /* D6 */, .cc_chan = 0},
|
|
{ .pin = GPIO_PIN(PORT_E, 11) /* D5 */, .cc_chan = 1},
|
|
{ .pin = GPIO_PIN(PORT_E, 13) /* D3 */, .cc_chan = 2},
|
|
{ .pin = GPIO_UNDEF, .cc_chan = 0} },
|
|
.af = GPIO_AF1,
|
|
.bus = APB2
|
|
},
|
|
{
|
|
.dev = TIM4,
|
|
.rcc_mask = RCC_APB1ENR_TIM4EN,
|
|
.chan = { { .pin = GPIO_PIN(PORT_D, 15) /* D9 */, .cc_chan = 3},
|
|
{ .pin = GPIO_UNDEF, .cc_chan = 0},
|
|
{ .pin = GPIO_UNDEF, .cc_chan = 0},
|
|
{ .pin = GPIO_UNDEF, .cc_chan = 0} },
|
|
.af = GPIO_AF2,
|
|
.bus = APB1
|
|
},
|
|
};
|
|
|
|
#define PWM_NUMOF ARRAY_SIZE(pwm_config)
|
|
/** @} */
|
|
|
|
/**
|
|
* @name SPI configuration
|
|
*
|
|
* @note The spi_divtable is auto-generated from
|
|
* `cpu/stm32_common/dist/spi_divtable/spi_divtable.c`
|
|
* @{
|
|
*/
|
|
static const uint8_t spi_divtable[2][5] = {
|
|
{ /* for APB1 @ 50000000Hz */
|
|
7, /* -> 195312Hz */
|
|
6, /* -> 390625Hz */
|
|
5, /* -> 781250Hz */
|
|
2, /* -> 6250000Hz */
|
|
1 /* -> 12500000Hz */
|
|
},
|
|
{ /* for APB2 @ 100000000Hz */
|
|
7, /* -> 390625Hz */
|
|
7, /* -> 390625Hz */
|
|
6, /* -> 781250Hz */
|
|
3, /* -> 6250000Hz */
|
|
2 /* -> 12500000Hz */
|
|
}
|
|
};
|
|
|
|
static const spi_conf_t spi_config[] = {
|
|
{
|
|
.dev = SPI1,
|
|
.mosi_pin = GPIO_PIN(PORT_A, 7),
|
|
.miso_pin = GPIO_PIN(PORT_A, 6),
|
|
.sclk_pin = GPIO_PIN(PORT_A, 5),
|
|
.cs_pin = GPIO_PIN(PORT_A, 4),
|
|
.mosi_af = GPIO_AF5,
|
|
.miso_af = GPIO_AF5,
|
|
.sclk_af = GPIO_AF5,
|
|
.cs_af = GPIO_AF5,
|
|
.rccmask = RCC_APB2ENR_SPI1EN,
|
|
.apbbus = APB2,
|
|
#ifdef MODULE_PERIPH_DMA
|
|
.tx_dma = 3,
|
|
.tx_dma_chan = 2,
|
|
.rx_dma = 4,
|
|
.rx_dma_chan = 3,
|
|
#endif
|
|
}
|
|
};
|
|
|
|
#define SPI_NUMOF ARRAY_SIZE(spi_config)
|
|
/** @} */
|
|
|
|
/**
|
|
* @name ADC configuration
|
|
*
|
|
* Note that we do not configure all ADC channels,
|
|
* and not in the STM32F413zh order. Instead, we
|
|
* just define 6 ADC channels, for the Nucleo
|
|
* Arduino header pins A0-A5
|
|
*
|
|
* @{
|
|
*/
|
|
#define ADC_NUMOF (6U)
|
|
#define ADC_CONFIG { \
|
|
{GPIO_PIN(PORT_A, 3), 0, 3}, \
|
|
{GPIO_PIN(PORT_C, 0), 0, 10}, \
|
|
{GPIO_PIN(PORT_C, 3), 0, 13}, \
|
|
{GPIO_PIN(PORT_C, 1), 0, 11}, \
|
|
{GPIO_PIN(PORT_C, 4), 0, 14}, \
|
|
{GPIO_PIN(PORT_C, 5), 0, 15}, \
|
|
}
|
|
/** @} */
|
|
|
|
/**
|
|
* @name RTT configuration
|
|
* @{
|
|
*/
|
|
#define RTT_NUMOF (1)
|
|
#define RTT_FREQUENCY (4096)
|
|
#define RTT_MAX_VALUE (0xffff)
|
|
/** @} */
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* PERIPH_CONF_H */
|
|
/** @} */
|