使用TIMER計算外部脈沖個數方法

發布時間:2019年07月25日 16:07    發布者:Tronlong818
1        前言

本例程介紹使用TIMER的寄存器實現最基本的定時功能,輸入捕獲,輸入捕獲模式可以用來測量脈沖寬度或者測量頻率。AM335x開發板有832位通用定時器,DMTIMER1是用于操作系統(OS)毫秒定時器,用于操作系統時鐘,DMTIMER4-DMTIMER7作為輸出引腳。

圖片56.jpg

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

圖片57.jpg

2

KDIR修改為kernel源碼所在目錄(kernel必須已經編譯過,如果沒編譯,可以參照用戶手冊Linux內核編譯方法》來編譯內核)。

圖片58.jpg

3

2.2        修改pps-gmtimer.c文件

pps-gmtimer.c文件添加頭文件#include "dmtimer.h"

Host#                vi pps-gmtimer.c

圖片59.jpg

4

圖片60.jpg

5

如下圖,timespec修改為timespec64,修改完成后保存退出。

圖片61.jpg

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 ./

圖片62.jpg

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 ./

圖片63.jpg

8

生成的pps-dmtimer.ko拷貝SD系統啟動卡的boot分區

3        修改設備樹

(1) 修改內核源碼下的設備樹文件am335x-icev2.dts,添加以下Timer4節點

Host#                vi arch/arm/boot/dts/am335x-icev2.dts

圖片64.jpg

9

添加節點

&pps_gmtimer {

        status = "okay";

        pinctrl-names = "default";

        pinctrl-0 = <&gps_pps_pins>;

};

圖片65.jpg

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

              >;

};

圖片66.jpg

11

(2) 修改內核源碼下設備樹文件am33xx.dtsi

Host#                vi arch/arm/boot/dts/am33xx.dtsi

圖片67.jpg

12

增加Timer4結點

pps_gmtimer:pps_gmtimer {

               compatible = "pps-gmtimer";

                timer = <&timer4>;

                 use-tclkin = <1>;

                 status = "okay";

                 };

圖片68.jpg

13

(3) 修改am335x-icev2.dts文件加入PINMUX

Host#                vi arch/arm/boot/dts/am335x-icev2.dts

圖片69.jpg

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] */

                >;

        };

圖片70.jpg

15

gpio_keys節點下加上PINMUX的說明

pinctrl-0 = <&user_keys_default>;

修改pinctrl-0 = <&user_keys_default &gpio_pins>;

圖片71.jpg

16

如果eMMC核心板,按照如上修改完成后保存退出,編譯設備樹將編譯生成的設備樹拷貝到SD系統啟動卡的”rootfs/boot”目錄。

如果是NAND FLASH核心板,除了做如上修改,還需要修改am335x-icev2-nand.dts文件因為am335x-icev2-nand.dts中已經GPMC_ADVN_ALE配置為gpmc_advn_ale功能,將配置注釋如下圖

圖片72.jpg

17

修改完成后,保存退出編譯生成am335x-icev2-nand.dtb文件,將am335x-icev2-nand.dtb命名為am335x-icev2.dtb拷貝至SD系統啟動卡的”rootfs/boot”目錄


歡迎分享本文,轉載請保留出處:http://www.idqzf.tw/thread-566375-1-1.html     【打印本頁】
Tronlong818 發表于 2019-7-25 16:31:31
更多幫助
銷售郵箱:[email protected]       
技術郵箱:[email protected]
創龍總機:020-8998-6280
技術熱線:020-3893-9734
創龍官網:www.tronlong.com
技術論壇:www.51ele.net
線上商城:https://tronlong.taobao.com
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
回頂部
gpk钱龙捕鱼客户端 猛龙传奇打法 西游争霸怎么看吐分 pt电子哪个容易爆分 北京pk赛车在线预测 dnf手游马戏团怎么过 非凡炸金花玩的人多吗 福彩大小单双 重庆时时官网开奖网址 送20元棋牌游戏平台电玩 z正版资料大全 网上合买彩票是骗局吗 足球即时比007 姚记娱乐下载 双喜娱乐在线开户 一台电脑十个手机怎么赚钱 快3准确定跨度