驱动开发之PWM输出控制(设备树详解版)

在做项目的过程中自己找资料摸索出了一套适合PWM驱动的编写方法,下面让我来带大家从头开始编写PWM驱动吧!

首先附上设备树

	beep@139D0000{
		compatible= "fs4412,beep";
		reg=<0x139D0000 0x24>;
		clocks = <&clock 336>;
		clock-names = "timers";
		pinctrl-0 = <&pwm0_out>;
		pinctrl-names = "default";
	
	};

我用PWM控制蜂鸣器,139D0000是PWM寄存器的基地址,如下图:

        想必到这里beep@139D0000大家应该知道是什么意思了。

        接下来就是compatible属性,这个是在写驱动代码的时候匹配要用到的,到时候看下面的驱动代码就会知道。  

        reg属性就是寄存器的其实地址,加上所有寄存器的长度0x24就是36个字节也就是9个寄存器          clocks属性是PWM要用到的时钟编号就是336,具体可以在linux源码目录下的Documentation/devicetree/bindings/clock/exynos4-clock.txt可以找到(我用的芯片是exynos4,具体芯片看你自己的)如下图:

        

        接下来的clock-names属性的值是"timers",这个值在驱动代码中获取时钟频率的时候也需要用到,要记住了!!

        pinctrl-0的属性定义后就可以在驱动代码中使用pinctrl子系统的API(Pinctrl(Pin Control)子系统是一个用于管理和控制硬件引脚的框架),需要注意的是这个值直接填默认就行。

        到此为止,相信大家已经对设备树有一个比较好的理解了。

        接下来就是驱动代码的分析。

        先附上代码。代码都有详细的注释。看驱动代码前先补充一点。

       

设备树的机制其实也是总线型的 BUS/Dev/Drv 模型,只是编写 Dev 的方式变了。即编写 设备树文件 .dts。dst 文件会被编译成 dtb 文件。dtb文件会传给内核, 内核会解析dtb文件, 构造出一系列的 device_node 结构体,

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值