歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> S3C2440定時器和pwm編程分析

S3C2440定時器和pwm編程分析

日期:2017/3/1 10:15:47   编辑:Linux編程

從圖可以看出:

l 定時器的輸入時鐘是PCLK;

l T0和T1為一組,T0、T1共用一個8bit分頻器

l T2、T3、T4為一組,共用一個8bit分頻器,T4沒有輸出引腳只能做內部時鐘使用。

l 8bit分頻後還有一個1/2 1/4 1/8 1/16 的clock divider。

l 定時器輸入時鐘頻率計算如下:

[ /(prescaler+1)]/分頻器的分頻值

prescaler value = 119

divider value = 1/16

PCLK= 50700000

Timer input clock Frequency =50700000/ (119+1)/(16)=26406

就是輸入的時鐘,prescaler就是分頻值(2,4,8,16),其中TCFG0控制著prescaler的分頻值;TCFG1控制著分頻器的值(2,4,8,16)。

l 定時器減法緩沖寄存器TCNTBn和比較緩沖寄存器TCMPBn

TCNTBn存放計數值,TCMPBn存放比較值,當定時器開啟後TCNTBn和TCMPBn將被下載到TCNTn和TCMPn中,TCNTn和TCMPn不會理會硬件自動操作。當TCNTn和TCMPn值相等時電平反轉,當TCNTn為零時CU產生中斷。其實如果只是定時作用的話是不用去操作TCMPBn的,TCMPBn用於產生PWM波。

l 定時器控制寄存器TCON和定時器觀察寄存器TCNTOn

定時器0的初始化

void Timer0_Init()

{

//設置TOUT0為輸出引腳

TCFG0 = 99;//預分頻器值

TCFG1 = 0x03;//16分頻

TCNTB0 = 31250;//the time interal is 1s=(50M/(99+1)/16)

TCON = 0xa;//手動更新

TCON = 0x9;//自動更新

INTMASK &= (~(1<<10));//允許定時器0中斷。

}

Copyright © Linux教程網 All Rights Reserved