1 /*
2 * Copyright (c) 2022-2024, Xiaohua Semiconductor Co., Ltd.
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 *
6 * Change Logs:
7 * Date Author Notes
8 * 2024-12-30 CDT first version
9 */
10
11 /*
12 * 程序清单:这是 PWM 设备使用例程
13 * 例程导出了 pwm_sample 命令到控制终端。
14 * 命令调用格式:pwm_sample x
15 * 命令解释:x 对应的是设备名称,可以通过 list device 获取,例如:pwm_sample pwm_a1
16 */
17
18 #include <rtthread.h>
19 #include <rtdevice.h>
20 #include <board.h>
21
22 #ifdef BSP_USING_PWM
23
24 #define PWM_DEV_CHANNEL 1
25
26 struct rt_device_pwm *pwm_dev;
27
28
pwm_sample(int argc,char * argv[])29 static rt_int32_t pwm_sample(int argc, char *argv[])
30 {
31 rt_uint32_t period = 50000;
32 rt_uint32_t pulse = 45000;
33
34 if (argc != 2)
35 {
36 return -RT_ERROR;
37 }
38
39 pwm_dev = (struct rt_device_pwm *)rt_device_find(argv[1]);
40 if (pwm_dev == RT_NULL)
41 {
42 rt_kprintf("pwm sample run failed! can't find %s device!\n", argv[1]);
43 return -RT_ERROR;
44 }
45
46 rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, pulse);
47 rt_pwm_enable(pwm_dev, PWM_DEV_CHANNEL);
48 rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL + 1, period, pulse);
49 rt_pwm_enable(pwm_dev, PWM_DEV_CHANNEL + 1);
50 // rt_pwm_set_period(pwm_dev,PWM_DEV_CHANNEL,100000);
51
52 while (1)
53 {
54 rt_thread_mdelay(50);
55 pulse += 5000;
56 rt_pwm_set_pulse(pwm_dev, PWM_DEV_CHANNEL, pulse);
57 rt_pwm_set_pulse(pwm_dev, PWM_DEV_CHANNEL + 1, pulse);
58 if (pulse >= period)
59 {
60 pulse = 0;
61 }
62 }
63 }
64 MSH_CMD_EXPORT(pwm_sample, pwm_sample [opt])
65 #endif
66 /*
67 EOF
68 */
69