summaryrefslogtreecommitdiff
path: root/bsp/microchip/same70/board
diff options
context:
space:
mode:
authorKevin Liu <[email protected]>2022-04-19 14:32:02 +0800
committerGitHub <[email protected]>2022-04-19 14:32:02 +0800
commit7847c5e98d7ec7ca81b0b6dd5dfbd694ef3ba512 (patch)
treeb5f43a4fb12ca433c3a918a3a3e1792786ae3972 /bsp/microchip/same70/board
parent991b6e78b3bd51b810f6e7a74e7b3665ed90dcab (diff)
Microchip SAM MCU新增ethernet支持和驱动更新 (#5821)
* Microchip SAM MCU BSP update and add ethernet driver 1. Update Microchip SAM MCU BSP, add I2C, GMAC, ADC driver support. 2. Add ethernet driver support of SAM MCU for RT-Thread. * Add GMAC and I2C driver support 1. Update MCU BSP to support I2C/ADC/GMAC peripherals. 2. Add I2C and ethernet driver and LWIP support. 3. Update serial driver. * Add I2C driver and move some files to the common folder 1. Add I2C driver. 2. Move the same drivers and demo code to same folder to reduce duplicated code.
Diffstat (limited to 'bsp/microchip/same70/board')
-rw-r--r--bsp/microchip/same70/board/Kconfig22
-rw-r--r--bsp/microchip/same70/board/board.c5
-rw-r--r--bsp/microchip/same70/board/serial.c199
-rw-r--r--bsp/microchip/same70/board/serial.h22
4 files changed, 25 insertions, 223 deletions
diff --git a/bsp/microchip/same70/board/Kconfig b/bsp/microchip/same70/board/Kconfig
index 19921f9eec..5de3724a4a 100644
--- a/bsp/microchip/same70/board/Kconfig
+++ b/bsp/microchip/same70/board/Kconfig
@@ -30,6 +30,14 @@ menu "Onboard Peripheral Drivers"
config SAME70_ADC0
bool "Enable ADC0"
default false
+
+ config SAME70_I2C0
+ bool "Enable I2C0"
+ default false
+
+ config SAME70_GMAC
+ bool "Enable GMAC"
+ default false
endmenu
menu "Application Demo Config"
@@ -47,4 +55,18 @@ menu "Application Demo Config"
help
Add ADC example task to project
+ config SAM_I2C_EXAMPLE
+ bool "Enable SAM I2C Example"
+ depends on SAME70_I2C0
+ default true
+ help
+ Add I2C example task to project
+
+ config SAM_LWIP_EXAMPLE
+ bool "Enable SAM LWIP Example"
+ depends on SAME70_GMAC
+ default false
+ help
+ Add GMAC LWIP example task to project
+
endmenu
diff --git a/bsp/microchip/same70/board/board.c b/bsp/microchip/same70/board/board.c
index bd98d8bf88..00f9874edb 100644
--- a/bsp/microchip/same70/board/board.c
+++ b/bsp/microchip/same70/board/board.c
@@ -25,13 +25,14 @@ static struct io_descriptor* g_stdio;
void rt_hw_console_output(const char *str)
{
io_write(g_stdio, (uint8_t *)str, strlen(str));
+ while (TARGET_IO.stat != 0);
}
RTM_EXPORT(rt_hw_console_output);
static inline void hw_board_init_usart(void)
{
- usart_sync_get_io_descriptor(&TARGET_IO, &g_stdio);
- usart_sync_enable(&TARGET_IO);
+ usart_async_get_io_descriptor(&TARGET_IO, &g_stdio);
+ usart_async_enable(&TARGET_IO);
}
/**
diff --git a/bsp/microchip/same70/board/serial.c b/bsp/microchip/same70/board/serial.c
deleted file mode 100644
index 28ba104dbe..0000000000
--- a/bsp/microchip/same70/board/serial.c
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- * Copyright (c)
- *
- * SPDX-License-Identifier: Apache-2.0
- *
- * Change Logs:
- * Date Author Email Notes
- * 2019-07-16 Kevin.Liu [email protected] First Release
- */
-
-#include <rtthread.h>
-#include <rtdevice.h>
-
-#include <atmel_start.h>
-
-/* SAM MCU serial device */
-static struct rt_serial_device sam_serial;
-
-/**
- * @brief Configure serial port
- *
- * This function will configure UART baudrate, parity and so on.
- *
- * @return RT_EOK.
- */
-static rt_err_t serial_configure(struct rt_serial_device *serial, struct serial_configure *cfg)
-{
- struct usart_sync_descriptor* desc;
-
- RT_ASSERT(serial != RT_NULL);
-
- desc = (struct usart_sync_descriptor *)serial->parent.user_data;
-
- RT_ASSERT(desc != RT_NULL);
- RT_ASSERT(cfg != RT_NULL);
-
- usart_sync_disable(desc);
-
- /* Set baudrate */
- usart_sync_set_baud_rate(desc, (const uint32_t)cfg->baud_rate);
-
- /* Set stop bit */
- if (cfg->stop_bits == STOP_BITS_1)
- usart_sync_set_stopbits(desc, USART_STOP_BITS_ONE);
- else if (cfg->stop_bits == STOP_BITS_2)
- usart_sync_set_stopbits(desc, USART_STOP_BITS_TWO);
-
- if (cfg->bit_order == BIT_ORDER_LSB)
- usart_sync_set_data_order(desc, USART_DATA_ORDER_LSB);
- else if (cfg->bit_order == BIT_ORDER_MSB)
- usart_sync_set_data_order(desc, USART_DATA_ORDER_MSB);
-
- /* Set character size */
- switch (cfg->data_bits)
- {
- case DATA_BITS_5:
- usart_sync_set_character_size(desc, USART_CHARACTER_SIZE_5BITS);
- break;
- case DATA_BITS_6:
- usart_sync_set_character_size(desc, USART_CHARACTER_SIZE_6BITS);
- break;
- case DATA_BITS_7:
- usart_sync_set_character_size(desc, USART_CHARACTER_SIZE_7BITS);
- break;
- case DATA_BITS_8:
- usart_sync_set_character_size(desc, USART_CHARACTER_SIZE_8BITS);
- break;
- case DATA_BITS_9:
- usart_sync_set_character_size(desc, USART_CHARACTER_SIZE_9BITS);
- break;
- default:
- break;
- }
-
- if (cfg->parity == PARITY_NONE)
- usart_sync_set_parity(desc, USART_PARITY_NONE);
- else if (cfg->parity == PARITY_ODD)
- usart_sync_set_parity(desc, USART_PARITY_ODD);
- else if (cfg->parity == PARITY_EVEN)
- usart_sync_set_parity(desc, USART_PARITY_EVEN);
-
- usart_sync_enable(desc);
-
- return RT_EOK;
-}
-
-/**
- * @brief Control serial port
- *
- * This function provide UART enable/disable control.
- *
- * @return RT_EOK.
- */
-static rt_err_t serial_control(struct rt_serial_device *serial, int cmd, void *arg)
-{
- struct usart_sync_descriptor* desc;
-
- RT_ASSERT(serial != RT_NULL);
- desc = (struct usart_sync_descriptor *)serial->parent.user_data;
-
- RT_ASSERT(desc != RT_NULL);
-
- switch (cmd)
- {
- /* disable interrupt */
- case RT_DEVICE_CTRL_CLR_INT:
- usart_sync_disable(desc);
- break;
- /* enable interrupt */
- case RT_DEVICE_CTRL_SET_INT:
- usart_sync_enable(desc);
- break;
- /* UART config */
- case RT_DEVICE_CTRL_CONFIG :
- break;
- }
-
- return RT_EOK;
-}
-
-/**
- * @brief Serial sends a char
- *
- * This function will send a char to the UART
- *
- * @return 1.
- */
-static int serial_putc(struct rt_serial_device *serial, char c)
-{
- struct usart_sync_descriptor* desc;
-
- RT_ASSERT(serial != RT_NULL);
- desc = (struct usart_sync_descriptor *)serial->parent.user_data;
-
- RT_ASSERT(desc != RT_NULL);
-
- io_write(&desc->io, (const uint8_t *)&c, 1);
-
- return 1;
-}
-
-/**
- * @brief Serial gets a char
- *
- * This function will get a char from the UART
- *
- * @return received char character or -1 if no char received.
- */
-static int serial_getc(struct rt_serial_device *serial)
-{
- char c;
- int ch;
- struct usart_sync_descriptor* desc;
-
- RT_ASSERT(serial != RT_NULL);
- desc = (struct usart_sync_descriptor *)serial->parent.user_data;
-
- RT_ASSERT(desc != RT_NULL);
-
- ch = -1;
- if (usart_sync_is_rx_not_empty(desc))
- {
- io_read(&desc->io, (uint8_t *)&c, 1);;
- ch = c & 0xff;
- }
-
- return ch;
-}
-
-static const struct rt_uart_ops sam_serial_ops =
-{
- serial_configure,
- serial_control,
- serial_putc,
- serial_getc,
-};
-
-/**
- * @brief Initialize the UART
- *
- * This function initialize the UART
- *
- * @return None.
- */
-int rt_hw_uart_init(void)
-{
- struct serial_configure config = RT_SERIAL_CONFIG_DEFAULT;
-
- sam_serial.ops = &sam_serial_ops;
- sam_serial.config = config;
- sam_serial.serial_rx = RT_NULL;
- sam_serial.serial_rx = RT_NULL;
- rt_hw_serial_register(&sam_serial, "uart0",
- RT_DEVICE_FLAG_RDWR, (void *)&TARGET_IO);
-
- return 0;
-}
-
-/*@}*/
diff --git a/bsp/microchip/same70/board/serial.h b/bsp/microchip/same70/board/serial.h
deleted file mode 100644
index 12e6811231..0000000000
--- a/bsp/microchip/same70/board/serial.h
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Copyright (c)
- *
- * SPDX-License-Identifier: Apache-2.0
- *
- * Change Logs:
- * Date Author Email Notes
- * 2019-07-16 Kevin.Liu [email protected] First Release
- */
-
-#ifndef __BOARD_SERIAL_H_
-#define __BOARD_SERIAL_H_
-
-#include <rtthread.h>
-
-/**
- * @brief External function definitions
- *
- */
-int rt_hw_uart_init(void);
-
-#endif // __BOARD_SERIAL_H_