在IMX6ul中,使用GPT定时器实现高精度延时

        在上一节讲解过了。IMX6UL中的EPIT定时器,这一节我们讲解通用寄存器
        在STM32中,我们使用过SYSTICK来实现高精度的延时。IMX6U当中没有SYSTICK定时器,但是IMX6U有其他的定时器,前面的EPIT以及这一节我们将要使用的GPT定时器来实现高精度的延时
        官方对于GPT的描述是通用定时器(GPT)模块接口。它同样作为软件驱动程序编程的参考。GPT具有一个32位向上计数器。定时器计数值可以在外部引脚上的事件发生时被捕获到一个寄存器中。捕获触发可以被编程为上升沿或/和下降沿。GPT还可以在输出比较引脚上生成事件,并在定时器达到编程值时产生中断。GPT具有一个12位预分频器,该预分频器可以从多个时钟源提供可编程的时钟频率。

        GPT(General Purpose Timer)定时器是一个32位向上定时器(也就是从0X00000000),GPT定时器也可以和一个比较值进行比较,当计数器和这个值相等的话就发生比较事件,产生比较中断。GPT定时器有一个12位的分频器,可以对GPT定时器的shizhongyuan进行分频,它的特性如下
        ①、一个可以选择时钟源的32位向上计数器
        ②、两个输入捕获通道,可以设置触发模式
        ③、三个输出比较通道,可以设置输出模式
        ④、可以生成捕获中断、比较中断和溢出中断
        ⑤、计数器可以运行在重新启动(restart)或(自由运行)free-run模式

        我们就按照上面一个一个介绍它的特性,首先它有五个可选择的时钟源分别如下图

        分别是ipg_clk_24M、GPT_CLK(外部时钟)、ipg_clk、ipg_clk_32k和ipg_clk_highfreq。

        GPT定时器结构如下图所示

        从左上角开始,此部分位GPT为定时器的时钟源,之后我们会ipg_clk作为GPT定时器时钟源,继续往右边走,有一个12位的分频器,也就是和EPIT一样可以设置0~4095的分频,也是分别对应1~4096分频
        分频完成后,进入到Timer Counter也就是GPT定时器内部的32位计数器,通过预分频器输出的时钟信号驱动计数器递增或递减。计数器可以与外部输入同步,并能够触发中断或输出事件,然后就是两天总线,分别是Counter Value Bus(计数器值总线),Processor Data Bus(处理器数据总线)
        首先Counter Value Bus主要用于传递计数器的当前计数值。定时器的计数器在时钟脉冲下递增或者递减,计数器的值通过Counte Value Bus被实时传输到其他模块中。如比较器,用于将当前的计数值与设定的输出寄存器中的值进行比较,或者其他模块例如中断模块,以便在计数器达到某个特定值时产生中断信号或者其他事件,与计数器之间的关系是,Counter Value Bus 从计数器输出,代表计数器的状态,并通过该总线发送给框图中的其他逻辑单元(如比较器、捕获单元等)。通过这条总线,外部模块可以实时获取计数器的当前值,用于比较和逻辑判断。
        那么Processor Data Bus,向定时器发送控制命令或配置数据,例如配置定时器的初始计数值(通过Timer Input Register),设置比较寄存器中的值,用于与计数值的值相比较,读取定时器当前的计数值,以便处理器能够获知定时器的状态。与定时器的关系即是Processor Data Bus 与定时器中的输入输出寄存器交互,它可以影响定时器的工作状态,比如通过Timer Input Reg 写入初始值,或者通过设置比较值来控制定时器的行为。同时,定时器的状态(比如当前计数值)也可以通过这条总线传递回处理器。
        通俗来讲两条总线的区别就是,Timer Counter的当前计数值通过 Counter Value Bus 被实时传递到定时器内部的其他模块(例如比较器),Processor Data Bus负责处理器与定时器之间的数据通信,处理器通过这条总线配置定时器并读取定时器的计数值。计数器既向 Counter Value Bus 提供实时的计数值,也通过 Processor Data Bus 与处理器进行数据交互,处理器可以通过读写寄存器来影响计数器的工作。

        

        那么我们接着看回来,GPT_CAPTURE1和GPT_CAPTURE2,是GPT中的两个输入捕获通道,这个模块用来捕获外部输入信号的时间戳。每当捕获信号触发时,计数器对的当前值会存入对应的捕获寄存器(Time

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值