本文主要是介绍imx6ull General Purpose Timer (GPT),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、overview
GPT有一个32位的向上计数器,可以将外部引脚上的事件捕获到GPT寄存器中,捕获触发可以编程设置为上升沿或下降沿触发,甚至双边沿触发。GPT还可以在输出比较引脚上产生一个事件,并当计时器达到编程值时产生一个中断。GPT有一个12位的预分频,来对多个时钟源进行分频。
1.1 特性
① 一个带有时钟源选择的32位递增计数器,时钟源包括外部时钟。
② 两个具有可编程触发沿的输入捕捉通道。
③ 具有可编程输出模式的三个输出比较通道,还有一个“force compare”功能。
④ 可以通过编程,让它在低功耗(low power)和调试(debug)模式下运行。
⑤ 可以在捕获(capture),比较(compare)和翻转(rollover)事件时产生中断。
⑥ 两种计数模式:重新启动(restart)或自由运行(free-run)模式。
1.2 操作模式
① 重新启动计数模式(Restart mode):
在重启模式下(可通过GPT控制寄存器GPT_CR选择),当计数器达到比较值时,计数器将复位并从0x00000000重新开始计数。
重新启动功能仅与比较通道1相关联。对通道1的比较寄存器的任何写操作都将复位GPT计数器。这样做是为了避免在进行计数时将比较值从较高的值更改为较低的值时可能丢失比较事件。对于其他两个比较通道,当发生比较事件时,计数器不会复位。
② 自由运行模式(free-run mode):
在自由运行模式下,当所有三个通道发生比较事件时,计数器不会复位;而是,计数器继续计数直到0xffffffff,然后翻转(变为0x00000000)。
1.3 时钟
可以从4个时钟源中选择一个输入到预分频器的时钟,分别为:
① 高频参考时钟(ipg_clk_highfreq),
② 低频参考时钟(ipg_clk_32k),
③ 外围时钟(ipg_clk),
④ 外部时钟(GPT_CLK)
⑤ 晶体振荡器时钟(ipg_clk_24M)
时钟源选择的操作流程:
① 通过在GPT_CR寄存器中设置EN = 0来禁用GPT;
② 禁用GPT中断寄存器(GPT_IR);
③ 将输出模式配置为未连接/断开连接:往GPT_CR中的OM1,OM2,OM3写0;
④ 禁用输入捕获模式:往GPT_CR的IM1和IM2中写入零;
⑤ 在GPT_CR寄存器中将时钟源CLKSRC更改为所需的值;
⑥ 将GPT_CR寄存器中的SWR位置1;
⑦ 清除GPT状态寄存器(GPT_SR)(该寄存器是往相应位写1清0);
⑧ 在GPT_CR寄存器中设置ENMOD = 1,以使GPT计数器为0x00000000;
⑨ 在GPT_CR寄存器中启用GPT(EN = 1);
⑩ 启用GPT中断寄存器(GPT_IR)。
1.4 GPT 的输入捕获
GPT有两个输入捕获通道,
这篇关于imx6ull General Purpose Timer (GPT)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!