天天看點

PWM定時器timer0學習筆記

PWM定時器timer0學習筆記:

一、定時器timer0代碼中用到的寄存器有哪些?這些寄存器功能是什麼?初始化中涉及到這些寄存器的位的含義是什麼?:
TCFG0
功能是:定時器的配置寄存器,可以設定第一個預分頻器和第二個預分頻器的預分頻系數。定時器0,1使用第一個預分頻器;定時器2,3,4使用第二個預分頻器。
設定:第 0-7位。
含義是 :65= 01000001,設定第一個預分頻系數為65,把PCLK=1M作為定時器0,1的時鐘源。由于隻使用定時器0,故沒有設定第二個預分頻系數。
TCFG1
功能是:配置定時器的時鐘選擇器(MUX)。用于定時器選擇時鐘源是幾分頻的。
設定:設定了第2位00000100
含義:定時器0選擇16分頻,此時定時器0的時鐘源頻率為1/16Mhz。
TCON
功能:用于控制定時器0,1,2,3,4的起始、自動加載、更新TCNTBn。
設定:第0,1,3位。
含義:第1位為1,則把TCNTB0,TCMPB0的值“手動”更新寄存器TCNT0,TCMP0,用于設定定時器0的初始計數值和比較值,更新之後把第1位置0。第0位置1,表示打開定時器的“開關”,讓定時器0工作。第3位置1,表示計數寄存器TCNT0中的數值自減到0時,自動的把TCNTB0寄存器中的值加載到TCNT0。
TCNTB0
功能:定時器0的計數緩沖寄存器。
設定:第0-31位,設定為62500。
含義:該寄存器儲存使用者設定的初始計數值,該數值加載到TCNT0中做自減1操作,由于時鐘源為1/16MHZ= 62500HZ,故62500自減1到0即為1s。
TCMPB0
功能:定時器0的比較寄存器。
設定:未設定。 
含義:主要用于輸出PWM脈寬可調制的時鐘信号。
TCNTO0
功能:定時器0的計數值寄存器。
設定:未設定 
含義:讀取該寄存器可以得到此時TCNT0中的數值。
TINT_CSTAT:
功能:設定定時器0,1,2,3,4的中斷是否使能和中斷狀态。
設定:第0位
含義:第0位置1,表示定時器0允許中斷。
二、請具體描述一下定時器timer0的工作時鐘頻率是如何産生的?
CPU通過XXTI引腳外部引入時鐘源,經過倍頻和一系列的分頻得到PCLK=66M,TCFG0設定了第一個預分頻器的分頻系數為66,PCLK經過第一個預分頻器後變成1M;設定TCFG1的第二位讓定時器0選擇時鐘選擇開關的16分頻,即得到timer0工作頻率為1/16M= 62500Hz。 
三、定時器timer0的中斷是如何産生的?
設定寄存器TINT_CSTAT的第0位,允許timer0觸發中斷。timer0的TCNT0計數寄存器中的值自減到0則觸發timer0中斷,timer0中斷是VIC0中的中斷信号。設定VIC0INTENABLE的第21位使能timer0中斷;設定VIC0INTSELECT的21位使timer0為IRQ中斷;設定timer0中斷的中斷處理函數的入口位址VIC0VECTADDR21=(int)asm_IRQ_handler。綜上,timer0中斷經過:定時器使能中斷——>中斷控制器使能中斷——>設定中斷為IRQ——>定時器0觸發中斷——>中斷處理函數——>跳回自動加載TCNT0繼續執行。
四、簡單描述一下我們這個定時器的示例代碼運作時會做什麼事情?
在終端上列印字元a-z,當timer0觸發中斷後列印“+”号(中間有空格),同時蜂鳴器響一下,如此循環。
五、實作一個arm代碼,它能在運作跑馬燈(隻用到頭3個燈)的同時,精确地以每2秒為時間間隔讓蜂鳴器響,并且如果按下K4按鍵就讓跑馬燈未使用的第4個燈亮。