imx6ull gpt高精度定时器

本文详细介绍了GPT定时器的工作原理,包括32位向上计数特性、分频器功能、输入捕获与输出比较通道,以及不同工作模式下的计数行为。解析了GPTx_CR、GPTx_PR和GPTx_SR寄存器的作用,阐述了如何配置时钟源、分频比和中断标志。

GPT 定时器是一个 32 位向上定时器(也就是从 0X00000000 开始向上递增计数), GPT 定时器也可以跟一个值进行比较,当计数器值和这个值相等的话就发生比较事件,产生比较中断。
GPT 定时器有一个 12 位的分频器,可以对 GPT 定时器的时钟源进行分频, GPT 定时器特性如下:
①、一个可选时钟源的 32 位向上计数器。
②、两个输入捕获通道,可以设置触发方式。
③、三个输出比较通道,可以设置输出模式。
④、可以生成捕获中断、比较中断和溢出中断。
⑤、计数器可以运行在重新启动(restart)或(自由运行)free-run 模式。
在这里插入图片描述
一共有五个时钟源,分别为: ipg_clk_24M、 GPT_CLK(外部时钟)、ipg_clk、ipg_clk_32k 和 ipg_clk_highfreq。

GPT 定时器有两种工作模式:重新启动(restart)模式和自由运行(free-run)模式,这两个工作模式的区别如下:
重新启动(restart)模式:当 GPTx_CR(x=1, 2)寄存器的 FRR 位清零的时候 GPT 工作在此模式。在此模式下,当计数值和比较寄存器中的值相等的话计数值就会清零,然后重新从0X00000000 开始向上计数,只有比较通道 1 才有此模式!向比较通道 1 的比较寄存器写入任何
数据都会复位 GPT 计数器。对于其他两路比较通道(通道 2 和 3),当发生比较事件以后不会复位计数器。
自由运行(free-run)模式:当 GPTx_CR(x=1, 2)寄存器的 FRR 位置 1 时候 GPT 工作在此模式下,此模式适用于所有三个比较通道,当比较事件发生以后并不会复位计数器,而是继续计数,直到计数值为 0XFFFFFFFF,然后重新回滚到 0X00000000。

GPTx_CR

在这里插入图片描述

**SWR(bit15):**复位 GPT 定时器,向此位写 1 就可以复位 GPT 定时器,当 GPT 复位完成以后此为会自动清零。

FRR(bit9): 运行模式选择,当此位为 0 的时候比较通道 1 工作在重新启动(restart)模式。当此位为 1 的时候所有的三个比较通道均工作在自由运行模式(free-run)。

CLKSRC(bit8:6): GPT 定时器时钟源选择位,为 0 的时候关闭时钟源;为 1 的时候选择ipg_clk 作为时钟源;为 2 的时候选择 ipg_clk_highfreq 为时钟源;为 3 的时候选择外部时钟为时钟源;为 4 的时候选择 ipg_clk_32k 为时钟源;为 5 的时候选择 ip_clk_24M 为时钟源。选择 ipg_clk 作为 GPT 定时器的时钟源,因此此位设置位 1(0b001)。

ENMODE(bit1): GPT 使能模式,此位为 0 的时候如果关闭 GPT 定时器,计数器寄存器保存定时器关闭时候的计数值。此位为 1 的时候如果关闭 GPT 定时器,计数器寄存器就会清零。

EN(bit): GPT 使能位,为 1 的时候使能 GPT 定时器,为 0 的时候关闭 GPT 定时器。

GPTx_PR

在这里插入图片描述

寄存器 GPTx_PR 我们用到的重要位就一个: PRESCALER(bit11:0),这就是 12 位分频值,可设置 0~4095,分别对应 1~4096 分频。

GPTx_SR

在这里插入图片描述ROV(bit5): 回滚标志位,当计数值从 0XFFFFFFFF 回滚到 0X00000000 的时候此位置 1。

IF2~IF1(bit4:3): 输入捕获标志位,当输入捕获事件发生以后此位置 1,一共有两路输入捕获通道。如果使用输入捕获中断的话需要在中断处理函数中清除此位。

**OF3~OF1(bit2:0):**输出比较中断标志位,当输出比较事件发生以后此位置 1,一共有三路输出比较通道。如果使用输出比较中断的话需要在中断处理函数中清除此位。接着看一下 GPT 定时器的计数寄存器 GPTx_CNT,这个寄存器保存着 GPT 定时器的当前计数值。最后看一下 GPT 定时器的输出比较寄存器 GPTx_OCR,每个输出比较通道对应一个输出比较寄存器,因此一个 GPT 定时器有三个 OCR 寄存器,它们的作都是相同的。以输出比较通道 1 为例,其输出比较寄存器为 GPTx_OCR1,这是一个 32 位寄存器,用于存放 32 位的比较值。当计数器值和寄存器 GPTx_OCR1 中的值相等就会产生比较事件,如果使能了比较中断的话就会触发相应的中断。

IMX6ULL处理器中的GPT定时器是一个功能强大的模块,它允许通过配置预分频器来实现精确的时间控制。预分频器可以对不同的时钟源进行分频,从而为定时器提供更加灵活和精确的时间基准。 参考资源链接:[IMX6ULL Pro定时器详解:GPT与EPIT功能及应用](https://wenku.csdn.net/doc/573sbmwsat?spm=1055.2569.3001.10343) 首先,选择适当的时钟源是非常关键的一步。根据实际应用的精度要求,你可以从低频参考时钟(32kHz)、高频参考时钟、外围时钟和外部时钟(如晶体振荡器)中进行选择。GPT模块支持12位预分频器,这意味着你可以根据需求从预分频器中选择一个合适的分频比,以获得期望的定时器时钟频率。 配置预分频器的具体步骤包括:设置GPT控制寄存器中的预分频器值,然后将该值与选定的时钟源相结合。例如,如果你选择高频参考时钟,并希望定时器以1Hz的频率运行,你需要计算出一个合适的分频值,然后写入预分频器控制位。 接下来,设置中断机制以响应定时事件。GPT定时器支持中断功能,当计数器值达到预设值时,会触发一个中断。你需要配置中断使能位,并将中断服务程序(ISR)与GPT定时器的中断向量关联。在ISR中,你可以编写相应的处理逻辑来响应定时事件,例如执行一个任务或者更新一个状态标志。 举例来说,如果你想让GPT定时器每秒产生一次中断,你需要设置一个初始的比较值,该值决定了定时器从0开始计数到多少时触发中断。计数器每次达到该值时,就会触发中断,并且计数器会自动重载该初始值,从而实现周期性中断。 通过以上步骤,你可以利用GPT定时器实现精确的时间控制和中断响应,这对于需要定时任务的嵌入式应用是非常有用的。更多关于GPT定时器的详细信息和高级应用,可以参考《IMX6ULL Pro定时器详解:GPT与EPIT功能及应用》这一资源。它不仅提供了定时器的深入技术细节,还包含了丰富的实例和最佳实践,对于希望在实际项目中高效利用IMX6ULL定时器功能的工程师来说,是一份不可多得的参考资料。 参考资源链接:[IMX6ULL Pro定时器详解:GPT与EPIT功能及应用](https://wenku.csdn.net/doc/573sbmwsat?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值