手把手带你写一个中断输入设备驱动
时间:2021-11-09 14:16:13
手机看文章
扫描二维码
随时随地手机看文章
[导读][导读]大家好,我是逸珺。首先说声抱歉,最近迷上钓鱼了,有时候晚上出去夜钓大板鲫了,停更了一段时间。来几张鱼获图片:技术还是不太到家,遇到几次大鲤鱼都给溜了,心有不甘,所以最近花了比较多的时间。言归正传,今天来分享一下以前写一个中断输入设备驱动案例,希望对有需要的朋友能有所帮助。...
[导读] 大家好,我是逸珺。首先说声抱歉,最近迷上钓鱼了,有时候晚上出去夜钓大板鲫了,停更了一段时间。来几张鱼获图片:言归正传,今天来分享一下以前写一个中断输入设备驱动案例,希望对有需要的朋友能有所帮助。
背景介绍
在一个项目中,有这样一个需求:主控芯片采用ZYNQ,需要采集外部一个脉冲编码输入信号,这个信号是一个脉冲波形,脉冲数量代表测量结果。比如这有可能是一个电机的霍尔信号输出,代表电机的转速,也有可能是一个光栅编码器的脉冲输出,是什么并不重要。这个电路本身,利用光耦实现了输入测设备信号与采集端的电气隔离。由于PS端该Bank的电平为3.3V,所以光耦的另一侧也是3.3V。ZYNQ的PS端运行Linux程序,所以在这个场景下,要从应用程序的角度将外部输入信号用起来,就需要实现这样一个设备驱动程序:创建设备
在ZYNQ下,使用petalinux工具链,当然本文中对于写这个驱动程序本身换成其他的处理器从代码的角度是类似的。1.先运行一下工具链环境变量脚本:source /opt/pkg/petalinux/settings.sh
当然也可以不用手动这样运行,设置成linux开发主机开机自动运行,这里就不赘述怎么设置了,网上很多介绍。2.创建设备petalinux-create -t modules --name di-drv
这样在现有的工程下,就自动创建设备文件:./project-spec/meta-user/recipes-modules/di-drv/files/di-drv.c
修改设备树
./project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi 中添加/include/ "system-conf.dtsi"
/ {
amba {
pinctrl_di_default: di-default {
mux {
groups = "gpio0_0_grp";
function = "gpio0";
};
conf {
pins = "MIO0";
io-standard = <1>;
bias-high-impedance;
slew-rate = <0>;
};
};
};
di {
compatible = "di-drv";
pinctrl-names = "default";
pinctrl-0 = <