yelian 发表于 2025-1-7 19:22:58

T507 PWM最低频率限制?

将Uart5的管教改为PWM输出,配置输出为PWM2

实际测试时发现,频率设置< 200Hz时,默认只能输出200Hz

最大设置到500MHz都没问题

为什么最低只能输出200Hz?是硬件限制吗?还是软件限制?

hzjmlb 发表于 2025-1-20 08:51:53

经过核实,T507 PWM频率计算有些问题,您参考这个修改内容进行一下修改即可
From 12f0152db36d8a620d513f48c49e4460ca931f12 Mon Sep 17 00:00:00 2001
From: houjianlin <houjianlin0802@163.com>
Date: Wed, 8 Jan 2025 15:56:26 +0800
Subject: fixed pwm

---
linux-4.9/drivers/pwm/pwm-sunxi-new.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
mode change 100644 => 100755 linux-4.9/drivers/pwm/pwm-sunxi-new.c

diff --git a/linux-4.9/drivers/pwm/pwm-sunxi-new.c b/linux-4.9/drivers/pwm/pwm-sunxi-new.c
old mode 100644
new mode 100755
index e9ad016b5..600cd4e2d
--- a/linux-4.9/drivers/pwm/pwm-sunxi-new.c
+++ b/linux-4.9/drivers/pwm/pwm-sunxi-new.c
@@ -305,6 +305,7 @@ static int sunxi_pwm_config_single(struct pwm_chip *chip, struct pwm_device *pwm
        unsigned int temp;
        unsigned long long c = 0;
        unsigned long entire_cycles = 256, active_cycles = 192;
+        unsigned long entire_cycles_tmp = 0;
        struct sunxi_pwm_chip *pc = to_sunxi_pwm_chip(chip);
        unsigned int reg_offset, reg_shift, reg_width;
        unsigned int reg_bypass_shift;
@@ -385,11 +386,13 @@ static int sunxi_pwm_config_single(struct pwm_chip *chip, struct pwm_device *pwm
        do_div(c, 1000000000);
        entire_cycles = (unsigned long)c;

+        entire_cycles_tmp = entire_cycles;
+
        for (pre_scal_id = 0; pre_scal_id < 9; pre_scal_id++) {
                if (entire_cycles <= 65536)
                                break;
                for (prescale = 0; prescale < PRESCALE_MAX+1; prescale++) {
-                        entire_cycles = (entire_cycles/pre_scal)/(prescale + 1);
+                        entire_cycles = (entire_cycles_tmp/pre_scal)/(prescale + 1);
                        if (entire_cycles <= 65536) {
                                div_m = pre_scal;
                                break;
--
2.17.1
页: [1]
查看完整版本: T507 PWM最低频率限制?