1. 程式人生 > 實用技巧 >【北京迅為】i.MX6ULL終結者GPT 定時器簡介

【北京迅為】i.MX6ULL終結者GPT 定時器簡介

GPT的全稱是General Purpose Timer,它是一個32位的向上的定時器(也就是從0x00000000開始向上累加計數),GPT也可以和一個設定的值進行比較,當定時器的技術達到這個預設的值的時候,就會產生一個比較事件,產生一箇中斷。GPT有一個12位的分頻器(我們在前面學習EPIT的時候,EPIT也是有一個12位的分頻值),我們可以通過修改分頻器的數值來修改GPT的頻率,並且GPT的時鐘源有多路可以選擇。

首先我們來看下GPT的結構框架,如圖 1:
在這裡插入圖片描述

圖 1

從上圖我們可以看到:
標識1是GPT定時器的時鐘輸入,GPT的時鐘輸入源有5路可以選擇,我們下面會介紹。
標識2是12位的分頻器,對輸入的的時鐘源進行分頻,功能跟前面介紹的EPIT定時器的分頻器基本一樣。

標識3是經過分頻後的時鐘進入GPT定時器內部的32位計數器
標識4是輸出比較暫存器,GPT一共支援三路,所以對應的有三路比較暫存器。
標識5是輸出比較中斷,對應的有三路,當計數器裡面的值和比較近存起裡面的值相等時就會產生比較中斷。

下面我們來看下GPT的時鐘源結構圖,如圖 2所示:
在這裡插入圖片描述

圖 2

從上圖可以看出GPT的時鐘源有5路,他們分別是ipg_clk_24M、GPT_CLK、ipg_clk、ipg_clk_32k、ipg_clk_highfreq。我們在本例程選擇的ipg_clk作為GPT的時鐘源。

GPT定時器具有下列這些功能:
1.內部包含一個32位的向上累加的計數器,輸入的時鐘源可以選擇

2.包含兩路輸入捕獲通道,並且可以程式設計設定邊沿觸發方式
3.3路輸出比較通道,並且可以程式設計設定輸出模式
4.可以在低功耗或者除錯模式下使用
5.比較,捕獲,累加計數已滿都可以產生對應的中斷
6.支援重啟模式和自動執行模式

接下來我們看一下GPT定時器相關的幾個暫存器,首先第一個是GPTx_CR暫存器,暫存器的結構如圖 3所示:
在這裡插入圖片描述

圖 3

在這個暫存器我們只需關注下面的這些位:
SWR(bit15):軟體復位標誌,向此位寫1,GPT定時器開始復位,當復位完成後,此位會自動清零。

FRR(bit9):操作模式位,此位是0的時候,工作在重啟模式,此位是1的時候,工作在自由執行模式。

CLKSRC(bit8-6):時鐘源選擇位,為0的時候不選擇時鐘源,為1的時候選擇ipg_clk時鐘源,為2的時候選擇ipg_clk_highfreq時鐘源,為3的時候選擇外部時鐘源。為4的時候選擇ipg_clk_32k時鐘源,為5的時候選擇ipg_clk_24M時鐘源,其它值作為保留。

STOPEN(bit5):停止模式使能位,為0的時候關閉停止模式,為1的時候開啟停止模式。

ENMOD(bit1):使能模式位,當GPT關閉的時候,計數器和分頻計數會凍結住他們當前的值,當GPT定時器再次被使能的時候,通過此位來決定計數器和分頻計數的數值來源,比如,當此位為0的時候,GPT計數的值按照凍結時的值,如果此位為1,GPT計數器的值重新復位從0開始。

EN(bit0):GPT使能位,為0,關閉GPT,為1,開啟GPT。我們需要注意:如果需要使能GPT功能,要先配置完GPT的其它暫存器,最後在使能該位。

GPT的分頻暫存器GPTx_PR,結構如圖 4所示:
在這裡插入圖片描述

圖 4

我們在前面介紹過,GPT的分頻器是12位的,所以我們用到該暫存器的(bit0-bit11),用來設定分頻係數。

然後是GPT的狀態暫存器GPTx_SR,結構如圖 5所示:
在這裡插入圖片描述

圖 5

該暫存器是32位的,bit31-bit6作為保留,我們不用關注。
ROV(bit5):累加標誌位,當計數到達最大值,然後重新從0開始計數的時候設定該位;復位或自由執行模式的時候,當計數到達0xfffffff的時候,此位也會設定為1。當我們服務到該位為0的時候,說明沒有發生計數滿的情況,如果讀取到該位為1.說明發生計數滿的情況了。
IF2,IF1(bit4,bit3):GPT計數器的兩路輸入捕獲狀態,如果對應的該位為0說明沒有發生輸入捕獲,如果對應的該位為1,說明對應的通路上發生了輸入捕獲。
OF3,OF2,OF1(bit2,bit1,bit0):GPT定時器的三路輸出比較中斷標誌位,對應的位為0說明沒有發生比較中斷,如果對應的位為1說明發生比較中斷了。

接下來我們看下GPT定時器的輸出比較暫存器GPTx_OCR,因為GPT定時器一共有三路輸出,所以對應的比較器也會有三路,這裡我們選擇第一路比較暫存器來介紹下,其它兩路和這個是一樣的,GPT定時器的第一路輸出比較暫存器是GPTx_OCR1,結構如圖 6所示:
在這裡插入圖片描述

圖 6

輸出比較暫存器是32位的,用來儲存比較數值,當計數器的數值和比較暫存器的數值相等的時候,就會在對應的輸出通道產生一個比較事件。

接下來我們看下GPT定時器的計數器暫存器GPTx_CNT,結構如圖 7所示:
在這裡插入圖片描述

圖 7

我們看到GPT定時器的計數器是一個32位的,用來儲存當前的計數值。在這裡插入圖片描述