实现定时中断_EPIT 定时器,仅需做到如下几步,即可轻松配置使用
EPIT 的全稱是: Enhanced Periodic Interrupt Timer,直譯過來就是增強的周期中斷定時器,它主要是完成周期性中斷定時的。學過 STM32 的話應該知道, STM32 里面的定時器還有很多其它的功能,比如輸入捕獲、 PWM 輸出等等。但是 I.MX6U 的 EPIT 定時器只是完成周期性中斷定時的,僅此一項功能!至于輸入捕獲、 PWM 輸出等這些功能, I.MX6U 有其它的外設來完成。EPIT 是一個 32 位定時器,在處理器幾乎不用介入的情況下提供精準的定時中斷,軟件使能以后 EPIT 就會開始運行, EPIT 定時器有如下特點:
①、時鐘源可選的 32 位向下計數器。
②、 12 位的分頻值。
③、當計數值和比較值相等的時候產生中斷。EPIT 定時器結構如圖所示 :
EPIT 定時器框圖
①、這是個多路選擇器,用來選擇 EPIT 定時器的時鐘源, EPIT 共有 3 個時鐘源可選擇,ipg_clk、 ipg_clk_32k 和 ipg_clk_highfreq。
②、這是一個 12 位的分頻器,負責對時鐘源進行分頻, 12 位對應的值是 0~4095,對應著1~4096 分頻。
③、經過分頻的時鐘進入到 EPIT 內部,在 EPIT 內部有三個重要的寄存器:計數寄存(EPIT_CNR)、加載寄存器(EPIT_LR)和比較寄存器(EPIT_CMPR),這三個寄存器都是 32 位的。EPIT 是一個向下計數器,也就是說給它一個初值,它就會從這個給定的初值開始遞減,直到減為 0,計數寄存器里面保存的就是當前的計數值。如果 EPIT 工作在 set-and-forget 模式下,當計 數寄存器里面的值減少到 0, EPIT 就會重新從加載寄存器讀取數值到計數寄存器里面,重新開始向下計數。比較寄存器里面保存的數值用于和計數寄存器里面的計數值比較,如果相等的話就會產生一個比較事件。
⑤、 EPIT 可以設置引腳輸出,如果設置了的話就會通過指定的引腳輸出信號。
⑥、產生比較中斷,也就是定時中斷。EPIT 定時器有兩種工作模式: set-and-forget 和 free-running,這兩個工作模式的區別如下:set-and-forget 模式: EPITx_CR(x=1, 2)寄存器的 RLD 位置 1 的時候 EPIT 工作在此模式下,在此模式下 EPIT 的計數器從加載寄存器 EPITx_LR 中獲取初始值,不能直接向計數器寄存器寫入數據。不管什么時候,只要計數器計數到 0,那么就會從加載寄存器 EPITx_LR 中重新加載數據到計數器中,周而復始。free-running 模式: EPITx_CR 寄存器的 RLD 位清零的時候 EPIT 工作在此模式下,當計數器計數到 0以后會重新從 0XFFFFFFFF開始計數,并不是從加載寄存器 EPITx_LR中獲取數據。
接下來看一下 EPIT 重要的幾個寄存器,第一個就是 EPIT 的配置寄存器 EPITx_CR,此寄存器的結構如圖所示:
EPITx_CR 寄存器結構圖
寄存器 EPITx_CR 我們用到的重要位如下:
CLKSRC(bit25:24): EPIT 時鐘源選擇位,為 0 的時候關閉時鐘源, 1 的時候選擇選擇Peripheral 時鐘(ipg_clk),為 2 的時候選擇 High-frequency 參考時鐘(ipg_clk_highfreq),為 3 的時候選擇 Low-frequency 參考時鐘(ipg_clk_32k)。
PRESCALAR(bit15:4): EPIT 時鐘源分頻值,可設置范圍 0~4095,分別對應 1~4096 分頻。RLD(bit3): EPIT 工作模式,為 0 的時候工作在 free-running 模式,為 1 的時候工作在 setand-forget 模式。
OCIEN(bit2):比較中斷使能位,為 0 的時候關閉比較中斷,為 1 的時候使能比較中斷。ENMOD(bit1):設置計數器初始值,為 0 時計數器初始值等于上次關閉 EPIT 定時器以后
計數器里面的值,為 1 的時候來源于加載寄存器。
EN(bit0): EPIT 使能位,為 0 的時候關閉 EPIT,為 1 的時候使能 EPIT。
寄存器 EPITx_SR 結構體如圖所示:
EPITx_SR 寄存器結構圖
寄存器 EPITx_SR 只有一個位有效,那就是 OCIF(bit0),這個位是比較中斷標志位,為 0 的時候表示沒有比較事件發生,為 1 的時候表示有比較事件發生。當比較中斷發生以后需要手動清除此位,此位是寫 1 清零的。
寄存器 EPITx_LR、 EPITx_CMPR 和 EPITx_CNR 分別為加載寄存器、比較寄存器和計數寄存器,這三個寄存器都是用來存放數據的,很簡單。
我們使用 EPIT 產生定時中斷,然后在中斷服務函數進行中斷處理,需要哪些步驟來實現這個功能。
EPIT 的配置步驟如下:
1、 設置 EPIT1 的時鐘源
設置寄存器 EPIT1_CR 寄存器的 CLKSRC(bit25:24)位,選擇 EPIT1 的時鐘源。
2、設置分頻值
設置寄存器 EPIT1_CR 寄存器的 PRESCALAR(bit15:4)位,設置分頻值。
3、設置工作模式
設置寄存器 EPIT1_CR 的 RLD(bit3)位,設置 EPTI1 的工作模式。
4、設置計數器的初始值來源
設置寄存器 EPIT1_CR 的 ENMOD(bit1)位, 設置計數器的初始值來源。
5、 使能比較中斷
我們要使用到比較中斷,因此需要設置寄存器 EPIT1_CR 的 OCIEN(bit2)位,使能比較中斷。
6、設置加載值和比較值
設置寄存器 EPIT1_LR 中的加載值和寄存器 EPIT1_CMPR 中的比較值,通過這兩個寄存器就可以決定定時器的中斷周期。
7、 EPIT1 中斷設置和中斷服務函數編寫
使能 GIC 中對應的 EPIT1 中斷,注冊中斷服務函數,如果需要的話還可以設置中斷優先級。最后編寫中斷服務函數。
8、使能 EPIT1 定時器
配置好 EPIT1 以后就可以使能 EPIT1 了,通過寄存器 EPIT1_CR 的 EN(bit0)位來設置。
通過以上幾步我們就配置好 EPIT 了,通過 EPIT 的比較中斷來實現 LED0 的翻轉。
總結
以上是生活随笔為你收集整理的实现定时中断_EPIT 定时器,仅需做到如下几步,即可轻松配置使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据数组赋值_嵌入式-数组赋值
- 下一篇: jquery找祖先包含_Jquery的p