平台:迅为iMX6UL开发板 
说明:PWM 配置和测试方法
测试中不需要添加额外驱动,是基于系统用户态的 sysfs,可以使用命令来直接操作底层。

1 iMX6UL的PWM简介
打开 iMX6UL 的 datasheet,搜索 PWM 关键词,如下图所示。
PWM5-PWM8 的地址如下。

PWM1-PWM4 的地址如下。

可以知道 iMX6UL 最多可以支持 8 路 PWM 输出,也查出了物理地址。

2 iMX6UL的PWM0测试
所有的 ARM 板,默认情况下背光都是采用的 PWM 来调整的,那么它的 PWM 时钟地址
等参数肯定是配置好的,我们可以先使用背光对应 PWM 来做初步的测试。

2.1 硬件简介
打开 iMX6UL 的底板原理图,如下图所示,可以看到背光使用的 PWM 网络标号是
“BLT_PWM”。

如下图所示,“BLT_PWM”和“GPIO_8”接到了一起。

在核心板原理图中搜索“GPIO_8”,可以查到对应的这个网络标号对应的 PAD 为
“GPIO1_IO08”,如下图所示。

2.2 设备树文件分析和修改
在内核源码目录下,打开“arch/arm/boot/dts/imx6ul-14x14-evk.dts ”设备树文件,
在其中搜索“GPIO1_IO08”,如下图所示,管脚已经配置了。

接着搜索“pinctrl_pwm1”,查看在哪里注册了,如下图所示,可以看到“pwm1”中
调用了。


接着搜索“pwm1”,可以看到 pwm1 在背光驱动中调用了,这里仿照下图,将其注释
掉。

请注意:如果这里注释掉,屏幕将无法使用,如果需要使用屏幕,务必在测试完成之后恢
复原样。
然后重新编译设备树文件,烧写到开发板中。

2.3 pwm0测试
烧写新的镜像之后,在串口控制台中依次输入以下命令:
echo 0 > sys/class/pwm/pwmchip0/export
echo 1 > /sys/class/pwm/pwmchip0/pwm0/enable
echo 1000000 > /sys/class/pwm/pwmchip0/pwm0/period
echo 500000 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle
第一个命令为设置 pwm 输出,跳出 pwm0 目录下的节点;
第二个命令为使能 pwm0;
第三个命令为设置周期;
第三个命令为设置占空比。
最后使用示波器测试下面 R129 电阻,可以看到 pwm 输出。

3 PWM2分析和测试
PWM1 测试因为内核中肯定将时钟和 IO 配置好了,我们只需要将背光设备注释掉就可以
完成测试。本小节介绍 PWM2,更进一步介绍时钟和 IO 配置以及 PWM2 注册。
3.1 datasheet和原理图分析
在 datasheet中,搜索 PWM2,如下图所示,可以看到“GPIO1_IO09”这个 pad 可以
被配置为 PWM2。

在核心板原理图上,搜索“GPIO1_IO09”,如下图所示,可知网络标号为
“GPIO_9”。

在底板原理图中搜索“GPIO_9”,如下图所示,可以看出它通过 J38 的管脚 5 引出。

通过在原理图中搜索可以发现这个管脚没有接到其它设备上。

3.3 时钟配置
回到内核源码,很明显在“arch/arm/boot/dts/imx6ul-14x14-evk.dts”设备树文件中
没有对 PWM1 进行时钟配置,但是我们在前面测试 PWM1 的时候是能成功的,这表明它一
定在其它地方配置了。
打开设备树文件,查看其包含的头文件,如下图所示,应该是和设备树同一目录目录下的
“imx6ul.dtsi”。

将其打开,搜索“pwm1”,如下图所示。

如上图所示,可以看到 pwm1 中引用了物理地址“0208_0000”,引用时钟 PWM 时钟
配置“IMX6UL_CLK_PWM1”。在最前面介绍 PWM 的时候,其实有提到物理地址,如下图
所示,这里和 datasheet上是一致(肯定一致,不然前面测试一定不行)。

接着看 pwm2,默认定义了,但是没有将 PWM 时钟打开,如下图所示,将两个
“IMX6UL_CLK_DUMMY”修改为“IMX6UL_CLK_PWM2”。

至此 PWM2 的时钟配置完成,其它 PWM 时钟也可以依照这样的方式,在这个文件中打
开时钟或者新增,新增的话,要注意其中的中断号,PWM1 为 83,PWM2 为 84,依次类
推,仿照着来就成。

3.4 管脚配置和设备注册
前一小节介绍了时钟配置,回到“arch/arm/boot/dts/imx6ul-14x14-evk.dts”设备树
文件,先搜索“PWM2”和“pwm2”,这里搜索 PWM2 是因为有其它 pad 是可能被配置
为 pwm2,如果有配置配置,则宏定义中一定有 PWM2。搜索发现“PWM2”和“pwm2”
都没有。
然后搜索“GPIO1_IO09”,发现被定义为 SD1 的 reset,直接注释掉,如下图所示。

如下图所示,在 pinctrl_pwm1 后面添加 pinctrl_pwm2,将“GPIO1_IO09”配置为
PWM2 模式。

上图添加的代码如下:
pinctrl_pwm2: pwm2grp {
fsl,pins = <
MX6UL_PAD_GPIO1_IO09__PWM2_OUT 0x110b0
>;
};
接着添加 PWM2 设备注册的代码,如下图所示。

上图添加的代码如下:
&pwm2 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_pwm2>;
status = "okay";
};
至此,时钟,管脚配置,设备注册全部完成。
重新编译烧写到开发板。

3.5 测试
新的镜像烧写之后,依次使用以下命令:
echo 0 > sys/class/pwm/pwmchip1/export
echo 1 > /sys/class/pwm/pwmchip1/pwm0/enable
echo 1000000 > /sys/class/pwm/pwmchip1/pwm0/period
echo 500000 > /sys/class/pwm/pwmchip1/pwm0/duty_cycle
然后使用示波器测试 J38 的管脚 5,可以观察到有脉冲波信号。
剩余的 6 路 PWM 可以按照本文档介绍的思路实现,用户如果有需要,可以自行实现。

转自:http://www.topeetboard.com

迅为iMX6UL开发板驱动-PWM测试方法相关推荐

  1. 迅为IMX6UL开发板

    迅为iMX6UL开发板采用核心板加底板形式,核心板使用邮票孔方式连接,牢固耐用.处理器ARM®Cortex®-A7内核,运行速度高达528 MHz.512MDDR内存,8G EMMC存储,板截双网口, ...

  2. 迅为linux下串口,迅为iMX6UL开发板多路串口开发板接口详解

    迅为iMX6UL开发板 一.底板硬件描述: 1.POWER电源接口 电源输入为5V/2A+,给核心板提供5V电源,给底板供电. 原理图部分如下图所示. 电源接口位置如下图所示. 2.SWITCH电源开 ...

  3. 迅为-IMX6UL开发板丨双网口丨双CAN总线丨4路USB HOST丨2路串口、6路插座引出,共8路串口丨1路RGB信号丨2路LVDS信号

    迅为iMX6UL开发板多路串口开发平台 迅为i.MX 6UL开发板基于ARM Cortex-A7内核,主频高达528 MHz,内存:512MDDR3 存储:8G EMMC,支持2路CAN,2路百兆以太 ...

  4. CortexA7工业级迅为-iMX6UL开发板硬件和资料介绍

    CortexA7工业级迅为-iMX6UL开发板硬件和资料介绍 商业级核心板 ARM Cortex-A7架构 主频高达528 MHz 核心板512M DDR内存 8G EMMC 存储 运行温度:-20℃ ...

  5. 迅为linux下串口,迅为iMX6UL开发板多路串口开发平台接口详解

    原标题:迅为iMX6UL开发板多路串口开发平台接口详解 iMX6UL开发板 核心板参数 尺寸:38mm*42mm CPU:iMX6UL 主频528MHz ARM Cortex-A7架构 单核 内存:5 ...

  6. 迅为iMX6UL开发板多路串口开发平台接口详解

    iMX6UL开发板 核心板参数 尺寸 38mm*42mm CPU iMX6UL 主频528MHz   ARM Cortex-A7架构 单核 内存 512MDDR 存储 8G EMMC 工作电压 5V电 ...

  7. 迅为iTOP-4412开发板-驱动-显卡支持HDMI_1080P分辨率

    文档介绍迅为 iTOP-4412开发板 显卡驱动通过修改之后,能够支持 HDMI 的 1080P 分辨率输 出. 请注意:本文档针对精英版和全能版,2018 年及以后迅为发布的内核源码,包含 Andr ...

  8. imx6 linux 时钟,迅为-iMX6开发板-驱动-实时时钟RTC以及Linux-c测试例程

    当Linux开发者谈论一个实时时钟,他们通常指的是某种能记录墙上时间,并且有备用电 池,以至于在系统关机的时候仍然可以工作的器件. Linux 有两个系列广泛兼容的用户空间 RTC 设备节点: /de ...

  9. 中国芯-国产系统+国产处理器-迅为2K1000开发板网络快速测试方法

    硬件连接方式 1 连接调试串口 首先我们使用配带的 232 串口数据线连接和 usb 转串口连接起来, 然后将 232 串口线公头一端连接到开发板的 CON2 座子上,如下图所示: 232 串口线连接 ...

最新文章

  1. linux查看服务器负载均衡,Linux服务器负载均衡LB
  2. Google Inc.:Google APIs:23' 解决方案
  3. oracle 11g中的自动维护任务管理
  4. 多线路虚拟主机解决方案
  5. 使用FlowDroid生成Android应用程序的函数调用图
  6. 7_23 day26 14min面向对象总结
  7. 使用badboy录制脚本 结合Jmeter一起测试。
  8. Java当中捕获异常
  9. matlab编写基差,到期交割临近 基差迟迟不跌
  10. 总结下2018年,我们归纳了几种将对智能安防产生影响的技术发展趋势
  11. 设计模式系列--Singleton
  12. Java使用itextpdf生成PDF文件并添加斜面水印并完成下载(图片导出pdf)
  13. 解析数论导轮中的数学实验(python)
  14. 微信小程序UI组件库推荐
  15. WebRoot到底是什么鬼?我改它的名可以吗?
  16. MongoDB 在Linux下 数据时间问题 .Net Core
  17. 何为ISM频段?ISM频段主要频率有哪些?
  18. dao层和serivce层的作用和区别
  19. 梁漱溟:人生的三种关系
  20. linux 命令 置顶,[置顶] Linux命令惯用法

热门文章

  1. Arduino实验三十 PS2操纵杆实验
  2. 文字图片滚动代码-无缝滚动,强!!!
  3. 实时自动驾驶车辆定位技术都有哪些?(视觉/Lidar/多传感器数据融合)
  4. warning: require(./admin.php),WordPress提示require_once() Failed opening required的解决方法
  5. Futuremark 3DMark 2.17.7137,3DMark兼容性强大
  6. 域名管理百科:如何进行whois域名查询?(中科三方)
  7. DES 加密算法的实现
  8. (一)大数据学习之shell脚本
  9. python中oo是什么意思_python中的OO
  10. 2022-11-28