S3C2410有5個(ge) 16bit定時器。定時器0-3有脈寬調製功能(Pulse Width Modulation,PWM),定時器4是內(nei) 部定時器,沒有輸出引腳。定時器0有Dead-zone發生器,可以保證一對反向信號不會(hui) 同時改變狀態,常用於(yu) 大電流設備中。
定時器0-1共用一個(ge) 8bit prescaler,定時器2-4共用另外一個(ge) 。每個(ge) 定時器有一個(ge) 時鍾分頻器,可以選擇5種分頻方法。每個(ge) 定時器從(cong) 各自的時鍾分頻器獲取時鍾信號。prescaler是可編程的,並依據TCFG0-1寄存器數值對PCLK進行分頻。
當定時器被使能之後,定時器計數緩衝(chong) 寄存器(TCNTBn)中初始的數值就被加載到遞減計數器中。定時器比較緩衝(chong) 寄存器(TCMPBn)中的初始數值被加載到比較寄存器中,以備與(yu) 遞減計數器數值進行比較。這種雙緩衝(chong) 特點可以讓定時器在頻率和占空比變化時輸出的信號更加穩定。
每個(ge) 定時器都有一個(ge) 各自時鍾驅動的16bit遞減計數器,當計數器數值為(wei) 0時,產(chan) 生一個(ge) 定時中斷,同時TCNTBn中的數值被再次載入遞減計數器中再次開始計數。隻有關(guan) 閉定時器才不會(hui) 重載。TCMPBn的數值用於(yu) PWM,當遞減計數器的數值和比較寄存器數值一樣時,定時器改變輸出電平,因此,比較寄存器決(jue) 定了PWM輸出的開啟和關(guan) 閉。
S3C2410的PWM定時器采用雙buffer機製,可以不停止當前定時器的情況下設置下一輪定時操作。定時器值可以寫(xie) 到TCNTBn,而當前定時的計數值可以從(cong) TCNTOn獲得,即,從(cong) TCNTBn獲得的不是當前數值而是下一次計數的初始值。
自動加載功能被打開後,當TCNTn數值遞減到0時,芯片自動將TCNTBn的數值拷貝到TCNTn,從(cong) 而開始下一次循環,若TCNTBn數值為(wei) 0,則不會(hui) 有遞減操作,定時器停止。
第一次啟動定時器的過程如下:
- 初始化TCNTBn和TCMPBn的數值;
- 設置定時器的人工加載位,不管是否使用極性轉換功能,都將極性轉換位打開;
- 設置定時器的啟動位來啟動定時器,同時清除人工加載位。
若定時器在計數過程中被停止,則TCNTn保持計數值,若需要設置新的數值需要人工加載。定時器的工作過程可以用下圖表示。
- 使能自動加載功能,設置TCNTBn=160,TCMPBn=110,設置人工加載位並配置極性轉換位,人工加載位將時TCNTBn、TCMPBn的數值加載到TCNTn、TCMPn。然後,設置TCNTBn、TCMPBn為80和40,作為下一次定時的參數。
- 設置啟動位,若人工加載位為0,極性轉換關閉,自動加載開啟,則定時器開始遞減計數(計數前有一個設定時間,可以理解為與setup time類似)。
- 當TCNTn的數值和TCMPn一致時,TOUTn從低變為高。
- 當TCNTn計數至0,定時器產生中斷請求,同時TCNTBn、TCMPBn的數值被自動加載到TCNTn、TCMPn,前者為80,後者為40。
- 中斷服務向量(ISR)將TCNTBn、TCMPBn設置為80和60。
- 與3相似。
- 與4相似,TCNTn、TCMPn,前者為80,後者為60。
- ISR服務程序中,將自動加載和中斷請求關閉。
- 與6、3相似。
- TCNTn為0,TCNTn不會自動加載新的數值,定時器被關閉。
- 沒有新的中斷發生。
同時,由上麵的工作過程可以看出,通過ISR或別的方法寫(xie) 入不同的TCMPBn的數值,就可以調節輸出信號的占空比,實現脈寬調製(PWM)。
Dead Zone主要用在控製外設的使能,其功能主要是在關(guan) 閉一個(ge) 設備和開啟另一個(ge) 設備之間,插入一個(ge) 時間間隙,以防止兩(liang) 個(ge) 設備同時改變狀態。(有利於(yu) 減小係統幹擾?)
定時器可以通過TCFG1寄存器的DMA模式位配置為(wei) DMA請求源信號(nDMA_REQ)發生器,當定時器被這樣配置後,它將nDMA_REQ信號一直置低,直到接收到ACK信號。當定時器收到ACK信號,它將nDMA_REQ信號置高(無效)。當定時器被設置為(wei) DMA請求模式時,不會(hui) 產(chan) 生中斷請求。隻能有一個(ge) 定時器被配置為(wei) DMA請求源。