1. 程式人生 > >學習定時器

學習定時器

S3C2451有 5 個 16 位定時器。其中定時器 0、1、2 和 3 具有脈寬調製(PWM)功能。定時器 4 是一個無輸出引腳的內部定時器。定時器 0 還包含用於大電流驅動的死區發生器。 定時器 0 和 1 共用一個 8 位預分頻器,定時器 2、3 和 4 共用另外的 8 位預分頻器。每個定時器都有一個可以生成 5 種不同分頻訊號(1/2,1/4,1/8,1/16 和 TCLK)的時鐘分頻器。每個定時器模組從相應 8 位預分頻器得到時鐘的時鐘分頻器中得到其自己的時鐘訊號。8 位預分頻器是可程式設計的,並且按儲存在 TCFG0 和 TCFG1 暫存器中的載入值來分頻 PCLK。 定時計數緩衝暫存器(TCNTBn)包含了一個當使能了定時器時的被載入到遞減計數器中的初始值。定時比較緩衝暫存器(TCMPBn)包含了一個被載入到比較暫存器中的與遞減計數器相比較的初始值。 這種 TCNTBn 和TCMPBn 的雙緩衝特徵保證了改變頻率和佔空比時定時器產生穩定的輸出。 每個定時器有它自己的由定時器時鐘驅動的 16 位遞減計數器。當遞減計數器到達零時,產生定時器中斷請求通知 CPU 定時器操作已經完成。當定時器計數器到達零時,相應的 TCNTBn 的值將自動被載入到遞減計數器以繼續下一次操作。然而,如果定時器停止了,例如,在定時器執行模式期間清除 TCONn 的定時器使能位,TCNTBn 的值將不會被重新載入到計數器中。 TCMPBn 的值是用於脈寬調製(PWM)。當遞減計數器的值與定時器控制邏輯中的比較暫存器的值相匹配時定 時器控制邏輯改變輸出電平。因此,比較暫存器決定 PWM 輸出的開啟時間(或關閉時間) PWM:脈衝寬度調製 利用微處理器的數字輸出來對類比電路進行控制的技術 分頻器一般都是跟計數單元一起結合使用。 預分頻比是在計數單元值發生變化之前起作用(假如不用預分頻時,計數器在每個上升沿到來時加1,而現在使用分頻比為1:2的預分頻器的話,那麼必須等到兩個上升沿的到來,計數器才會加1) 後分頻器與預分頻器功能一樣,只不過是在計數器值發生改變後起作用。像TMR2的後分頻器,如果不使用,計數器一但發生溢位,將立即置位標誌為TMR2IF,但是如果有1:2的後分頻器的話,必須兩次溢位後才會置位. 需要配置的暫存器: 1,TCFG0 TCFG1 TCFG0前8位設定TIMER0 TIMER1的預分頻值 後8位設定TIMER2,3,4預分頻值 TCFG1前四位設定TIMER0的分頻值,之後以此類推,每四位設定一個定時器 定時器時鐘頻率 = PCLK/(預分頻值+1)/(分頻值) 預分頻器和分頻器 一個 8 位預分頻器和一個 4 位分頻器產生出以下輸出頻率:
4 位分頻器設定 最小解析度
(預分頻器=0)
最大解析度
(預分頻器=255)
最大間隔時間
(TCNTBn=65535)
1/2 (PCLK = 50 MHz) 0.0400 µs (25.0000 MHz) 10.2400 µs (97.6562 KHz) 0.6710 秒
1/4 (PCLK = 50 MHz) 0.0800 µs (25.0000 MHz) 20.4800 µs (97.6562 KHz) 1.3421 秒
1/8 (PCLK = 50 MHz) 0.1600 µs (25.0000 MHz) 40.9601 µs (97.6562 KHz) 2.6843 秒
1/16 (PCLK = 50 MHz) 0.3200 µs (25.0000 MHz) 81.9188 µs (97.6562 KHz) 5.3686 秒
2,TCNTB 計數緩衝暫存器   設定計數初始值,可通過計算來設定定時器的定時時間       TCMPB計數比較暫存器   設定PWM(佔空比) 3,TCON 定時控制暫存器 4,TCNTO 計時監視暫存器 可以獲取TCNT暫存器的值,觀測計數到了那裡 定時器開啟步驟: 1,設定預分頻 2,設定分頻 3,設定過載值或者初始值 4,開啟自動過載(間隙模式) 5,開啟手動更新 6,開啟定時器 7,關閉手動更新 關於3C2440 FCLK, HCLK, PCLK的關係(轉載) 1)FLCK、HCLK和PCLK的關係
S3C2440有三個時鐘FLCK、HCLK和PCLK s3c2440官方手冊上說P7-8寫到: FCLK is used by ARM920T,核心時鐘,主頻。 HCLK is used for AHB bus, which is used by the ARM920T, the memory controller, the interrupt controller, the LCD controller, the DMA and USB host block. 也就是匯流排時鐘,包括USB時鐘。 PCLK is used for APB bus, which is used by the peripherals such as WDT, IIS, I2C, PWM timer, MMC interface,ADC, UART, GPIO, RTC and SPI.即IO介面時鐘,例如串列埠的時鐘設定就是從PCLK來的;
那麼這三個時鐘是什麼關係呢? 這三個時鐘通常設定為1:4:8,1:3:6的分頻關係,也就說如果主頻FLCK是400MHz,按照1:4:8的設定,那麼HLCK是100MHz,PLCK是50MHz 暫存器CLKDIVN表明並設定了這三個時鐘的關係 如果CLKDIVN設定為0x5,那麼比例即為1:4:8,前提是CAMDIVN[9]為0. 2)輸入時鐘FIN與主頻FCLK的關係 現代的CPU基本上都使用了比主頻低的多的時鐘輸入,在CPU內部使用鎖相環進行倍頻。對於S3C2440,常用的輸入時鐘FIN有兩種:12MHz和16.9344MHz,那麼CPU是如何將FIN倍頻為FCLK的呢? S3C2440使用了三個倍頻因子MDIV、PDIV和SDIV來設定將FIN倍頻為MPLL,也就是FCLK MPLL=(2*m*FIN)/(p*2^s) where m=(MDIV+8), p=(PDIV+2), s="SDIV" 暫存器MPLLCON就是用來設定倍頻因子的 理論上,你可以通過設定該暫存器來實現不同的頻率,然而,由於實際存在的各種約束關係,設定一個適當的頻率並不容易,手冊上列出了一些常用頻率的表格, 例如,假設輸入時鐘FIN=16.9344M,MDIV=110, PDIV="3", SDIV="1", 利用上面的公式,FCLK=2*16.9344*(110+8)/((2+3)*2)=399.65

相關推薦

多執行緒學習----定時(二)

1.建立一個定時器,執行某個任務,第一次執行在10s鍾以後,之後每隔1s鍾執行一次。 new Timer().schedule(new TimerTask() { @Override public void run() { System.out.println("bom

學習定時

S3C2451有 5 個 16 位定時器。其中定時器 0、1、2 和 3 具有脈寬調製(PWM)功能。定時器 4 是一個無輸出引腳的內部定時器。定時器 0 還包含用於大電流驅動的死區發生器。 定時器 0 和 1 共用一個 8 位預分頻器,定時器 2、3 和 4 共用另外的

Libevent學習-------定時事件

定時器事件的建立 Libevent 一般呼叫evtimer_new來定義一個定時器事件 #define evtimer_new(b, cb, arg) event_new((b), -1, 0, (cb), (arg)) 從巨集定義來看,

STM32學習--定時(基本定時

1.功能及原理   基本定時器TIM6和TIM7各包含一個16位自動裝載計數器,由各自的可程式設計預分頻器驅動。它們可以作為通用定時器提供時間基準,特別地可以為數模轉換器(DAC)提供時鐘。實際上,它們在晶片內部直接連線到DAC並通過觸發輸出直接驅動DAC。這

STM32學習--定時(高階定時

高階定時器 1、功能增加 由上圖可瞭解到高階定時器在通用定時器上增加了三個功能部分: ① 時基部分:增加重複次數計數器和RCR暫存器。允許在指定數量的計數週期後產生更新事件,更新相應暫存器,其實際用處暫不瞭解,減少中斷或DMA處理的資源佔用? ②

Windows定時學習

內核對象 arm 三個參數 inf ont 多少 defined win int 定時器是一個在特定時間或者規則間隔被激發的內核對象。結合定時器的異步程序調用可以允許回調函數在任何定時器被激發的時候執行。 通過調用CreateWaitableTimer()可以創建一個定時器

QT學習筆記(14) 定時類DTimer的使用

fin isa play htm number conn stat alt .cn 一、   在前面的學習筆記中,我們已經學習定時器事件http://www.cnblogs.com/blog-ccs/p/7445323.html   現在,我們學習QTimer定時器類,比較

js--定時學習和對動畫的封裝(定時

定時器 回調 .get floor val logs 多個 get math 1.定時器:在js裏面,定時器主要有兩種,setInterval(function, time) 和 setTimeout(function,time), setInterval:每個time秒執

Qt學習: QTimerEvent定時事件的處理程序代碼示例

軟件 window 編程 重要函數: 1.int startTimer(int); //設置定時器,返回一個ld. 2.int event->timerld(); //返回當前的ld. 3.void killTimer(int); //停止定時器.首先從Qt設計師中拖拽出三個按鈕,由於只是演

(筆記)Linux內核學習(八)之定時和時間管理

全局變量 define 結構 load 統計 object 一個 完成 溢出 一 內核中的時間觀念 內核在硬件的幫助下計算和管理時間。硬件為內核提供一個系統定時器用以計算流逝的時間。系 統定時器以某種頻率自行觸發,產生時鐘中斷,進入內核時鐘中斷處理程序中進行

python的學習之旅---信號量 定時

def 當前 pre 正在 getname from == and span 把線程都創建好,等待執行。 current_thread().getName() 獲取當前線程的線程名 from threading import Thread,Semaphore,curren

qt學習記錄-----4.qt定時

調用 函數 div 文件 事件處理 post 溢出 mage 分享圖片 兩種開啟定時器方式 一、開啟多個定時器 添加頭文件 設置三個定時器,並設置定時時間 定時器溢出,調用定時器事件處理函數 二、只需少量定時器,采用信號和槽的方式 實現槽函數 qt學習記錄---

java學習筆記之定時

blog div this rgs date row demo sdf 時間 定時器 1 package pack01_timer; 2 3 import java.io.File; 4 import java.text.ParseException; 5 i

C#多線程學習(五) 多線程的自動管理(定時)

class 時間 change chan 表示 () 圖片 管理 rda Timer類:設置一個定時器,定時執行用戶指定的函數。 定時器啟動後,系統將自動建立一個新的線程,執行用戶指定的函數。 初始化一個Timer對象: Timer timer

啟動系統定時,每隔1分鐘/指定時間執行任務 學習筆記

啟動系統定時器每隔1分鐘/指定時間執行 import java.util.Calendar; import java.util.Date; import java.util.Timer; import java.util.TimerTask; public class DemoTimer { //啟

百度前端學習日記20——定時

out val interval fun tint 日記 tin clear 對象 setTimeout("function",time) 設置一個超時對象 setInterval("function",time) 設置一個超時對象 SetInterval為自動重復,set

STM32學習筆記(5)——通用定時PWM輸出

part 大小 模式 lan 晶振 kcon 筆記 利用 .cn 1、TIMER輸出PWM基本概念 脈沖寬度調制(PWM),是英文“Pulse Width Modulation”的縮寫,簡稱脈寬調制,是利用微處理器的數字輸出來對模擬

STM32學習筆記(7)——通用定時PWM輸出

nbsp 錯誤 buffer put inter def internal reset 有效 1、TIMER輸出PWM基本概念 脈沖寬度調制(PWM),是英文“Pulse Width Modulation”的縮寫,簡稱脈寬調制,是利

【自制CPU之學習篇02】555定時

充電 size 學習篇 ima padding 名稱 out 計數器 add   555定時器是一種集成電路芯片,常被用於定時器、脈沖產生器和震蕩電路。在CPU制作中作為pc(程序計數器)的主要組成部分。以下是我購買的NE555實拍圖:        NE555的針腳示

微信小程序學習Course 7 定時功能

換算 ava 而且 tint 毫秒 src ole 時間 技術 微信小程序學習Course 7 定時器功能 微信小程序中有一個定時器API函數,其提供了四個API接口 7.1、number setTimeout(function callback, number