当前位置: 首页 > news >正文

记录:RK3588 PWM调试

内核dts配置

&pwm3 {pinctrl-0 = <&pwm3m1_pins>;status = "okay";
};
&pwm5 {pinctrl-names = "default";pinctrl-0 = <&pwm5m1_pins>;status = "okay";
};
&pwm7 {pinctrl-0 = <&pwm7m1_pins>;status = "okay";
};
&pwm8 {pinctrl-names = "default";pinctrl-0 = <&pwm8m1_pins>;status = "okay";
};
&pwm9 {pinctrl-names = "default";pinctrl-0 = <&pwm9m1_pins>; status = "okay";
};
&pwm10 {pinctrl-names = "default";pinctrl-0 = <&pwm10m1_pins>;status = "okay";
};

参考上面的修改后发现"/sys/class/pwm"中中只有pwm3和pwm7,内核报错"No active pinctrl state"。
在这里插入图片描述
分析对应代码(drivers/pwm/pwm-rockchip.c)看到读取的pinctrl状态是"active",这里没有读到所以rockchip_pwm_probe返回错误。

static int rockchip_pwm_probe(struct platform_device *pdev)
{
...省略...pc->active_state = pinctrl_lookup_state(pc->pinctrl, "active");if (IS_ERR(pc->active_state)) {dev_err(&pdev->dev, "No active pinctrl state\n");ret = PTR_ERR(pc->active_state);goto err_pclk;}
...省略...
}

pinctrl_lookup_state‌ 函数用于在 Linux 内核中查找并返回指定名称的 pinctrl 配置状态。该函数的主要作用是根据提供的名称查找对应的 pinctrl 状态,并返回一个指向该状态的指针。如果找不到对应的名称,函数会返回一个错误指针。这里提供的名称就是pinctrl-names = “default"定义的名称,可以看到传入的名称是"active”,而dts中配置成了"default"。所以修改pinctrl-names = “active”,因为之前已经有定义所以这里删除也可以。编译重新烧写镜像后可以看到所有PWM被正常识别
在这里插入图片描述
PWM 驱动加载成功后,会在其下生成 pwmchipX 目录,如pwmchip0、pwmchip1 等,此处的 X 与 PWM 的控制器或通道 id 无关,仅与 PWM 设备的 probe 顺序有关。实际用到哪路PWM可以通过"ls -la"查看符号链接的源地址,通过目录中的基地址在dts中可查到对应的PWM。例如上面的"fd8b0030"对应的是pwm3
在这里插入图片描述
向 export 节点写入 Y,会在当前目录下产生一个 pwmY 目录,由于 Rockchip 平台每个 PWM device 只有一个 chip,Y 值只能为 0。反之,向unexport 节点写入 Y 就会删除 pwmY 目录。

  • enable:写入 1 使能 PWM,写入 0 关闭 PWM;
  • polarity:有 normal 或 inversed两个参数选择,对应 PWM 的极性配置 PWM_POLARITY_NORMAL/PWM_POLARITY_INVERSED;
  • duty_cycle:在 normal 模式下,表示一个周期内高电平持续的时间(单位:ns),在 reversed模式下,表示一个周期中低电平持续的时 间(单位:ns);
  • period:表示 PWM 波形的周期(单位:ns);
  • oneshot_count:需开启 CONFIG_PWM_ROCKCHIP_ONESHOT,表示 oneshot 模式的 PWM 波形个数;
  • oneshot_repeat:需开启 CONFIG_PWM_ROCKCHIP_ONESHOT 且仅 PWM v4 支持,表示oneshot 模式重复的次数,最后输出的波形个 数为 oneshot_repeat * oneshot_count;
  • duty_offset:需开启 CONFIG_PWM_ROCKCHIP_ONESHOT,表示 PWM 输出波形偏移的时间(单位:ns);
  • capture:使能 capture 模式,获取输入波形高低电平的时长(单位:ns)。
    Continous
cd /sys/class/pwm/pwmchip0/
echo 0 > export
cd pwm0
echo 10000 > period
echo 5000 > duty_cycle
echo normal > polarity
echo 1 > enable

Oneshot

cd /sys/class/pwm/pwmchip0/
echo 0 > export
cd pwm0
echo 10000 > period
echo 5000 > duty_cycle
echo 1000 > duty_offset
echo normal > polarity
echo 100 > oneshot_count
echo 10 > oneshot_repeat
echo 1 > enable

Capture

cd /sys/class/pwm/pwmchip0/
echo 0 > export
cd pwm0
cat capture
http://www.dtcms.com/a/240645.html

相关文章:

  • 算法:模拟
  • 12.找到字符串中所有字母异位词
  • 镜像里切换为普通用户
  • JDK 17 序列化是怎么回事
  • 【c语言】安全完整性等级
  • 「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案
  • Qt Http Server模块功能及架构
  • window 显示驱动开发-如何查询视频处理功能(二)
  • UE5 文本框自动换行
  • linux驱动开发(3)-页面分配器
  • yaml读取写入常见错误 (‘cannot represent an object‘, 117)
  • 相关类可视化图像总结
  • nuclio的配置文件yaml和docker compose的yaml的区别
  • springboot根据部署服务器生成机器码+加密生成到期时间授权码设置项目在服务器的到期时间
  • Vue3+Pinia+TS笔记
  • 【笔记】AI Agent 项目 SUNA 部署 之 Docker 构建记录
  • 怎么开发一个网络协议模块(C语言框架)之(六) ——通用对象池总结(核心)
  • Robots.txt 文件
  • 日本本社企业直招|Java /cobol/C#/PM/PL/Salesforce/AWS/SAP 等,正社员/個人事業主,高度人才+20 分
  • c# 局部函数 定义、功能与示例
  • C#学习第29天:表达式树(Expression Trees)
  • 深度学习:小米 MiMo-VL 技术报告学习
  • Delivering Arbitrary-Modal Semantic Segmentation(CVPR2023)任意模态语义分割论文阅读
  • 鸟巢邂逅 3D 全景漫游,一场科技与建筑的梦幻交织​
  • 基于ThinkPHP8.*的后台管理框架--Veitool框架学习使用
  • 网络安全等级保护中关于SSL证书的整改如何处理?
  • Python爬虫(三):BeautifulSoup库
  • Spring类型转换融入IOC生命周期
  • 一款 AI 驱动的 Wiki 知识库
  • macOS 终端智能代理检测