以2K1000为例:
pmon下的pwm使能:文件Targets/LS2K/ls2k/start.S;
li t0, 0xbfe10420
//sdio
lw t2, 0x0(t0)
lui t1, 0x10
//enable pwm0, pwm1, i2c0, i2c1, nand, sata, i2s, gmac1
//no hda, no ac97
ori t1, t1, 0x3f48 //用于控制使能相应设备,其中12~15位用于使能pwm0~3,默认只使能了0和1,若需打开两外两路,则相应位置1即可;
or t2, t2, t1
sw t2, 0x0(t0)
复用:pwm0~3分别和gpio20~23存在复用,若使用pwm,则对应gpio不可使用;
dts中的配置
pwm0: pwm@1fe02000{
compatible = "loongson,ls2k-pwm";
reg = <0x1fe02000 0x10>;
interrupt-parent = <&icu>;
interrupts = <32>;
};
pwm1: pwm@1fe02010{
compatible = "loongson,ls2k-pwm";
reg = <0x1fe02010 0x10>;
interrupt-parent = <&icu>;
interrupts = <33>;
};
pwm2: pwm@1fe02020{
compatible = "loongson,ls2k-pwm";
reg = <0x1fe02020 0x10>;
interrupt-parent = <&icu>;
interrupts = <34>;
};
pwm3: pwm@1fe02030{
compatible = "loongson,ls2k-pwm";
reg = <0x1fe02030 0x10>;
interrupt-parent = <&icu>;
interrupts = <35>;
};
以上配置分别用于控制4路pwm,使用相应的一路打开对应配置即可;
内核menuconfig配置:
linux下测试方法(以测试pwm0为例子):
cd /sys/class/pwm/
cd pwmchip0/
echo 0 > export
cd pwm0/
echo 10000 > period
echo 5000 > duty_cycle
echo 1 > enable
注意以上单位为ns,period用于控制周期,duty_cycle用于控制低脉冲持续时间;
以上配置在示波器采到波形如下:
前方高能预警:
个人整理不易,后续会有更多分享,打赏几毛支持一下吧,嘻嘻嘻