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