- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux PWM framework(1)_简介和API描述
作者: HYPERLINK /author/2 \o runangaozhong@163.com wowo?发布于:2015-10-11 15:45 分类: HYPERLINK /sort/comm 通信类协议
/comm/pwm_overview.html
1. 前言
PWM是Pulse Width Modulation(脉冲宽度调制)的缩写,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,其本质是一种对模拟信号电平进行数字编码的方法。在嵌入式设备中,PWM多用于控制马达、LED、振动器等模拟器件。
PWM framework是kernel为了方便PWM driver开发、PWM使用而抽象出来的一套通用API,之所以要分析该framework,原因如下:
1)PWM接口,本质上一种通信协议,和I2C、SPI、USB、WIFI等没有任何差别。因此,本文将会是kernel通信协议有关framework的分析文章的第一篇。
2)它太简单了!但是,虽然简单,思路却大同小异,因而非常适合???第一篇。
3)我计划整理显示子系统的分析文章,而PWM,是显示子系统中最基础的那一个。
闲话少说,言归正传!
2. 软件框架及API汇整
PWM framework非常简单,但它同样具备framework的基本特性:对上,为内核其它driver(Consumer)提供使用PWM功能的统一接口;对下,为PWM driver(Provider)提供driver开发的通用方法和API;内部,抽象并实现公共逻辑,屏蔽技术细节。下面我们通过它所提供的API,进一步认识PWM framework。
2.1 向PWM consumer提供的APIs
对consumer而言,关注PWM的如下参数:
1)频率
PWM的频率决定了所模拟出来的模拟电平的平滑度,通俗的讲,就是逼真度。不同的模拟器件,对期待的频率是有要求的,因此需要具体情况具体对待。
另外,人耳能感知的频率范围是20Hz~16KHz,因此要注意PWM的频率不要落在这个范围,否则可能会产生莫名其妙的噪声。
2)占空比
占空比,决定了一个周期内PWM信号高低的比率,进而决定了一个周期内的平均电压,也即所模拟的模拟电平的电平值。
3)极性
简单的说,一个PWM信号的极性,决定了是高占空比的信号输出电平高,还是低占空比信号输出电平高。假设一个信号的占空比为100%,如果为正常极性,则输出电平最大,如果为翻转的极性,则输出电平为0。
4)开关
控制PWM信号是否输出。
基于上述需求,linux pwm framework向consumer提供了如下API:
1: /* include/linux/pwm.h */
2:
3: /*
4: * pwm_config - change a PWM device configuration
5: */
6: int pwm_config(struct pwm_device *pwm, int duty_ns, int period_ns);
7:
8: /*
9: * pwm_enable - start a PWM output toggling
10: */
11: int pwm_enable(struct pwm_device *pwm);
12:
13: /*
14: * pwm_disable - stop a PWM output toggling
15: */
16: void pwm_disable(struct pwm_device *pwm);
17:
18: /*
19: * pwm_set_polarity - configure the polarity of a PWM signal
20: */
21: int pwm_set_polarity(struct pwm_device *pwm, enum pwm_polarity polarity);
pwm_config,用于控制PWM输出信号的频率和占空比,其中频率是以周期(period_ns)的形式配置的,占空比是以有效时间(duty_ns)的形式配置的。
pwm_enable/pwm_disable,用于控制PWM信号输出与否。
pwm_set_polarity,可以更改pwm信号的极性,可选参数包括normal(PWM_POLARITY_NORMAL)和inversed(极性翻转,PWM_POLARITY_INVERSED)两种。
上面的API都以struct pwm_device类型的指针为操作句柄,该
文档评论(0)