mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2024-12-29 04:50:03 +01:00
boards: update periph_conf of sam0 based board
Signed-off-by: dylad <dylan.laduranty@mesotic.com>
This commit is contained in:
parent
89c885ea40
commit
c81ae98068
@ -104,12 +104,14 @@ extern "C" {
|
|||||||
*/
|
*/
|
||||||
static const uart_conf_t uart_config[] = {
|
static const uart_conf_t uart_config[] = {
|
||||||
{
|
{
|
||||||
.dev = &SERCOM5->USART,
|
.dev = &SERCOM5->USART,
|
||||||
.rx_pin = GPIO_PIN(PB,23), /* ARDUINO_PIN_13, RX Pin */
|
.rx_pin = GPIO_PIN(PB,23), /* ARDUINO_PIN_13, RX Pin */
|
||||||
.tx_pin = GPIO_PIN(PB,22), /* ARDUINO_PIN_14, TX Pin */
|
.tx_pin = GPIO_PIN(PB,22), /* ARDUINO_PIN_14, TX Pin */
|
||||||
.mux = GPIO_MUX_D,
|
.mux = GPIO_MUX_D,
|
||||||
.rx_pad = UART_PAD_RX_3,
|
.rx_pad = UART_PAD_RX_3,
|
||||||
.tx_pad = UART_PAD_TX_2
|
.tx_pad = UART_PAD_TX_2,
|
||||||
|
.runstdby = 0,
|
||||||
|
.gclk_src = GCLK_CLKCTRL_GEN_GCLK0
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -107,20 +107,24 @@ extern "C" {
|
|||||||
*/
|
*/
|
||||||
static const uart_conf_t uart_config[] = {
|
static const uart_conf_t uart_config[] = {
|
||||||
{
|
{
|
||||||
.dev = &SERCOM5->USART,
|
.dev = &SERCOM5->USART,
|
||||||
.rx_pin = GPIO_PIN(PB,23),
|
.rx_pin = GPIO_PIN(PB,23),
|
||||||
.tx_pin = GPIO_PIN(PB,22),
|
.tx_pin = GPIO_PIN(PB,22),
|
||||||
.mux = GPIO_MUX_D,
|
.mux = GPIO_MUX_D,
|
||||||
.rx_pad = UART_PAD_RX_3,
|
.rx_pad = UART_PAD_RX_3,
|
||||||
.tx_pad = UART_PAD_TX_2
|
.tx_pad = UART_PAD_TX_2,
|
||||||
|
.runstdby = 0,
|
||||||
|
.gclk_src = GCLK_CLKCTRL_GEN_GCLK0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.dev = &SERCOM0->USART,
|
.dev = &SERCOM0->USART,
|
||||||
.rx_pin = GPIO_PIN(PA,11),
|
.rx_pin = GPIO_PIN(PA,11),
|
||||||
.tx_pin = GPIO_PIN(PA,10),
|
.tx_pin = GPIO_PIN(PA,10),
|
||||||
.mux = GPIO_MUX_C,
|
.mux = GPIO_MUX_C,
|
||||||
.rx_pad = UART_PAD_RX_3,
|
.rx_pad = UART_PAD_RX_3,
|
||||||
.tx_pad = UART_PAD_TX_2
|
.tx_pad = UART_PAD_TX_2,
|
||||||
|
.runstdby = 0,
|
||||||
|
.gclk_src = GCLK_CLKCTRL_GEN_GCLK0
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -112,12 +112,14 @@ extern "C" {
|
|||||||
*/
|
*/
|
||||||
static const uart_conf_t uart_config[] = {
|
static const uart_conf_t uart_config[] = {
|
||||||
{ /* Virtual COM Port */
|
{ /* Virtual COM Port */
|
||||||
.dev = &SERCOM3->USART,
|
.dev = &SERCOM3->USART,
|
||||||
.rx_pin = GPIO_PIN(PA,23),
|
.rx_pin = GPIO_PIN(PA,23),
|
||||||
.tx_pin = GPIO_PIN(PA,22),
|
.tx_pin = GPIO_PIN(PA,22),
|
||||||
.mux = GPIO_MUX_C,
|
.mux = GPIO_MUX_C,
|
||||||
.rx_pad = UART_PAD_RX_1,
|
.rx_pad = UART_PAD_RX_1,
|
||||||
.tx_pad = UART_PAD_TX_0
|
.tx_pad = UART_PAD_TX_0,
|
||||||
|
.runstdby = 0,
|
||||||
|
.gclk_src = GCLK_CLKCTRL_GEN_GCLK0
|
||||||
},
|
},
|
||||||
{ /* EXT1 */
|
{ /* EXT1 */
|
||||||
.dev = &SERCOM4->USART,
|
.dev = &SERCOM4->USART,
|
||||||
@ -125,7 +127,9 @@ static const uart_conf_t uart_config[] = {
|
|||||||
.tx_pin = GPIO_PIN(PB,8),
|
.tx_pin = GPIO_PIN(PB,8),
|
||||||
.mux = GPIO_MUX_D,
|
.mux = GPIO_MUX_D,
|
||||||
.rx_pad = UART_PAD_RX_1,
|
.rx_pad = UART_PAD_RX_1,
|
||||||
.tx_pad = UART_PAD_TX_0
|
.tx_pad = UART_PAD_TX_0,
|
||||||
|
.runstdby = 0,
|
||||||
|
.gclk_src = GCLK_CLKCTRL_GEN_GCLK0
|
||||||
},
|
},
|
||||||
{ /* EXT2/3 */
|
{ /* EXT2/3 */
|
||||||
.dev = &SERCOM4->USART,
|
.dev = &SERCOM4->USART,
|
||||||
@ -133,7 +137,9 @@ static const uart_conf_t uart_config[] = {
|
|||||||
.tx_pin = GPIO_PIN(PB,10),
|
.tx_pin = GPIO_PIN(PB,10),
|
||||||
.mux = GPIO_MUX_D,
|
.mux = GPIO_MUX_D,
|
||||||
.rx_pad = UART_PAD_RX_3,
|
.rx_pad = UART_PAD_RX_3,
|
||||||
.tx_pad = UART_PAD_TX_2
|
.tx_pad = UART_PAD_TX_2,
|
||||||
|
.runstdby = 0,
|
||||||
|
.gclk_src = GCLK_CLKCTRL_GEN_GCLK0
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -52,22 +52,34 @@ extern "C" {
|
|||||||
* @name UART configuration
|
* @name UART configuration
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
#define UART_NUMOF (1U)
|
static const uart_conf_t uart_config[] = {
|
||||||
#define UART_0_EN 1
|
{ /* Virtual COM Port */
|
||||||
#define UART_IRQ_PRIO 1
|
.dev = &SERCOM3->USART,
|
||||||
|
.rx_pin = GPIO_PIN(PA,23),
|
||||||
|
.tx_pin = GPIO_PIN(PA,22),
|
||||||
|
.mux = GPIO_MUX_C,
|
||||||
|
.rx_pad = UART_PAD_RX_1,
|
||||||
|
.tx_pad = UART_PAD_TX_0,
|
||||||
|
.runstdby = 0,
|
||||||
|
.gclk_src = GCLK_PCHCTRL_GEN_GCLK0
|
||||||
|
},
|
||||||
|
{ /* EXT1 header */
|
||||||
|
.dev = &SERCOM4->USART,
|
||||||
|
.rx_pin = GPIO_PIN(PB, 9),
|
||||||
|
.tx_pin = GPIO_PIN(PB, 8),
|
||||||
|
.mux = GPIO_MUX_D,
|
||||||
|
.rx_pad = UART_PAD_RX_1,
|
||||||
|
.tx_pad = UART_PAD_TX_0,
|
||||||
|
.runstdby = 0,
|
||||||
|
.gclk_src = GCLK_PCHCTRL_GEN_GCLK0
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
/* UART 0 device configuration */
|
/* interrupt function name mapping */
|
||||||
#define UART_0_DEV SERCOM3->USART
|
|
||||||
#define UART_0_IRQ SERCOM3_IRQn
|
|
||||||
#define UART_0_ISR isr_sercom3
|
#define UART_0_ISR isr_sercom3
|
||||||
#define UART_0_REF_F (16000000UL)
|
#define UART_1_ISR isr_sercom4
|
||||||
#define UART_0_RUNSTDBY 1
|
|
||||||
|
|
||||||
/* UART 0 pin configuration */
|
#define UART_NUMOF (sizeof(uart_config) / sizeof(uart_config[0]))
|
||||||
#define UART_0_PORT (PORT->Group[0])
|
|
||||||
#define UART_0_TX_PIN (22)
|
|
||||||
#define UART_0_RX_PIN (23)
|
|
||||||
#define UART_0_PINS (((PORT_PA22 | PORT_PA23) >> 16) | PORT_WRCONFIG_HWSEL)
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -117,7 +117,9 @@ static const uart_conf_t uart_config[] = {
|
|||||||
.tx_pin = GPIO_PIN(PA,4),
|
.tx_pin = GPIO_PIN(PA,4),
|
||||||
.mux = GPIO_MUX_D,
|
.mux = GPIO_MUX_D,
|
||||||
.rx_pad = UART_PAD_RX_1,
|
.rx_pad = UART_PAD_RX_1,
|
||||||
.tx_pad = UART_PAD_TX_0
|
.tx_pad = UART_PAD_TX_0,
|
||||||
|
.runstdby = 0,
|
||||||
|
.gclk_src = GCLK_CLKCTRL_GEN_GCLK0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.dev = &SERCOM5->USART,
|
.dev = &SERCOM5->USART,
|
||||||
@ -125,7 +127,9 @@ static const uart_conf_t uart_config[] = {
|
|||||||
.tx_pin = GPIO_PIN(PA,22),
|
.tx_pin = GPIO_PIN(PA,22),
|
||||||
.mux = GPIO_MUX_D,
|
.mux = GPIO_MUX_D,
|
||||||
.rx_pad = UART_PAD_RX_1,
|
.rx_pad = UART_PAD_RX_1,
|
||||||
.tx_pad = UART_PAD_TX_0
|
.tx_pad = UART_PAD_TX_0,
|
||||||
|
.runstdby = 0,
|
||||||
|
.gclk_src = GCLK_CLKCTRL_GEN_GCLK0
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -103,36 +103,44 @@ extern "C" {
|
|||||||
*/
|
*/
|
||||||
static const uart_conf_t uart_config[] = {
|
static const uart_conf_t uart_config[] = {
|
||||||
{
|
{
|
||||||
.dev = &SERCOM0->USART,
|
.dev = &SERCOM0->USART,
|
||||||
.rx_pin = GPIO_PIN(PA,9),
|
.rx_pin = GPIO_PIN(PA,9),
|
||||||
.tx_pin = GPIO_PIN(PA,10),
|
.tx_pin = GPIO_PIN(PA,10),
|
||||||
.mux = GPIO_MUX_C,
|
.mux = GPIO_MUX_C,
|
||||||
.rx_pad = UART_PAD_RX_1,
|
.rx_pad = UART_PAD_RX_1,
|
||||||
.tx_pad = UART_PAD_TX_2,
|
.tx_pad = UART_PAD_TX_2,
|
||||||
|
.runstdby = 0,
|
||||||
|
.gclk_src = GCLK_CLKCTRL_GEN_GCLK0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.dev = &SERCOM5->USART,
|
.dev = &SERCOM5->USART,
|
||||||
.rx_pin = GPIO_PIN(PB,31),
|
.rx_pin = GPIO_PIN(PB,31),
|
||||||
.tx_pin = GPIO_PIN(PB,30),
|
.tx_pin = GPIO_PIN(PB,30),
|
||||||
.mux = GPIO_MUX_D,
|
.mux = GPIO_MUX_D,
|
||||||
.rx_pad = UART_PAD_RX_1,
|
.rx_pad = UART_PAD_RX_1,
|
||||||
.tx_pad = UART_PAD_TX_0_RTS_2_CTS_3,
|
.tx_pad = UART_PAD_TX_0_RTS_2_CTS_3,
|
||||||
|
.runstdby = 0,
|
||||||
|
.gclk_src = GCLK_CLKCTRL_GEN_GCLK0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.dev = &SERCOM4->USART,
|
.dev = &SERCOM4->USART,
|
||||||
.rx_pin = GPIO_PIN(PB,13),
|
.rx_pin = GPIO_PIN(PB,13),
|
||||||
.tx_pin = GPIO_PIN(PA,14),
|
.tx_pin = GPIO_PIN(PA,14),
|
||||||
.mux = GPIO_MUX_C,
|
.mux = GPIO_MUX_C,
|
||||||
.rx_pad = UART_PAD_RX_1,
|
.rx_pad = UART_PAD_RX_1,
|
||||||
.tx_pad = UART_PAD_TX_2,
|
.tx_pad = UART_PAD_TX_2,
|
||||||
|
.runstdby = 0,
|
||||||
|
.gclk_src = GCLK_CLKCTRL_GEN_GCLK0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.dev = &SERCOM1->USART,
|
.dev = &SERCOM1->USART,
|
||||||
.rx_pin = GPIO_PIN(PA,17),
|
.rx_pin = GPIO_PIN(PA,17),
|
||||||
.tx_pin = GPIO_PIN(PA,18),
|
.tx_pin = GPIO_PIN(PA,18),
|
||||||
.mux = GPIO_MUX_C,
|
.mux = GPIO_MUX_C,
|
||||||
.rx_pad = UART_PAD_RX_1,
|
.rx_pad = UART_PAD_RX_1,
|
||||||
.tx_pad = UART_PAD_TX_2,
|
.tx_pad = UART_PAD_TX_2,
|
||||||
|
.runstdby = 0,
|
||||||
|
.gclk_src = GCLK_CLKCTRL_GEN_GCLK0
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -51,44 +51,17 @@ static inline SercomUsart *_uart(uart_t dev)
|
|||||||
|
|
||||||
static uint64_t _long_division(uint64_t n, uint64_t d);
|
static uint64_t _long_division(uint64_t n, uint64_t d);
|
||||||
|
|
||||||
/**
|
static uint8_t sercom_gclk_id[] =
|
||||||
* @brief Get the sercom gclk id of the given UART device
|
{
|
||||||
*
|
SERCOM0_GCLK_ID_CORE,
|
||||||
* @param[in] dev UART device identifier
|
SERCOM1_GCLK_ID_CORE,
|
||||||
*
|
SERCOM2_GCLK_ID_CORE,
|
||||||
* @return sercom gclk id
|
SERCOM3_GCLK_ID_CORE,
|
||||||
*/
|
SERCOM4_GCLK_ID_CORE,
|
||||||
|
SERCOM5_GCLK_ID_CORE
|
||||||
|
};
|
||||||
|
|
||||||
static int _get_sercom_gclk_id(SercomUsart *dev)
|
|
||||||
{
|
|
||||||
int id;
|
|
||||||
|
|
||||||
switch(sercom_id(dev)) {
|
|
||||||
case 0:
|
|
||||||
id = SERCOM0_GCLK_ID_CORE;
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
id = SERCOM1_GCLK_ID_CORE;
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
id = SERCOM2_GCLK_ID_CORE;
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
id = SERCOM3_GCLK_ID_CORE;
|
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
id = SERCOM4_GCLK_ID_CORE;
|
|
||||||
break;
|
|
||||||
case 5:
|
|
||||||
id = SERCOM5_GCLK_ID_CORE;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
id = -1;
|
|
||||||
DEBUG("[UART]: wrong SERCOM ID\n");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static int init_base(uart_t uart, uint32_t baudrate);
|
static int init_base(uart_t uart, uint32_t baudrate);
|
||||||
@ -130,7 +103,7 @@ static int init_base(uart_t uart, uint32_t baudrate)
|
|||||||
|
|
||||||
#ifdef CPU_FAM_SAMD21
|
#ifdef CPU_FAM_SAMD21
|
||||||
/* calculate baudrate */
|
/* calculate baudrate */
|
||||||
uint32_t baud = ((((uint32_t)CLOCK_CORECLOCK * 10) / baudrate) / 16);
|
uint32_t baud = ((((uint32_t)CLOCK_CORECLOCK * 10) / baudrate) / 16);
|
||||||
/* enable sync and async clocks */
|
/* enable sync and async clocks */
|
||||||
uart_poweron(uart);
|
uart_poweron(uart);
|
||||||
/* reset the UART device */
|
/* reset the UART device */
|
||||||
@ -210,11 +183,12 @@ void uart_poweron(uart_t uart)
|
|||||||
while (GCLK->STATUS.reg & GCLK_STATUS_SYNCBUSY) {}
|
while (GCLK->STATUS.reg & GCLK_STATUS_SYNCBUSY) {}
|
||||||
#elif CPU_FAM_SAML21
|
#elif CPU_FAM_SAML21
|
||||||
/* Enable the peripheral channel */
|
/* Enable the peripheral channel */
|
||||||
GCLK->PCHCTRL[_get_sercom_gclk_id(dev)].reg |= GCLK_PCHCTRL_CHEN |
|
GCLK->PCHCTRL[sercom_gclk_id[sercom_id(dev)]].reg |=
|
||||||
GCLK_PCHCTRL_GEN(uart_config[uart].gclk_src);
|
GCLK_PCHCTRL_CHEN | GCLK_PCHCTRL_GEN(uart_config[uart].gclk_src);
|
||||||
|
|
||||||
while (!(GCLK->PCHCTRL[_get_sercom_gclk_id(dev)].reg & GCLK_PCHCTRL_CHEN)) {}
|
while (!(GCLK->PCHCTRL[sercom_gclk_id[sercom_id(dev)]].reg &
|
||||||
if(_get_sercom_gclk_id(dev) < 5) {
|
GCLK_PCHCTRL_CHEN)) {}
|
||||||
|
if(sercom_gclk_id[sercom_id(dev)] < 5) {
|
||||||
MCLK->APBCMASK.reg |= MCLK_APBCMASK_SERCOM0 << sercom_id(dev);
|
MCLK->APBCMASK.reg |= MCLK_APBCMASK_SERCOM0 << sercom_id(dev);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -240,9 +214,9 @@ void uart_poweroff(uart_t uart)
|
|||||||
while (GCLK->STATUS.reg & GCLK_STATUS_SYNCBUSY) {}
|
while (GCLK->STATUS.reg & GCLK_STATUS_SYNCBUSY) {}
|
||||||
#elif CPU_FAM_SAML21
|
#elif CPU_FAM_SAML21
|
||||||
/* Enable the peripheral channel */
|
/* Enable the peripheral channel */
|
||||||
GCLK->PCHCTRL[_get_sercom_gclk_id(dev)].reg &= ~GCLK_PCHCTRL_CHEN;
|
GCLK->PCHCTRL[sercom_gclk_id[sercom_id(dev)]].reg &= ~GCLK_PCHCTRL_CHEN;
|
||||||
|
|
||||||
if(_get_sercom_gclk_id(dev) < 5) {
|
if(sercom_gclk_id[sercom_id(dev)] < 5) {
|
||||||
MCLK->APBCMASK.reg &= ~(MCLK_APBCMASK_SERCOM0 << sercom_id(dev));
|
MCLK->APBCMASK.reg &= ~(MCLK_APBCMASK_SERCOM0 << sercom_id(dev));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -259,7 +233,8 @@ static inline void irq_handler(uint8_t uartnum)
|
|||||||
#ifdef CPU_FAM_SAMD21
|
#ifdef CPU_FAM_SAMD21
|
||||||
if (uart->INTFLAG.reg & SERCOM_USART_INTFLAG_RXC) {
|
if (uart->INTFLAG.reg & SERCOM_USART_INTFLAG_RXC) {
|
||||||
/* interrupt flag is cleared by reading the data register */
|
/* interrupt flag is cleared by reading the data register */
|
||||||
uart_ctx[uartnum].rx_cb(uart_ctx[uartnum].arg, (uint8_t)(uart->DATA.reg));
|
uart_ctx[uartnum].rx_cb(uart_ctx[uartnum].arg,
|
||||||
|
(uint8_t)(uart->DATA.reg));
|
||||||
}
|
}
|
||||||
else if (uart->INTFLAG.reg & SERCOM_USART_INTFLAG_ERROR) {
|
else if (uart->INTFLAG.reg & SERCOM_USART_INTFLAG_ERROR) {
|
||||||
/* clear error flag */
|
/* clear error flag */
|
||||||
|
Loading…
Reference in New Issue
Block a user