发新帖

[原创] 【正点原子号令者I.MX RT1052开发板套件试用体验】+GPT

[复制链接]
发表于 2018-8-3 16:00:59
| 500 查看 | 0 回复
【正点原子号令者I.MXRT1052开发板套件试用体验】+GPT


通用定时器GPTRT1052内部集成了2GPT定时器:GPT1GPT2,每个GPT定时器又包含了2路输入捕获、3路比较输出和相关中断。
GPT32位定时器。

GPT的框图如下,从中也可以看出GPT的组成、功能与位数

无标题.png


再看GPT的时钟框图,由如下几个时钟组成与配置。
(ipg_clk_24M)(GPT_CLK)(ipg_clk)(ipg_clk_32k)(ipg_clk_highfreq)



无标题.png


GPT的特性中可以看到,支持两种运行方式:

无标题.png


1
在重启模式下(可通过GPT控制寄存器选择GPT_CR),当计数器达到比较值,计数器重置并从x00000000重新开始。
重启功能仅与比较通道1相关联。
对通道1的比较寄存器的任何写访问都将复位GPT计数器。这样做是为了避免在计数进行时比较值从较高值变为较低值时可能错过比较事件。

对于其他两个比较通道,当比较事件发生时,计数器不会复位。

2
在自由运行模式下,当所有3个通道都发生比较事件时,计数器不会重启;相反,计数器继续计数直到0xffffffff,然后翻转(到00000000)。


GPT支持6个不同的中断,分别为:RolloverInterruptInputCapture Interrupt 1, 2OutputCompare Interrupt 1, 2, 3

GPT可配置的寄存器如下表。

分别是控制寄存器、周期寄存器、中断寄存器、状态寄存器等等,表中也有详细的功能说明,位的配置,到各个寄存器说明中进行查找。


无标题.png


RT1052中定时器GPT的使用,也是有一定的步骤的,大体步骤如下:

打开GPT时钟
初始化GPT配置
设置GPT比较值
设置中断,与中断优先级
打开GPT功能
写中断服务函数

再来看看程序配置
在主函数中使用了GPT1_Int_Init(3750-1,10000);函数来对GPT1进行了配置
要关函数宝在了gptimer.c中,文件中有两个函数,一个是初始化函数,一个是中断服务函数。

无标题.png


GPT的配置使用了gpt_config_t结构体。通过注释可以看出每个成员的功能意义

无标题.png


先对GPT1的配置进行默认值初始化,再对时钟、分频进行配置;
设置比较计数值,中断,中断通道,优先级并使能中断与定时器。



在中断函数中,会判断GPT1的状态,这里的值是一个枚举值。其中有GPT的各种状态的标志定义

无标题.png


当检测到输出比较1的中断标志,就进行LED1的翻转,并清中断标志位。
可以看到,GPT1的各个中断也是共用了一个中断服务函数的,这与之前的外部中断的中断服务函数的使用方式也是一样的,在中断服务函数中对具体的中断事件进行判断再运行相应的中断函数中的程序语句。
从微观上来看,这种方式可能效率会低一些,每个中断都要进行中断事件的判断。




我要点赞 0

举报

您需要登录后才可以回帖 登录 | 立即注册