使用TIMER计算外部脉冲个数方法

发布时间:2019-7-25 16:30    发布者:Tronlong818
1        前言
本例程介绍使用TIMER的寄存器实现最基本的定时功能,输入捕获,输入捕获模式可以用来测量脉冲宽度或者测量频率。AM335x开发板有832位通用定时器,DMTIMER1是用于操作系统(OS)毫秒定时器,用于操作系统时钟,DMTIMER4-DMTIMER7作为输出引脚。
1
例程源码位于光盘资料”Demo\pps-dmtimer\src”
本次编译生成的设备树文件以及pps-dmtimer.ko驱动模块和脚本文件gpio.sh位于光盘资料”Demo\pps-dmtimer\bin”下。
1 编译pps-dmtimer.ko驱动模块2.1        修改Makefile文件
工程源码位于光盘”Demo\pps-dmtimer\src”下,将pps-dmtimer工程源码拷贝Ubuntu任意目录进入pps-dmtimer工程源码目录,修改Makefile配置文件。
Host#                vi Makefile
2
KDIR修改为kernel源码所在目录(kernel必须已经编译过,如果没编译,可以参照用户手册Linux内核编译方法》来编译内核)。
3
2.2        修改pps-gmtimer.c文件
pps-gmtimer.c文件添加头文件#include "dmtimer.h"
Host#                vi pps-gmtimer.c
4
5
如下图,timespec修改为timespec64,修改完成后保存退出。
6
内核源码下的”arch/arm/plat-omap/include/plat/dmtimer.h”文件拷贝到pps-dmtimer工程源码根目录
Host#                cp /home/tronlong/AM335x/kernel/Linux-4.4.12/arch/arm/plat-omap/include/plat/dmtimer.h ./
7
2.3        编译pps-dmtimer.ko驱动
执行如下指令进行编译编译完成后在源码根目录下生成pps-dmtimer.ko驱动模块
Host#                cp /home/tronlong/AM335x/kernel/Linux-4.4.12/arch/arm/plat-omap/include/plat/dmtimer.h ./
8
生成的pps-dmtimer.ko拷贝SD系统启动卡的boot分区
3        修改设备树
(1) 修改内核源码下的设备树文件am335x-icev2.dts,添加以下Timer4节点
Host#                vi arch/arm/boot/dts/am335x-icev2.dts
9
添加节点
&pps_gmtimer {
        status = "okay";
        pinctrl-names = "default";
        pinctrl-0 = <&gps_pps_pins>;
};
10
添加PINMUX开发板上的”GPIO/eHRPWM/eQEP/I2C”接口引出GPMC_ADVN_ALE配置TIMER4功能(GPMC_ADVN_ALETIMER4复用),将开发板引出的XDMA_EVENT_INTR1配置为TCLKIN,接口以及详细配置请查阅光盘资料”Datasheet\核心板芯片\CPU的数据手册以及开发板底板原理图。配置如下
gps_pps_pins: gps_pps_pins {
                pinctrl-single,pins = <
                        AM33XX_IOPAD(0x9b4, PIN_INPUT | MUX_MODE2)   //TCLKIN
                        AM33XX_IOPAD(0x890, PIN_INPUT | MUX_MODE2)   //TIMER4
              >;
};
11
(2) 修改内核源码下设备树文件am33xx.dtsi
Host#                vi arch/arm/boot/dts/am33xx.dtsi
12
增加Timer4结点
pps_gmtimer:pps_gmtimer {
               compatible = "pps-gmtimer";
                timer = <&timer4>;
                 use-tclkin = <1>;
                 status = "okay";
                 };
13
(3) 修改am335x-icev2.dts文件加入PINMUX
Host#                vi arch/arm/boot/dts/am335x-icev2.dts
14
将开发板上的”GPIO/eHRPWM/eQEP/I2C”接口引出IO作为脉冲输出,这里是选取GPIO1[15]作为外部脉冲输出。
gpio_pins: gpio_pins {
                pinctrl-single,pins = <
                        AM33XX_IOPAD(0x83c, PIN_OUTPUT | MUX_MODE7) /* (U13) GPIO1[15] */
                >;
        };
15
gpio_keys节点下加上PINMUX的说明
pinctrl-0 = <&user_keys_default>;
修改pinctrl-0 = <&user_keys_default &gpio_pins>;
16
如果eMMC核心板,按照如上修改完成后保存退出,编译设备树将编译生成的设备树拷贝到SD系统启动卡的”rootfs/boot”目录。
如果是NAND FLASH核心板,除了做如上修改,还需要修改am335x-icev2-nand.dts文件因为am335x-icev2-nand.dts中已经GPMC_ADVN_ALE配置为gpmc_advn_ale功能,将配置注释如下图
17
修改完成后,保存退出编译生成am335x-icev2-nand.dtb文件,将am335x-icev2-nand.dtb命名为am335x-icev2.dtb拷贝至SD系统启动卡的”rootfs/boot”目录

本文地址:https://www.eechina.com/thread-566375-1-1.html     【打印本页】

本站部分文章为转载或网友发布,目的在于传递和分享信息,并不代表本网赞同其观点和对其真实性负责;文章版权归原作者及原出处所有,如涉及作品内容、版权和其它问题,我们将根据著作权人的要求,第一时间更正或删除。
Tronlong818 发表于 2019-7-25 16:31:31
更多帮助
销售邮箱:sales@tronlong.com       
技术邮箱:support@tronlong.com
创龙总机:020-8998-6280
技术热线:020-3893-9734
创龙官网:www.tronlong.com
技术论坛:www.51ele.net
线上商城:https://tronlong.taobao.com
您需要登录后才可以发表评论 登录 | 立即注册

厂商推荐

  • Microchip视频专区
  • 5分钟详解定时器/计数器E和波形扩展!
  • 了解一下Microchip强大的PIC18-Q24 MCU系列
  • 无线充电基础知识及应用培训教程2
  • 基于CEC1712实现的处理器SPI FLASH固件安全弹性方案培训教程
  • 贸泽电子(Mouser)专区
关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表