RK3568芯片开发笔记——调试pwm控制红外功能

2023-05-16

1、PWM介绍

参考博客:《ARM芯片开发(S5PV210芯片)——定时器、看门狗、RTC》;

2、配置pwm功能的方法

(1)内核层:内核代码里有pwm子系统,里面有pwm相关函数接口,如果是驱动代码里要操作pwm就需要调用pwm子系统的函数接口;
(2)脚本操作:pwm子系统会向sys子系统注册pwm资源,可以通过脚本来控制pwm;
(3)代码里读写文件的方式操作:操作流程和用脚本控制是一样的,区别就是要用open、write、read、close等函数来操作文件;
总结:内核层操作pwm要使用pwm子系统提供的接口;应用层可以用脚本也可以用读写文件的方式操作pwm;

3、/sys/class/pwm

~ # ls /sys/class/pwm/ -l
total 0
lrwxrwxrwx    1 root     root             0 Jan  1 00:00 pwmchip0 -> ../../devices/platform/fdd70000.pwm/pwm/pwmchip0
lrwxrwxrwx    1 root     root             0 Jan  1 00:00 pwmchip1 -> ../../devices/platform/fdd70010.pwm/pwm/pwmchip1
lrwxrwxrwx    1 root     root             0 Jan  1 00:00 pwmchip2 -> ../../devices/platform/fdd70020.pwm/pwm/pwmchip2
lrwxrwxrwx    1 root     root             0 Jan  1 00:00 pwmchip3 -> ../../devices/platform/fe6f0020.pwm/pwm/pwmchip3
lrwxrwxrwx    1 root     root             0 Jan  1 00:00 pwmchip4 -> ../../devices/platform/fe6f0030.pwm/pwm/pwmchip4

文件夹下都是已经使能的pwm控制器,并且都是符号链接;

4、/sys/devices/platform

~ # ls /sys/devices/platform/* | grep ".pwm"
/sys/devices/platform/fdd70000.pwm:
/sys/devices/platform/fdd70010.pwm:
/sys/devices/platform/fdd70020.pwm:
/sys/devices/platform/fe6f0020.pwm:
/sys/devices/platform/fe6f0030.pwm:

platform文件下下面都是platform总线里注册的设备,其中就包括已经使能的pwm控制器;

5、设备树里pwm配置

	pwm0: pwm@fdd70000 {
		compatible = "rockchip,rk3568-pwm", "rockchip,rk3328-pwm";
		reg = <0x0 0xfdd70000 0x0 0x10>;
		#pwm-cells = <3>;
		pinctrl-names = "active";
		pinctrl-0 = <&pwm0m0_pins>;
		clocks = <&pmucru CLK_PWM0>, <&pmucru PCLK_PWM0>;
		clock-names = "pwm", "pclk";
		status = "disabled";
	};

	pwm1: pwm@fdd70010 {
		compatible = "rockchip,rk3568-pwm", "rockchip,rk3328-pwm";
		reg = <0x0 0xfdd70010 0x0 0x10>;
		#pwm-cells = <3>;
		pinctrl-names = "active";
		pinctrl-0 = <&pwm1m0_pins>;
		clocks = <&pmucru CLK_PWM0>, <&pmucru PCLK_PWM0>;
		clock-names = "pwm", "pclk";
		status = "disabled";
	};
	
	······
	
	pwm15: pwm@fe700030 {
		compatible = "rockchip,rk3568-pwm", "rockchip,rk3328-pwm";
		reg = <0x0 0xfe700030 0x0 0x10>;
		interrupts = <GIC_SPI 85 IRQ_TYPE_LEVEL_HIGH>,
			     <GIC_SPI 89 IRQ_TYPE_LEVEL_HIGH>;
		#pwm-cells = <3>;
		pinctrl-names = "active";
		pinctrl-0 = <&pwm15m0_pins>;
		clocks = <&cru CLK_PWM3>, <&cru PCLK_PWM3>;
		clock-names = "pwm", "pclk";
		status = "disabled";
	};
	

设备树里包含Soc里所以的pwm控制器资源。RK3568总共有16个pwm控制器,可以输出16路pwm;

6、/proc/device-tree

~ # ls /proc/device-tree/pwm@f
pwm@fdd70000/  pwm@fe6e0000/  pwm@fe6f0000/  pwm@fe700000/
pwm@fdd70010/  pwm@fe6e0010/  pwm@fe6f0010/  pwm@fe700010/
pwm@fdd70020/  pwm@fe6e0020/  pwm@fe6f0020/  pwm@fe700020/
pwm@fdd70030/  pwm@fe6e0030/  pwm@fe6f0030/  pwm@fe700030/

# 7、查看pwm15的状态
~ # cat /proc/device-tree/pwm@fe700030/status 
disabled

(1)/proc/device-tree/文件夹下是设备树里包含的资源,和设备树是完全对应的;
(2)可以在/proc/device-tree/文件夹下查看对应的硬件资源,比如状态status、名字nane、匹配信息compatible等等;
补充:对设备树不熟悉的参考博客:《https://blog.csdn.net/weixin_42031299/article/details/125813060》;

8、内核里各处pwm控制器信息的联系

(1)设备树文件里包含芯片所有的pwm资源,但是有的pwm控制器是被disable的;
(2)/proc/device-tree/文件夹下是内核对设备数文件的解析,和设备树文件里的内容是一一对应的,可以通过该文件夹去查看硬件状态;
(3)/sys/devices/platform/文件夹下显示的是注册到platform总线的pwm设备,只有状态是"okay"的pwm控制器才会被注册到platform总线;
(4)/sys/class/pwm/是符号链接,方便查看的;

9、配置pwm功能步骤

(1)在设备树里开启对应的pwm功能;
(2)确认是否真的使能pwm功能,有可能该引脚已经被复用成其他功能,需要先关闭该引脚的其他功能;
(3)配置pwm波的周期、占空比、极性等操作;
(4)使能pwm引脚,测量pwm引脚是否输出正确的pwm波;

10、配置pwm11为例

10.1、在设备树里开启pwm11

# 一般是默认关闭的
pwm11: pwm@fe6f0030 {
	compatible = "rockchip,rk3568-pwm", "rockchip,rk3328-pwm";
	reg = <0x0 0xfe6f0030 0x0 0x10>;
	interrupts = <GIC_SPI 84 IRQ_TYPE_LEVEL_HIGH>,
			 <GIC_SPI 88 IRQ_TYPE_LEVEL_HIGH>;
	#pwm-cells = <3>;
	pinctrl-names = "active";
	pinctrl-0 = <&pwm11m0_pins>;
	clocks = <&cru CLK_PWM2>, <&cru PCLK_PWM2>;
	clock-names = "pwm", "pclk";
	status = "disabled";
};


# 在设备树后面追加,使能pwm11
&pwm11 {
	pinctrl-0 = <&pwm11m0_pins>;
	status = "okay";
	pinctrl-names = "active";
};

在这里插入图片描述

(1)在设备里将pwm11使能,重新烧录内核后,可在/proc/device-tree/查看pwm11的状态——“cat /proc/device-tree/pwm@fe6f0030/status”;
(2)需要注意当前pwm11是使用的哪组引脚,从上面的原理图可在pwm11使用的m0组引脚,需要配置pinctrl-0选项;涉及pinctrl子系统,这里不详细介绍;

10.2、确认pwm11是否开启

~ # ls -l /sys/class/pwm/
total 0
lrwxrwxrwx    1 root     root             0 Jan  1 00:00 pwmchip0 -> ../../devices/platform/fdd70000.pwm/pwm/pwmchip0
lrwxrwxrwx    1 root     root             0 Jan  1 00:00 pwmchip1 -> ../../devices/platform/fdd70010.pwm/pwm/pwmchip1
lrwxrwxrwx    1 root     root             0 Jan  1 00:00 pwmchip2 -> ../../devices/platform/fdd70020.pwm/pwm/pwmchip2
lrwxrwxrwx    1 root     root             0 Jan  1 00:00 pwmchip3 -> ../../devices/platform/fe6f0020.pwm/pwm/pwmchip3
lrwxrwxrwx    1 root     root             0 Jan  1 00:00 pwmchip4 -> ../../devices/platform/fe6f0030.pwm/pwm/pwmchip4 #这就是pwm11

(1)查看/sys/class/pwm/文件夹,看看是否有pwm11;

10.3、通过sys文件系统来控制pwm11

#配置GPIO3_B6为pwm功能
devmem 0xFDC6004C 32 0xffff0500

# GPIO3_B6
cd /sys/class/pwm/pwmchip4/ > /dev/null 2>&1
echo 0 > export
cd pwm0 > /dev/null 2>&1
echo 26000 > period  # 配置周期
echo 13000 > duty_cycle	# 配置占空比
echo normal > polarity	# 配置极性
echo 1 > enable	# 使能pwm
cd - > /dev/null 2>&1

在这里插入图片描述

(1)首先查阅数据手册,配置GPIO3_B6为pwm功能;
(2)通过sys文件系统来控制pwm11;
(3)使用open、read、write、close等接口操作pwm,参考博客:《Linux应用开发【第十一章】PWM编程应用开发》;

推荐

给大家推荐一个学校嵌入式知识的网站,博主在大学时候学习嵌入式知识、找工作的时候都在用这个网站,网站里有C语言、Linux等等的笔试题、面试常问问题等等知识,无论是学习基础知识、面试刷题、交流工作经验都是不错的选择。大家一起进步,欢迎留言交流。
链接:学习神器跳转
在这里插入图片描述
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RK3568芯片开发笔记——调试pwm控制红外功能 的相关文章

  • pwm控制电机原理

    首先我们要明白电机的原理 电机 简单来说就是 实现电能与机械能相互转换的电工设备 那么我们经常使用的直流电机原理就是 xff1a 电生磁 xff1a 通电导线会产生磁场 也就是电磁感应 旋转磁场带动转子转动 电动机是由定子和转子组成 xff
  • 蓝桥杯之单片机学习(十)——PWM脉宽调制信号的发生与控制

    文章目录 一 训练任务1 1 具体要求 二 代码展示三 一些介绍 一 训练任务 在CT107D单片机综合训练平台上 xff0c 利用PWM脉宽信号实现独立按键S7对L1指示灯亮度变化的控制 1 1 具体要求 PWM脉宽信号的频率为100Hz
  • 飞控信号SBUS信号解析为PWM信号输出

    飞控信号SBUS信号解析为PWM信号输出 1 修改STM32时钟频率 xff1a static void SetSysClockTo72 void IO uint32 t StartUpCounter 61 0 HSEStatus 61 0
  • 【STM32Cube HAL】输入捕获(六)——PWM测量

    对于PWM的捕获 xff0c 我这里一共使用两种方法实现 xff1a 第一种是PWM输入模式 xff0c 采用一个定时器的两个通道 xff08 通道一和通道二 xff09 xff0c 配置从模式为复位模式 xff0c 没有进行溢出处理 xf
  • CubeMX 配置PWM使用DMA,生成Dshot600的协议

    看到电调支持Dshot125 600的协议 xff0c 想自己做一个支持Dshot协议的驱动 xff0c 所以研究了一下 xff0c 如何利用精确的PWM产生Dshot协议 先看结果 xff01 图中为油门值为1500的时候的输出的Dsho
  • STM32CubeIDE---HAL库PWM使用速记

    一 如何计算 理论分析 xff1a HAL库函数之呼吸灯 PWM波 简书 jianshu com 预分频系数 PSC 自动重装载值 ARR 捕获 比较寄存器值 CCR 频率计算 xff1a 定时器频率 PSC 43 1 ARR 43 1 占
  • 基于px4的hc-sr04-pwm超声波模块的驱动开发

    一直想实现无人的避障功能 xff0c 但是px4源生代码又不支持避障 xff0c 所以只能自己动手写 避障的基础条件还是获取距离数据 xff0c 超声波模块就是最熟悉也是最简单的模块了 px4源生代码也支持了几种超声波模块 xff0c 但是
  • PX4代码中LIDAR-Lite v3激光测距仪PWM驱动

    调试了LIDAR Lite v3激光测距仪PWM驱动 xff0c 在这里做一下记录 飞控硬件是pixhawk1 xff0c PX4软件版本为1 7 3 按照官方教程进行接线和配置 xff0c 链接为 https docs px4 io en
  • PWM波控制舵机总结

    文章转载自 https www cnblogs com zhoubatuo p 6138033 html 一 关于舵机 xff1a 舵机 xff08 英文叫Servo xff09 xff1a 它由直流电机 减速齿轮组 传感器和控制电路组成的
  • PX4飞控之PWM输出控制

    PX4飞控之PWM输出控制 多旋翼电调如好盈XRotor xff0c DJI通用电调等都支持PWM信号来传输控制信号 常用的400Hz电调信号对应周期2500us xff0c 一般使用高电平时间1000us 2000us为有效信号区间 xf
  • 怎么把PWM信号转为模拟量

    有一个测量位置变化的位置传感器 xff0c 用万用表电压档测量传感器的输出信号 xff0c 结果显示的是模拟量信号 xff0c 即位置和信号输出大小呈线性关系 但是 xff0c 用示波器 xff08 Picoscope 4227 xff09
  • 用PWM控制舵机(以是stm32为例)

    因为做校创需要用到舵机 xff0c 以前知道大致的理论 xff0c 因此看了一些帖子 xff0c 总结一下被以后查看 什么是PWM波 PWM就是脉冲宽度调制 xff0c 也就是占空比可变的脉冲波形 pwm的占空比 xff0c 就是指高电平保
  • 电机控制基础——定时器基础知识与PWM输出原理

    单片机开发中 电机的控制与定时器有着密不可分的关系 无论是直流电机 步进电机还是舵机 都会用到定时器 比如最常用的有刷直流电机 会使用定时器产生PWM波来调节转速 通过定时器的正交编码器接口来测量转速等 本篇先介绍定时器的基础知识 然后对照
  • 魔方机器人之下位机编程-----两种串口通信方式的比较

    由于上位机软件的串口通信部分和魔方复原算法部分已经完成 接下来的一步就是如何将魔方复原的具体步骤 字符串的形式 通过串口发送给单片机MC9S12XS128单片机了 调试的过程中 采用了两种串口通信的方式 一种是查询的方式 另一种是中断的方式
  • STM32 使用TIM2_CH1(PA15) 输出10K PWM信号

    PA15 gt TIM2 Remap CH1 1 apb init RCC APB1PeriphClockCmd RCC APB1Periph TIM2 ENABLE RCC APB2PeriphClockCmd RCC APB2Perip
  • STM32的PWM控制4个舵机

    本人虽然接触STM32快半年了 但是最近才开始系统的学习STM32 建议一边学 一边做东西 能够更快的提升自己 我用的定时器是TIM3 所以我会把我出现的问题 分享给大家 希望大佬多多指教 因为我先进行部分映射 但是控制某个舵机的PB4引脚
  • PMIC驱动之—PMIC硬件相关知识

    PMIC 电源管理集成电路 Power Management IC 在之前项目中 驱动最小系统 对于PMIC这块儿很懵懂 故抽时间查看一些优秀博文及资料 加强对电源管理的理解 本文介绍 PMIC 硬件电路相关的一些知识 在此作一些阶段性的学
  • RK3568 GPIO 按键事件响应

    目录 adb shell getevent查看事件 设备树添加事件驱动 cat查看事件详细内容 author daisy skye的博客 CSDN博客 嵌入式 Qt Linux领域博主 adb shell getevent查看事件 130
  • RK3568资料汇总

    文档资料 野火 https doc embedfire com products link zh latest linux ebf lubancat html 正点原子 http 47 111 11 73 docs boards arm l
  • STM32通用定时器输出PWM控制舵机 —— 重装载值、比较值、当前值

    参考 stm32 定时器输出PWM原理及工作原理 控制舵机 作者 点灯小哥 发布时间 2021 03 09 23 17 52 网址 https blog csdn net weixin 46016743 article details 11

随机推荐

  • BindingException:Invalid bound statement (not found)异常

    一 前言 本文的mybatis是与springboot整合时出现的异常 xff0c 若使用的不是基于springboot xff0c 解决思路也大体一样的 二 从整合mybatis的三个步骤排查问题 但在这之前 xff0c 我们先要知道整合
  • SQL中case when用法详解及使用案例

    一 语法 Case具有两种格式 简单Case函数和Case搜索函数 简单Case函数格式 xff1a CASE 列名 WHEN 条件值1 THEN 选项1 WHEN 条件值2 THEN 选项2 ELSE 默认值 END Case搜索函数 x
  • 想入行C++游戏脚本制作?首先听听7年经验大佬怎么说?

    先自我介绍一下 xff0c 七年的程序开发经验 xff0c 在小一线城市税后2W多点 xff0c 本应过着很舒适的生活 xff0c 每天喝点小酒 xff0c 玩玩游戏 但自从入了A股 xff0c 一切都改变了 xff0c 如今的我 xff0
  • 大学刚毕业,用10000小时,走进字节跳动拿了offer

    前言 xff1a 没有绝对的天才 xff0c 只有持续不断的付出 对于我们每一个平凡人来说 xff0c 改变命运只能依靠努力 43 幸运 xff0c 但如果你不够幸运 xff0c 那就只能拉高努力的占比 2020年7月 xff0c 我有幸成
  • tensorflow中tfrecord数据操作

    前言 xff1a 为了更加展示tfrecord数据的相关操作 xff0c 笔者后续又写了一个实践的简单例子进一步解释 xff0c 具体可以看 xff1a TFrecords 制作数据集小例子 xff08 多标签 xff09 爱吃火锅的博客
  • 软件测试阶段

  • VR技术类毕业论文文献有哪些?

    本文是为大家整理的VR技术主题相关的10篇毕业论文文献 xff0c 包括5篇期刊论文和5篇学位论文 xff0c 为VR技术选题相关人员撰写毕业论文提供参考 1 期刊论文 运动炫科技 智慧赢未来 VR技术在体育领域内的应用与展望 期刊 xff
  • CentOS7防火墙添加端口

    CentOS7防火墙添加端口 CentOS防火墻添加端口比较简单 xff0c 三步走 xff08 皆以root用户执行 xff0c 或者用sudo命令 xff09 xff1a 1 查看开发的端口 firewall span class to
  • 手写一个--生产者消费者模式

    文章目录 前言wait notify方法实现生产者消费者模型1 使用Object的wait notify 方法2 使用Lock和Condition的await signal 方法3 使用BlockingQueue阻塞队列方法 前言 生产者消
  • C语言中static关键字用法和作用

    static修饰的对象 xff1a static关键字可以修饰 xff1a 局部变量 全局变量 函数 static修饰后改变了什么 xff1f 1 改变了生存周期 xff1b 就是一个变量 函数从分配内存去表示到回收内存的过程 2 改变了作
  • c语言中NULL到底是什么?

    C语言中NULL到底是什么 xff1f 1 NULL在C C 43 43 中定义为 xff1a ifdef cplusplus 定义这个符号就表示当前是C 43 43 环境 define NULL 0 在C 43 43 中NULL就是0 e
  • register关键字详解

    前言 xff1a 编译器的优化很大程度上就是通过数据流分析 调整读取内存的顺序等 xff0c 减少CPU对内存的读写 因为内存的运行速度相对于CPU是很慢的 xff0c 计算机中添加cache就是为了解决CPU和内存运行速度差异过大的问题
  • 海思烧录工具HiTool的使用方法以及烧录uboot

    1 什么是HiTool HiTool是海思公司提供的用于海思芯片的烧录工具 xff0c 可用于烧录uboot kernel rootfs等 这里只是简单的介绍用HiTool通过串口去烧写uboot xff0c 更加仔细的使用方法可以参考海思
  • /etc/profile文件简单介绍

    什么是 etc profile文件 etc profile文件为系统的每个用户设置环境变量信息 此文件的修改会影响到所有用户 想了解更多细节内容可以用 xff1a vi etc profile 命令进行查看 etc profile文件和 b
  • 五月再不跳槽,就晚了

    从时间节点上来看 xff0c 3月 4月是每年跳槽的黄金季 xff01 之后的五月也会放出一些岗位 以 BAT 为代表的互联网大厂 xff0c 无论是薪资待遇 还是平台和福利 xff0c 都一直是求职者眼中的香饽饽 xff0c 大厂经历 在
  • I2C通信协议详解和通信流程分析

    1 I2C通信特征 1 1 物理接口 xff1a SCL 43 SDA 1 SCL serial clock xff1a 时钟线 xff0c 传输CLK信号 xff0c 一般是I2C主设备向从设备提供时钟的通道 2 SDA serial d
  • 用LED驱动框架注册led设备的示例代码

    1 LED驱动框架分析 参考博客 xff1a 内核LED驱动框架讲解以及led设备注册示例代码 xff1b 2 简单的用LED驱动框架注册led设备的代码 span class token macro property span class
  • 【C++入门】静态成员详解(定义、实现原理、使用注意事项)

    1 类的静态成员 1 在类中用static修饰成员 xff0c 则该成员是静态成员 xff1b 2 静态成员是属于类本身的 xff0c 所有类的对象共享 xff1b 3 类的对象都可以访问静态成员 xff0c 但是所有类的成员访问的静态成员
  • pci总线协议学习笔记——PCI总线基本概念

    1 pci总线概述 1 PCI xff0c 外设组件互连标准 Peripheral Component Interconnection xff0c 是一种由英特尔 xff08 Intel xff09 公司1991年推出的用于定义局部总线的标
  • RK3568芯片开发笔记——调试pwm控制红外功能

    1 PWM介绍 参考博客 xff1a ARM芯片开发 xff08 S5PV210芯片 xff09 定时器 看门狗 RTC xff1b 2 配置pwm功能的方法 1 内核层 xff1a 内核代码里有pwm子系统 xff0c 里面有pwm相关函