Skip to content

Commit fb09316

Browse files
[bsp][bouffalo] add pwm & rtc & wdt devices (#7122)
1 parent 0cdf72f commit fb09316

12 files changed

Lines changed: 595 additions & 14 deletions

File tree

bsp/bouffalo_lab/bl808/m0/.config

100755100644
Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,9 @@ CONFIG_RT_USING_CONSOLE=y
8484
CONFIG_RT_CONSOLEBUF_SIZE=128
8585
CONFIG_RT_CONSOLE_DEVICE_NAME="uart0"
8686
CONFIG_RT_VER_NUM=0x50000
87+
# CONFIG_RT_USING_STDC_ATOMIC is not set
8788
# CONFIG_RT_USING_CACHE is not set
89+
# CONFIG_RT_USING_HW_ATOMIC is not set
8890
# CONFIG_ARCH_ARM_BOOTWITH_FLUSH_CACHE is not set
8991
# CONFIG_ARCH_CPU_STACK_GROWS_UPWARD is not set
9092
# CONFIG_RT_USING_CPU_FFS is not set
@@ -141,15 +143,17 @@ CONFIG_RT_USING_PIN=y
141143
# CONFIG_RT_USING_NULL is not set
142144
# CONFIG_RT_USING_ZERO is not set
143145
# CONFIG_RT_USING_RANDOM is not set
144-
# CONFIG_RT_USING_PWM is not set
146+
CONFIG_RT_USING_PWM=y
145147
# CONFIG_RT_USING_MTD_NOR is not set
146148
# CONFIG_RT_USING_MTD_NAND is not set
147149
# CONFIG_RT_USING_PM is not set
148150
# CONFIG_RT_USING_FDT is not set
149-
# CONFIG_RT_USING_RTC is not set
151+
CONFIG_RT_USING_RTC=y
152+
# CONFIG_RT_USING_ALARM is not set
153+
# CONFIG_RT_USING_SOFT_RTC is not set
150154
# CONFIG_RT_USING_SDIO is not set
151155
# CONFIG_RT_USING_SPI is not set
152-
# CONFIG_RT_USING_WDT is not set
156+
CONFIG_RT_USING_WDT=y
153157
# CONFIG_RT_USING_AUDIO is not set
154158
# CONFIG_RT_USING_SENSOR is not set
155159
# CONFIG_RT_USING_TOUCH is not set
@@ -912,7 +916,6 @@ CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8
912916
# Display
913917
#
914918
# CONFIG_PKG_USING_ARDUINO_U8G2 is not set
915-
# CONFIG_PKG_USING_ARDUINO_U8GLIB_ARDUINO is not set
916919
# CONFIG_PKG_USING_SEEED_TM1637 is not set
917920

918921
#
@@ -942,17 +945,10 @@ CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8
942945
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCF8574 is not set
943946
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCA9685 is not set
944947
# CONFIG_PKG_USING_ARDUINO_SEEED_PCF85063TP is not set
945-
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TPA2016 is not set
946-
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DRV2605 is not set
947-
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DS1841 is not set
948-
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DS3502 is not set
949948

950949
#
951950
# Other
952951
#
953-
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MFRC630 is not set
954-
# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI5351 is not set
955-
# CONFIG_PKG_USING_ARDUINO_RTCLIB is not set
956952

957953
#
958954
# Signal IO
@@ -976,7 +972,7 @@ CONFIG_BL808_CORE_M0=y
976972
#
977973
# General Drivers Configuration
978974
#
979-
# CONFIG_BSP_USING_GPIO is not set
975+
CONFIG_BSP_USING_GPIO=y
980976

981977
#
982978
# General Purpose UARTs
@@ -989,3 +985,8 @@ CONFIG_UART0_TX_USING_GPIO14=y
989985
CONFIG_UART0_RX_USING_GPIO15=y
990986
# CONFIG_UART0_RX_USING_GPIO22 is not set
991987
# CONFIG_UART0_RX_USING_GPIO23 is not set
988+
# CONFIG_BSP_USING_UART1 is not set
989+
# CONFIG_BSP_USING_UART2 is not set
990+
# CONFIG_BSP_USING_RTC is not set
991+
# CONFIG_BSP_USING_WDT is not set
992+
# CONFIG_BSP_USING_PWM is not set
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
/*
2+
* Copyright (c) 2006-2023, RT-Thread Development Team
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*
6+
* Change Logs:
7+
* Date Author Notes
8+
* 2023-3-27 wcx1024979076 first version.
9+
*/
10+
/*
11+
* 程序清单:这是一个 PWM 设备使用例程
12+
* 例程导出了 pwm_led_sample 命令到控制终端
13+
* 命令调用格式:pwm_led_sample
14+
* 程序功能:通过 PWM 设备控制 LED 灯的亮度,可以看到LED不停的由暗变到亮,然后又从亮变到暗。
15+
*/
16+
#include <rtthread.h>
17+
#include <rtdevice.h>
18+
19+
#ifdef RT_USING_PWM
20+
21+
#define LED_PIN_NUM 8 /* LED PIN脚编号,查看驱动文件drv_gpio.c确定 */
22+
#define PWM_DEV_NAME "pwm" /* PWM设备名称 */
23+
#define PWM_DEV_CHANNEL 0 /* PWM通道 */
24+
struct rt_device_pwm *pwm_dev; /* PWM设备句柄 */
25+
static int pwm_led_sample(int argc, char *argv[])
26+
{
27+
rt_uint32_t period, pulse, dir;
28+
period = 500000; /* 周期为0.5ms,单位为纳秒ns */
29+
dir = 1; /* PWM脉冲宽度值的增减方向 */
30+
pulse = 0; /* PWM脉冲宽度值,单位为纳秒ns */
31+
32+
/* 查找设备 */
33+
pwm_dev = (struct rt_device_pwm *)rt_device_find(PWM_DEV_NAME);
34+
if (pwm_dev == RT_NULL)
35+
{
36+
rt_kprintf("pwm sample run failed! can't find %s device!\n", PWM_DEV_NAME);
37+
return -RT_ERROR;
38+
}
39+
/* 设置PWM周期和脉冲宽度默认值 */
40+
rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, pulse);
41+
/* 使能设备 */
42+
rt_pwm_enable(pwm_dev, PWM_DEV_CHANNEL);
43+
44+
while (1)
45+
{
46+
rt_thread_mdelay(50);
47+
if (dir)
48+
{
49+
pulse += 400000; /* 从0值开始每次增加5000ns */
50+
}
51+
else
52+
{
53+
pulse -= 400000; /* 从最大值开始每次减少5000ns */
54+
}
55+
if (pulse >= period)
56+
{
57+
dir = 0;
58+
}
59+
if (0 == pulse)
60+
{
61+
dir = 1;
62+
}
63+
/* 设置PWM周期和脉冲宽度 */
64+
rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, pulse);
65+
}
66+
}
67+
/* 导出到 msh 命令列表中 */
68+
MSH_CMD_EXPORT(pwm_led_sample, pwm sample);
69+
70+
#endif /* RT_USING_PWM */
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
/*
2+
* Copyright (c) 2006-2023, RT-Thread Development Team
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*
6+
* Change Logs:
7+
* Date Author Notes
8+
* 2023-3-27 wcx1024979076 first version.
9+
*/
10+
/*
11+
* 程序清单:这是一个独立看门狗设备使用例程
12+
* 例程导出了 wdt_sample 命令到控制终端
13+
* 命令调用格式:wdt_sample wdt
14+
* 命令解释:命令第二个参数是要使用的看门狗设备名称,为空则使用例程默认的看门狗设备。
15+
* 程序功能:程序通过设备名称查找看门狗设备,然后初始化设备并设置看门狗设备溢出时间。
16+
* 然后设置空闲线程回调函数,在回调函数里会喂狗。
17+
*/
18+
19+
#include <rtthread.h>
20+
#include <rtdevice.h>
21+
22+
#ifdef RT_USING_WDT
23+
24+
#define WDT_DEVICE_NAME "wdt" /* 看门狗设备名称 */
25+
26+
static rt_device_t wdg_dev; /* 看门狗设备句柄 */
27+
28+
static void idle_hook(void)
29+
{
30+
/* 在空闲线程的回调函数里喂狗 */
31+
rt_device_control(wdg_dev, RT_DEVICE_CTRL_WDT_KEEPALIVE, NULL);
32+
rt_kprintf("feed the dog!\n ");
33+
}
34+
35+
static int wdt_sample(int argc, char *argv[])
36+
{
37+
rt_err_t ret = RT_EOK;
38+
rt_uint32_t timeout = 1; /* 溢出时间,单位:秒 */
39+
char device_name[RT_NAME_MAX];
40+
41+
/* 判断命令行参数是否给定了设备名称 */
42+
if (argc == 2)
43+
{
44+
rt_strncpy(device_name, argv[1], RT_NAME_MAX);
45+
}
46+
else
47+
{
48+
rt_strncpy(device_name, WDT_DEVICE_NAME, RT_NAME_MAX);
49+
}
50+
/* 根据设备名称查找看门狗设备,获取设备句柄 */
51+
wdg_dev = rt_device_find(device_name);
52+
if (!wdg_dev)
53+
{
54+
rt_kprintf("find %s failed!\n", device_name);
55+
return -RT_ERROR;
56+
}
57+
/* 初始化设备 */
58+
rt_device_init(wdg_dev);
59+
60+
/* 设置看门狗溢出时间 */
61+
ret = rt_device_control(wdg_dev, RT_DEVICE_CTRL_WDT_SET_TIMEOUT, &timeout);
62+
if (ret != RT_EOK)
63+
{
64+
rt_kprintf("set %s timeout failed!\n", device_name);
65+
return -RT_ERROR;
66+
}
67+
68+
/* 启动看门狗 */
69+
ret = rt_device_control(wdg_dev, RT_DEVICE_CTRL_WDT_START, RT_NULL);
70+
if (ret != RT_EOK)
71+
{
72+
rt_kprintf("start %s failed!\n", device_name);
73+
return -RT_ERROR;
74+
}
75+
/* 设置空闲线程回调函数 */
76+
rt_thread_idle_sethook(idle_hook);
77+
return ret;
78+
}
79+
/* 导出到 msh 命令列表中 */
80+
MSH_CMD_EXPORT(wdt_sample, wdt sample);
81+
82+
#endif /* RT_USING_WDT */

bsp/bouffalo_lab/bl808/m0/rtconfig.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,6 @@
8383
#define RT_SERIAL_USING_DMA
8484
#define RT_SERIAL_RB_BUFSZ 64
8585
#define RT_USING_PIN
86-
8786
/* Using USB */
8887

8988

@@ -219,7 +218,6 @@
219218

220219
/* Other */
221220

222-
223221
/* Signal IO */
224222

225223

@@ -230,6 +228,7 @@
230228

231229
/* General Drivers Configuration */
232230

231+
#define BSP_USING_GPIO
233232

234233
/* General Purpose UARTs */
235234

bsp/bouffalo_lab/libraries/rt_drivers/Kconfig

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,5 +121,37 @@ menu "General Drivers Configuration"
121121

122122
endmenu
123123

124+
menuconfig BSP_USING_RTC
125+
bool "Enable RTC"
126+
select RT_USING_RTC
127+
default n
128+
129+
config BSP_USING_WDT
130+
bool "Enable Watchdog Timer"
131+
select RT_USING_WDT
132+
default n
133+
134+
menuconfig BSP_USING_PWM
135+
bool "Enable PWM"
136+
default n
137+
select RT_USING_PWM
138+
if BSP_USING_PWM
139+
config BSP_USING_PWM0
140+
bool "Enable PWM0"
141+
default n
142+
143+
config BSP_USING_PWM1
144+
bool "Enable PWM1"
145+
default n
146+
147+
config BSP_USING_PWM2
148+
bool "Enable PWM2"
149+
default n
150+
151+
config BSP_USING_PWM3
152+
bool "Enable PWM3"
153+
default n
154+
endif
155+
124156
endmenu
125157

bsp/bouffalo_lab/libraries/rt_drivers/SConscript

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,15 @@ if GetDepend('BSP_USING_GPIO'):
1212
if GetDepend('BSP_USING_I2C'):
1313
src += ['drv_i2c.c']
1414

15+
if GetDepend('BSP_USING_RTC'):
16+
src += ['drv_rtc.c']
17+
18+
if GetDepend('RT_USING_PWM'):
19+
src += ['drv_pwm.c']
20+
21+
if GetDepend('RT_USING_WDT'):
22+
src += ['drv_wdt.c']
23+
1524
group = DefineGroup('rt_drivers', src, depend = [''], CPPPATH = CPPPATH)
1625

1726
objs = [group]

0 commit comments

Comments
 (0)