summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernard Xiong <[email protected]>2020-10-28 18:56:17 +0800
committerGitHub <[email protected]>2020-10-28 18:56:17 +0800
commit6a3c57519b4e6d9fec517e75eec9501b9ffffc34 (patch)
treefd467dde4cb6b7ef2f9e6f2479ea5569fc57b602
parent9cd38972a27a9baf5278d62431c8f6e77b9878b1 (diff)
parentd2d6fc47afd898ecfb67ae1724ee68e1638f0c91 (diff)
Merge pull request #3990 from thread-liu/develop
[update] openamp driver and add rs485 driver
-rw-r--r--bsp/stm32/stm32mp157a-st-discovery/board/Kconfig23
-rw-r--r--bsp/stm32/stm32mp157a-st-discovery/board/SConscript3
-rw-r--r--bsp/stm32/stm32mp157a-st-discovery/board/ports/OpenAMP/drv_openamp.c6
-rw-r--r--bsp/stm32/stm32mp157a-st-discovery/board/ports/drv_rcc.c9
-rw-r--r--bsp/stm32/stm32mp157a-st-discovery/board/ports/drv_rs485.c111
-rw-r--r--bsp/stm32/stm32mp157a-st-discovery/board/ports/drv_rs485.h25
6 files changed, 167 insertions, 10 deletions
diff --git a/bsp/stm32/stm32mp157a-st-discovery/board/Kconfig b/bsp/stm32/stm32mp157a-st-discovery/board/Kconfig
index 6f8ee6d865..2ea8df97ab 100644
--- a/bsp/stm32/stm32mp157a-st-discovery/board/Kconfig
+++ b/bsp/stm32/stm32mp157a-st-discovery/board/Kconfig
@@ -35,9 +35,24 @@ menu "Onboard Peripheral Drivers"
config BSP_USING_OPENAMP
bool "Enable OpenAMP"
- select RT_USING_OPENAMP
default n
+ menuconfig BSP_USING_RS485
+ bool "Enable RS485 "
+ default n
+ if BSP_USING_RS485
+ comment "set rts pin number "
+ config BSP_RS485_RTS_PIN
+ int "RS485 rts pin number"
+ range 1 176
+ default 5
+
+ config RS485_UART_DEVICE_NAME
+ string "the uart name for rs485"
+ default "uart3"
+
+ endif
+
endmenu
menu "On-chip Peripheral Drivers"
@@ -59,12 +74,10 @@ menu "On-chip Peripheral Drivers"
config BSP_USING_UART3
bool "Enable UART3"
default y
-
config BSP_UART3_RX_USING_DMA
bool "Enable UART3 RX DMA"
- depends on BSP_USING_UART4 && RT_SERIAL_USING_DMA
+ depends on BSP_USING_UART3 && RT_SERIAL_USING_DMA
default n
-
config BSP_UART3_TX_USING_DMA
bool "Enable UART3 TX DMA"
depends on BSP_USING_UART3 && RT_SERIAL_USING_DMA
@@ -73,12 +86,10 @@ menu "On-chip Peripheral Drivers"
config BSP_USING_UART4
bool "Enable UART4"
default y
-
config BSP_UART4_RX_USING_DMA
bool "Enable UART4 RX DMA"
depends on BSP_USING_UART4 && RT_SERIAL_USING_DMA
default n
-
config BSP_UART4_TX_USING_DMA
bool "Enable UART4 TX DMA"
depends on BSP_USING_UART4 && RT_SERIAL_USING_DMA
diff --git a/bsp/stm32/stm32mp157a-st-discovery/board/SConscript b/bsp/stm32/stm32mp157a-st-discovery/board/SConscript
index 305b3e60d4..a99f95d786 100644
--- a/bsp/stm32/stm32mp157a-st-discovery/board/SConscript
+++ b/bsp/stm32/stm32mp157a-st-discovery/board/SConscript
@@ -37,6 +37,9 @@ if GetDepend(['BSP_USING_TIM14']):
if GetDepend(['BSP_USING_PMIC']):
src += Glob('ports/drv_pmic.c')
+if GetDepend(['BSP_USING_RS485']):
+ src += Glob('ports/drv_rs485.c')
+
if GetDepend(['BSP_USING_OPENAMP']):
src += Glob('CubeMX_Config/CM4/Src/ipcc.c')
src += Glob('CubeMX_Config/CM4/Src/openamp.c')
diff --git a/bsp/stm32/stm32mp157a-st-discovery/board/ports/OpenAMP/drv_openamp.c b/bsp/stm32/stm32mp157a-st-discovery/board/ports/OpenAMP/drv_openamp.c
index 58e1c95f39..12651efa1a 100644
--- a/bsp/stm32/stm32mp157a-st-discovery/board/ports/OpenAMP/drv_openamp.c
+++ b/bsp/stm32/stm32mp157a-st-discovery/board/ports/OpenAMP/drv_openamp.c
@@ -12,6 +12,7 @@
#ifdef BSP_USING_OPENAMP
+#include <finsh.h>
#include <drv_openamp.h>
#include <openamp.h>
#include <virt_uart.h>
@@ -234,6 +235,11 @@ int rt_hw_openamp_init(void)
openamp_init();
rt_hw_openamp_register(&dev_openamp, "openamp", 0, NULL);
+
+ if (RT_CONSOLE_DEVICE_NAME == "openamp")
+ {
+ rt_console_set_device(RT_CONSOLE_DEVICE_NAME);
+ }
return RT_EOK;
}
diff --git a/bsp/stm32/stm32mp157a-st-discovery/board/ports/drv_rcc.c b/bsp/stm32/stm32mp157a-st-discovery/board/ports/drv_rcc.c
index a4924fced1..8c6f45ad91 100644
--- a/bsp/stm32/stm32mp157a-st-discovery/board/ports/drv_rcc.c
+++ b/bsp/stm32/stm32mp157a-st-discovery/board/ports/drv_rcc.c
@@ -9,6 +9,7 @@
*/
#include "board.h"
+
//#define DRV_DEBUG
#define LOG_TAG "drv.rcc"
#include <drv_log.h>
@@ -17,12 +18,12 @@
static void enable_clock(void)
{
- __HAL_RCC_GPIOD_CLK_ENABLE();
+ __HAL_RCC_GPIOH_CLK_ENABLE();
}
static void disable_clock(void)
{
- __HAL_RCC_GPIOD_CLK_DISABLE();
+ __HAL_RCC_GPIOH_CLK_DISABLE();
}
static int rcc_sample(int argc, char *argv[])
@@ -47,8 +48,8 @@ static int rcc_sample(int argc, char *argv[])
_exit:
{
rt_kprintf("Usage:\n");
- rt_kprintf("rcc_sample enable - enable GPIOD clock, the LD8 will blink '\n");
- rt_kprintf("rcc_sample disable - disable GPIOD clock, the LD8 will stop blink'\n");
+ rt_kprintf("rcc_sample enable - enable GPIOH clock, the LD7 will blink '\n");
+ rt_kprintf("rcc_sample disable - disable GPIOH clock, the LD7 will stop blink'\n");
}
return -RT_ERROR;
diff --git a/bsp/stm32/stm32mp157a-st-discovery/board/ports/drv_rs485.c b/bsp/stm32/stm32mp157a-st-discovery/board/ports/drv_rs485.c
new file mode 100644
index 0000000000..44eba3be91
--- /dev/null
+++ b/bsp/stm32/stm32mp157a-st-discovery/board/ports/drv_rs485.c
@@ -0,0 +1,111 @@
+/*
+ * Copyright (c) 2006-2022, RT-Thread Development Team
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date Author Notes
+ * 2020-10-24 thread-liu first version
+ */
+
+#include <board.h>
+#include "drv_rs485.h"
+
+#ifdef BSP_USING_RS485
+
+#define RS485_OUT rt_pin_write(BSP_RS485_RTS_PIN, PIN_HIGH)
+#define RS485_IN rt_pin_write(BSP_RS485_RTS_PIN, PIN_LOW)
+
+static rt_device_t serial = {0};
+static struct rt_semaphore rx_sem = {0};
+
+/* uart send data callback function */
+static rt_err_t rs485_output(rt_device_t dev, void * buffer)
+{
+ return RT_EOK;
+}
+
+/* uart receive data callback function */
+static rt_err_t rs485_input(rt_device_t dev, rt_size_t size)
+{
+ rt_sem_release(&rx_sem);
+
+ return RT_EOK;
+}
+
+/* send string */
+int rs485_send_data(char *tbuf, rt_uint16_t t_len)
+{
+ /* change rs485 mode */
+ RS485_OUT;
+
+ /* send data */
+ rt_device_write(serial, 0, tbuf, t_len);
+
+ /* change rs485 mode */
+ RS485_IN;
+
+ return RT_EOK;
+}
+
+static void rs485_thread_entry(void *parameter)
+{
+ char ch;
+
+ while (1)
+ {
+ /* A byte of data is read from a serial port, and if it is not read, it waits for the received semaphore */
+ while (rt_device_read(serial, -1, &ch, 1) != 1)
+ {
+ rt_sem_take(&rx_sem, RT_WAITING_FOREVER);
+ }
+
+ /* The data read through the serial port output dislocation */
+ ch = ch + 1;
+
+ /* send char */
+ rs485_send_data(&ch, 1);
+ }
+}
+
+/* rs485 rts pin init */
+static int rs485_init(void)
+{
+ /* find uart device */
+ serial = rt_device_find(RS485_UART_DEVICE_NAME);
+ if (!serial)
+ {
+ rt_kprintf("find %s failed!\n", RS485_UART_DEVICE_NAME);
+ return RT_ERROR;
+ }
+
+ rt_device_open(serial, RT_DEVICE_FLAG_INT_RX);
+
+ /* set receive data callback function */
+ rt_device_set_rx_indicate(serial, rs485_input);
+
+ /* set the send completion callback function */
+ rt_device_set_tx_complete(serial, rs485_output);
+
+ rt_pin_mode(BSP_RS485_RTS_PIN, PIN_MODE_OUTPUT);
+
+ RS485_IN;
+
+ rt_sem_init(&rx_sem, "rx_sem", 0, RT_IPC_FLAG_FIFO);
+ /* create rs485 thread */
+ rt_thread_t thread = rt_thread_create("rs485", rs485_thread_entry, RT_NULL, 1024, 25, 10);
+
+ if (thread != RT_NULL)
+ {
+ rt_thread_startup(thread);
+ }
+ else
+ {
+ return RT_ERROR;
+ }
+
+ return RT_EOK;
+}
+INIT_DEVICE_EXPORT(rs485_init);
+
+#endif /* bsp_using_RS485 */
diff --git a/bsp/stm32/stm32mp157a-st-discovery/board/ports/drv_rs485.h b/bsp/stm32/stm32mp157a-st-discovery/board/ports/drv_rs485.h
new file mode 100644
index 0000000000..01edf84ae8
--- /dev/null
+++ b/bsp/stm32/stm32mp157a-st-discovery/board/ports/drv_rs485.h
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2006-2022, RT-Thread Development Team
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date Author Notes
+ * 2020-10-24 thread-liu first version
+ */
+
+#ifndef __DRV_RS485_H__
+#define __DRV_RS485_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define RS485_SEND_MODE 0
+#define RS485_RECV_MODE 1
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* drv_rs485.h */