RK3588 PWM调试记录---linux pwm子系统驱动框架

这篇具有很好参考价值的文章主要介绍了RK3588 PWM调试记录---linux pwm子系统驱动框架。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、RK3588 PWM简介

RK3588一共有4组PWM,每组有4个通道,共可以产生4*4=16路PWM波形;
PWM0 开始地址:0xfd8b0000
PWM1 开始地址:0xfebd0000
PWM2 开始地址:0xfebe0000
PWM3 开始地址:0xfebf0000
即每组PWM的地址空间是(0xfd8b0000-0xfebd0000=0x1000)64KB(0x1000/1024)
RK3588的PWM支持捕获、连续和单次触发三种模式。

1.捕获模式

用来测量由PWM通道时钟产生的PWM通道波形的高低有效波形,并且在PWM波形极性翻转时触发中断;高有效周期数记录在PWMx_PERIOD_HPC寄存器,低有效周期数记录在PWMx_DUTY_LPC寄存器中。捕获结果也可以保存在FIFO中,并且FIFO有一个指示器,该指示器也可以触发中断或者DMA请求。

2、连续模式

一旦PWM的通道被连续模式使能,即会产生连续的方波;波形有两种对齐方式:左对齐和中间对齐;
左对齐是先运行一个占空比,然后翻转。中间对齐是先运行占空比的一半,再翻转,再运行占空比的一半;简单来说,左对齐一个设定周期内PWM翻转一次而中间对齐则翻转两次。

3、单次触发模式

设定的周期内触发一次,也分为左对齐和中间对齐。

二、Firefly pwm demo的使用

首先在rk3588-firefly-itx-3588j.dts文件中,将demo的设备树使能;#include "rk3588-firefly-demo.dtsi"注释打开
在该demo的设备树中,有gpio_demo,adc_demo,pwm_demo,led_demo,几个例子,也分别有对应的驱动,有的需要在kernal中打开,有的默认已经打开,例如pwm的驱动程序名字叫pwm-firefly-demo.c,里面有一些具体的驱动实现,是参考rockchip的驱动文件pwm-rockchip.c来写的。但是该demo驱动有个问题,就是用户空间没有接口控制,在linux的pwm子系统的驱动中,我们可以通过命令行的方式来配置pwm,驱动是在/sys/bus/platform/drivers或者/sys/devices/platform中可以看到,例如

root@firefly:/sys/devices/platform# ls
 10f000.sram         fd5b0000.syscon             fdb60f00.iommu         fddf0000.i2s   fdf66400.qos              feaf0000.watchdog         power
 110000.ramoops      fd5b4000.syscon             fdb70000.rga           fddf4000.i2s   fdf66600.qos              feb20000.spi              psci
'Fixed MDIO bus.0'   fd5b5000.syscon             fdb70f00.iommu         fddf8000.i2s   fdf66800.qos              feb40000.serial           psci-cpuidle
 adc-keys            fd5b8000.syscon             fdb80000.rga           fdf35000.qos   fdf66a00.qos              feb60000.serial           pwm_demo
 arm-pmu             fd5bc000.syscon             fdb90000.jpegd         fdf35200.qos   fdf66c00.qos              feb70000.serial           reg-dummy
 av1d-master         fd5c0000.syscon             fdb90480.iommu         fdf35400.qos   fdf66e00.qos              feb90000.serial           regulatory.0
 clocks              fd5c4000.syscon             fdba0000.jpege-core    fdf35600.qos   fdf67000.qos              fec00000.tsadc            rkcif-mipi-lvds2
 cpufreq-dt          fd5c8000.syscon             fdba0800.iommu         fdf36000.qos   fdf67200.qos              fec10000.saradc           rkvenc-ccu
 cpuinfo             fd5cc000.syscon             fdba4000.jpege-core    fdf39000.qos   fdf70000.qos              fec20000.gpio             rockchip-system-monitor
 csi2-dphy0          fd5d0000.syscon             fdba4800.iommu         fdf3d800.qos   fdf71000.qos              fec30000.gpio             serial8250
 display-subsystem   fd5d4000.syscon             fdba8000.jpege-core    fdf3e000.qos   fdf72000.qos              fec40000.gpio             timer
 dmabuf              fd5d8000.syscon             fdba8800.iommu         fdf3e200.qos   fdf72200.qos              fec50000.gpio             uevent
 dmc                 fd5dc000.syscon             fdbac000.jpege-core    fdf3e400.qos   fdf72400.qos              fecc0000.otp              usbdrd3_0
 fb000000.gpu        fd5e0000.syscon             fdbac800.iommu         fdf3e600.qos   fdf80000.qos              fed10000.dma-controller   usbdrd3_1
 fc800000.usb        fd5e4000.syscon             fdbb0000.iep           fdf40000.qos   fdf81000.qos              fed90000.phy              vbus5v0-typec-pwr-en-regulator
 fc840000.usb        fd5e8000.syscon             fdbb0800.iommu         fdf40200.qos   fdf81200.qos              fedc0000.csi2-dphy0-hw    vcc-1v1-nldo-s3
 fc880000.usb        fd5ec000.syscon             fdbd0000.rkvenc-core   fdf40400.qos   fdf82000.qos              fee00000.phy              vcc-hub-reset-regulator
 fc8c0000.usb        fd5f0000.syscon             fdbdf000.iommu         fdf40500.qos   fdf82200.qos              fee10000.phy              vcc-hub3-reset-regulator
 fd104000.debug      fd880000.i2c                fdbe0000.rkvenc-core   fdf40600.qos   fe060000.dfi              fee80000.phy              vcc-sata-pwr-en-regulator
 fd10c000.cspmu      fd890000.serial             fdbef000.iommu         fdf40800.qos   fe170000.pcie             ff001000.sram             vcc12v-dcin
 fd588000.syscon     fd8a0000.gpio               fdc30000.rkvdec-ccu    fdf41000.qos   fe1b0000.ethernet         fiq-debugger              vcc3v3-pcie30
 fd58a000.syscon     fd8b0030.pwm                fdc38100.rkvdec-core   fdf41100.qos   fe1c0000.ethernet         fiq_debugger.0            vcc5v0-host
 fd58c000.syscon     fd8d8000.power-management   fdc38700.iommu         fdf60000.qos   fe210000.sata             firmware:optee            vcc5v0-host3
 fd590000.syscon     fda40000.pvtm               fdc48100.rkvdec-core   fdf60200.qos   fe2e0000.mmc              firmware:scmi             vcc5v0-sys
 fd592000.syscon     fda50000.pvtm               fdc48700.iommu         fdf60400.qos   fe378000.rng              firmware:sdei             vcc5v0-usb
 fd594000.syscon     fda60000.pvtm               fdc70000.av1d          fdf61000.qos   fe5a0000.hwspinlock       hdmiin-dc                 vcc5v0-usbdcin
 fd598000.syscon     fdab0000.npu                fdca0000.iommu         fdf61200.qos   fea10000.dma-controller   jpege-ccu                 wireless-bluetooth
 fd5a0000.syscon     fdab9000.iommu              fdce0000.rkcif         fdf61400.qos   fea30000.dma-controller   leds                      wireless-wlan
 fd5a2000.syscon     fdaf0000.pvtm               fdce0800.iommu         fdf62000.qos   fea50000.can              mpp-srv
 fd5a4000.syscon     fdb30000.pvtm               fdd30000.mipi2-csi2    fdf63000.qos   fea60000.can              mtd_vendor_storage
 fd5a6000.syscon     fdb50400.vdpu               fdd90000.vop           fdf64000.qos   fea90000.i2c              pcie30-avdd0v75
 fd5a8000.syscon     fdb50800.iommu              fdd97e00.iommu         fdf66000.qos   feab0000.i2c              pcie30-avdd1v8
 fd5ac000.syscon     fdb60000.rga                fddb0000.spdif-tx      fdf66200.qos   feae0000.timer            pinctrl

其中的fd8b0030.pwm就是启用的PWM,.前面的即是地址。
这跟设备树中的地址是对应的:
RK3588 PWM调试记录---linux pwm子系统驱动框架,rk3588,linux,单片机,运维
芯片手册中,也可以看到PWM的地址:
RK3588 PWM调试记录---linux pwm子系统驱动框架,rk3588,linux,单片机,运维
RK3588 PWM调试记录---linux pwm子系统驱动框架,rk3588,linux,单片机,运维

基地址0xfd8b0000+0x0030=0xfd8b0030即通道3的起始地址。

如果设备树启用了demo并且在内核也配置了该demo的使能,那么,platform设备和驱动目录下,是可以看到名字为firefy-pwm-demo的驱动和设备,并且在对应的io口也可以测量的设备树中设定的周期和占空比。但是具体的设定频率和占空比还需要在该驱动的基础上增加相关的设置接口才能使用。

三、linux pwm子系统驱动框架

rk3588也支持linux pwm子系统驱动框架下的pwm操作。
例如,我们将上面设备树中的pwm3的状态由disabled改为okay,那么我们可以在/sys/devices/platform/fd8b0030.pwm/pwm/pwmchip0或者/sys/class/pwm/pwmchi0将其导出。pwmchip0是启用的pwm通道数,如果将15路pwm全部启用,就会有15个类似的目录即从pwmchip0pwmchip14;
导出方式跟gpio类似:

# echo 0 > export
# cd pwm0/
# echo 10000 > period
# echo 5000 > duty_cycle
# echo normal > polarity
# echo 1 > enable
# ls
capture  duty_cycle  enable  output_type  period  polarity  power  uevent

上面的指令设置了周期10000,占空比50%,极性为normal的pwm输出。文章来源地址https://www.toymoban.com/news/detail-527688.html

到了这里,关于RK3588 PWM调试记录---linux pwm子系统驱动框架的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • RK3568驱动指南|第十二篇 GPIO子系统-第128章 GPIO入门实验

    瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工智能应用。RK3568 支持安卓 11 和 linux 系统,主要面向物联网

    2024年01月21日
    浏览(25)
  • Android音频子系统(十五)------Audio调试经验

    你好!这里是风筝的博客, 欢迎和我一起交流。 两年前,我初来手机厂,还不会怎么分析log,当时刚从珠海芯片厂出来,遇到问题都是接上串口线,然后自己手动复现问题,然后对着串口查看下打出来的log分析异常。 但是来到手机厂之后一切的都变了,之前的方式已经不适

    2024年02月13日
    浏览(27)
  • 【Windows 11】安装 Android子系统 和 Linux子系统

    本文使用电脑系统: 主要就是安装一个名为: 适用于Android的Windows子系统 (WSA)的软件。 首先在电脑的设置里面:时间和语言——语言和地区里面把地区改为美国。 然后到微软商店搜索: Amazon AppStore 。 安装亚马逊应用商店的时候,会首先提示你安装前面说的WSA。如此,我

    2024年02月09日
    浏览(40)
  • Window10安装linux子系统及子系统安装1Panel面板

    原文地址:Window10安装linux子系统及子系统安装1Panel面板 - Stars-One的杂货小窝 最近看到halo博客发布了2.10.0,终于是新增了个备份功能,于是有了念头想要升级下 但是目前我还是使用halo1.5版本,所以跨版本迁移可能会有问题,官方提议还是先用个测试环境进行测试验证是否有问题 但

    2024年02月08日
    浏览(39)
  • Linux reset子系统

    文章代码分析基于linux-5.19.13,架构基于aarch64(ARM64)。 复杂IC内部有很多具有独立功能的硬件模块,例如CPU cores、GPU cores、USB控制器、MMC控制器、等等,出于功耗、稳定性等方面的考虑,有些IC在内部为这些硬件模块设计了复位信号(reset signals),软件可通过寄存器(一般

    2024年02月16日
    浏览(30)
  • Linux Input子系统

    按键、鼠标、键盘、触摸屏等都属于输入(input)设备,Linux 内核为此专门做了一个叫做  input 子系统 的 框架 来处理输入事件。本质属于字符设备。 1. input子系统结构如下:  input 子系统分为 input 驱动层、input 核心层、input 事件处理层,最终给用户空间提供可访问的设备节点

    2024年02月10日
    浏览(29)
  • Linux内核(十四)Input 子系统详解 I —— 子系统介绍以及相关结构体解析

    input子系统就是管理输入的子系统 ,和Linux其他子系统一样,都是Linux内核针对某一类设备而创建的框架。 鼠标、键盘、触摸屏等都属于输入设备,Linux将这些设备的共同特性抽象出来,这就形成了input子系统的框架。 Linux内核只需要通过input框架向用户层上报输入事件 (如:

    2024年02月05日
    浏览(30)
  • Windows系统开启Linux子系统(Ubuntu)

    Linux是一种开源的操作系统,它拥有强大的功能和稳定的性能,广受开发者和用户的喜爱。但是,如果我们的电脑是Windows系统,要使用Linux系统,我们通常需要安装虚拟机,这样会占用很多的资源和空间,而且也不够方便。 其实,对于大多数用户来说,只需要开启Windows系统自

    2024年04月15日
    浏览(39)
  • 【Linux】Pinctrl子系统简介

    我们工作开发中非常常用的就是GPIO,在Linux开发中,是有必要去熟悉并理解的。在Linux内核中也有提供相应的子系统pinctrl子系统, 本文从大的面上去了解它 。 参考学习:Linux笔记老师课程(Pinctrl子系统) https://live.csdn.net/v/219059?spm=1001.2014.3001.5501 https://xuesong.blog.csdn.net/arti

    2024年02月07日
    浏览(36)
  • Linux IIO 子系统简介

    IIO 子系统系统框架 而在IIO子系统内部,则主要包括如下四部分的内容: iio buffer用于处理需要进行连续采集的数据,当一个IIO device的各通道数据支持连续采集时,则调用iio buffer模块提供的接口,创建iio buffer用于存储连续存储的数据,同时该模块提供字符设备文件的注册,因

    2024年02月16日
    浏览(23)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包