一、硬件连接
这次我们使用PWM0,即GPIO7。
本次我们使用的是3.3V无源蜂鸣器。
硬件实际连接如上图。
二、软件
- 设备树
由于本人前一个版本更改了dtb导致进入到/sys/class/pwm/ 时没有看到pwmchip0,需要将从linux中编译的dtb文件通过
dtc -I dtb -O dts -o xxx.dts xxx.dtb 反汇编成dts文件,并增加
resets = <0x0b 0x6d>; 属性。
我pwm设备树配置参数。
pwm@12490000 {
compatible = "starfive,pwm0";
reg = <0x00 0x12490000 0x00 0x10000>;
#reg-names = "control";
clocks = <0x07 0xb5>;
#pwm-cells = <0x03>;
resets = <0x0b 0x6d>;
#sifive,approx-period = <0x5f5e100>;
sifive,npwm = <0x08>;
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <0x28>;
};
- 通过syfs控制蜂鸣器
其中period,duty_cycle的单位为ns。
root@ubuntu-star5:/sys/class/pwm/pwmchip0/pwm0# ls
capture duty_cycle enable period polarity uevent
root@ubuntu-star5:/sys/class/pwm/pwmchip0/pwm0# echo 0 >enable
root@ubuntu-star5:/sys/class/pwm/pwmchip0/pwm0# echo 500000 > period
root@ubuntu-star5:/sys/class/pwm/pwmchip0/pwm0# echo 250000 > duty_cycle
root@ubuntu-star5:/sys/class/pwm/pwmchip0/pwm0# echo 1 > enable
root@ubuntu-star5:/sys/class/pwm/pwmchip0/pwm0# echo 0 >enable
- 通过其他方式控制后续有时间再补上。
|