forked from springcute/rt-thread
[update] mp1 drivers and add rs485 driver.
This commit is contained in:
parent
3ff0c07b38
commit
5f911c6dc2
|
@ -35,9 +35,24 @@ menu "Onboard Peripheral Drivers"
|
||||||
|
|
||||||
config BSP_USING_OPENAMP
|
config BSP_USING_OPENAMP
|
||||||
bool "Enable OpenAMP"
|
bool "Enable OpenAMP"
|
||||||
select RT_USING_OPENAMP
|
|
||||||
default n
|
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
|
endmenu
|
||||||
|
|
||||||
menu "On-chip Peripheral Drivers"
|
menu "On-chip Peripheral Drivers"
|
||||||
|
@ -59,12 +74,10 @@ menu "On-chip Peripheral Drivers"
|
||||||
config BSP_USING_UART3
|
config BSP_USING_UART3
|
||||||
bool "Enable UART3"
|
bool "Enable UART3"
|
||||||
default y
|
default y
|
||||||
|
|
||||||
config BSP_UART3_RX_USING_DMA
|
config BSP_UART3_RX_USING_DMA
|
||||||
bool "Enable UART3 RX 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
|
default n
|
||||||
|
|
||||||
config BSP_UART3_TX_USING_DMA
|
config BSP_UART3_TX_USING_DMA
|
||||||
bool "Enable UART3 TX DMA"
|
bool "Enable UART3 TX DMA"
|
||||||
depends on BSP_USING_UART3 && RT_SERIAL_USING_DMA
|
depends on BSP_USING_UART3 && RT_SERIAL_USING_DMA
|
||||||
|
@ -73,12 +86,10 @@ menu "On-chip Peripheral Drivers"
|
||||||
config BSP_USING_UART4
|
config BSP_USING_UART4
|
||||||
bool "Enable UART4"
|
bool "Enable UART4"
|
||||||
default y
|
default y
|
||||||
|
|
||||||
config BSP_UART4_RX_USING_DMA
|
config BSP_UART4_RX_USING_DMA
|
||||||
bool "Enable UART4 RX DMA"
|
bool "Enable UART4 RX DMA"
|
||||||
depends on BSP_USING_UART4 && RT_SERIAL_USING_DMA
|
depends on BSP_USING_UART4 && RT_SERIAL_USING_DMA
|
||||||
default n
|
default n
|
||||||
|
|
||||||
config BSP_UART4_TX_USING_DMA
|
config BSP_UART4_TX_USING_DMA
|
||||||
bool "Enable UART4 TX DMA"
|
bool "Enable UART4 TX DMA"
|
||||||
depends on BSP_USING_UART4 && RT_SERIAL_USING_DMA
|
depends on BSP_USING_UART4 && RT_SERIAL_USING_DMA
|
||||||
|
|
|
@ -37,6 +37,9 @@ if GetDepend(['BSP_USING_TIM14']):
|
||||||
if GetDepend(['BSP_USING_PMIC']):
|
if GetDepend(['BSP_USING_PMIC']):
|
||||||
src += Glob('ports/drv_pmic.c')
|
src += Glob('ports/drv_pmic.c')
|
||||||
|
|
||||||
|
if GetDepend(['BSP_USING_RS485']):
|
||||||
|
src += Glob('ports/drv_rs485.c')
|
||||||
|
|
||||||
if GetDepend(['BSP_USING_OPENAMP']):
|
if GetDepend(['BSP_USING_OPENAMP']):
|
||||||
src += Glob('CubeMX_Config/CM4/Src/ipcc.c')
|
src += Glob('CubeMX_Config/CM4/Src/ipcc.c')
|
||||||
src += Glob('CubeMX_Config/CM4/Src/openamp.c')
|
src += Glob('CubeMX_Config/CM4/Src/openamp.c')
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
|
|
||||||
#ifdef BSP_USING_OPENAMP
|
#ifdef BSP_USING_OPENAMP
|
||||||
|
|
||||||
|
#include <finsh.h>
|
||||||
#include <drv_openamp.h>
|
#include <drv_openamp.h>
|
||||||
#include <openamp.h>
|
#include <openamp.h>
|
||||||
#include <virt_uart.h>
|
#include <virt_uart.h>
|
||||||
|
@ -234,7 +235,12 @@ int rt_hw_openamp_init(void)
|
||||||
openamp_init();
|
openamp_init();
|
||||||
|
|
||||||
rt_hw_openamp_register(&dev_openamp, "openamp", 0, NULL);
|
rt_hw_openamp_register(&dev_openamp, "openamp", 0, NULL);
|
||||||
|
|
||||||
|
if (rt_strcmp(RT_CONSOLE_DEVICE_NAME, "openamp") == 0)
|
||||||
|
{
|
||||||
|
rt_console_set_device(RT_CONSOLE_DEVICE_NAME);
|
||||||
|
}
|
||||||
|
|
||||||
return RT_EOK;
|
return RT_EOK;
|
||||||
}
|
}
|
||||||
INIT_PREV_EXPORT(rt_hw_openamp_init);
|
INIT_PREV_EXPORT(rt_hw_openamp_init);
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "board.h"
|
#include "board.h"
|
||||||
|
|
||||||
//#define DRV_DEBUG
|
//#define DRV_DEBUG
|
||||||
#define LOG_TAG "drv.rcc"
|
#define LOG_TAG "drv.rcc"
|
||||||
#include <drv_log.h>
|
#include <drv_log.h>
|
||||||
|
@ -17,12 +18,12 @@
|
||||||
|
|
||||||
static void enable_clock(void)
|
static void enable_clock(void)
|
||||||
{
|
{
|
||||||
__HAL_RCC_GPIOD_CLK_ENABLE();
|
__HAL_RCC_GPIOH_CLK_ENABLE();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void disable_clock(void)
|
static void disable_clock(void)
|
||||||
{
|
{
|
||||||
__HAL_RCC_GPIOD_CLK_DISABLE();
|
__HAL_RCC_GPIOH_CLK_DISABLE();
|
||||||
}
|
}
|
||||||
|
|
||||||
static int rcc_sample(int argc, char *argv[])
|
static int rcc_sample(int argc, char *argv[])
|
||||||
|
@ -47,8 +48,8 @@ static int rcc_sample(int argc, char *argv[])
|
||||||
_exit:
|
_exit:
|
||||||
{
|
{
|
||||||
rt_kprintf("Usage:\n");
|
rt_kprintf("Usage:\n");
|
||||||
rt_kprintf("rcc_sample enable - enable GPIOD clock, the LD8 will blink '\n");
|
rt_kprintf("rcc_sample enable - enable GPIOH clock, the LD7 will blink '\n");
|
||||||
rt_kprintf("rcc_sample disable - disable GPIOD clock, the LD8 will stop blink'\n");
|
rt_kprintf("rcc_sample disable - disable GPIOH clock, the LD7 will stop blink'\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
return -RT_ERROR;
|
return -RT_ERROR;
|
||||||
|
|
|
@ -0,0 +1,110 @@
|
||||||
|
/*
|
||||||
|
* 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};
|
||||||
|
|
||||||
|
/* rs485 send data callback function */
|
||||||
|
static rt_err_t rs485_output(rt_device_t dev, void * buffer)
|
||||||
|
{
|
||||||
|
RS485_IN;
|
||||||
|
|
||||||
|
return RT_EOK;
|
||||||
|
}
|
||||||
|
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
/* set rs485 mode */
|
||||||
|
RS485_OUT;
|
||||||
|
|
||||||
|
/* send data */
|
||||||
|
rt_device_write(serial, 0, tbuf, t_len);
|
||||||
|
|
||||||
|
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;
|
||||||
|
|
||||||
|
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 */
|
|
@ -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 */
|
Loading…
Reference in New Issue