定時器中斷實驗_第1頁
定時器中斷實驗_第2頁
定時器中斷實驗_第3頁
定時器中斷實驗_第4頁
定時器中斷實驗_第5頁
已閱讀5頁,還剩28頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、每當程序需要延時時,我們是利用循環(huán)語句來實現(xiàn)。這種方法的延時簡單,但不是很精確,就是說不能得到確切的一段時間的延時。因此當需要精確延時時,就不能采用這種方法了。一般是利用定時器來實現(xiàn)。MCU的主時鐘源主要是外部晶振或外部時鐘,而用的最多的是外部晶振系統(tǒng)內所使用的時鐘都是外部時鐘源經(jīng)過一定的處理得到的。由于外部時鐘源的頻率一般不能滿足系統(tǒng)所需要的高頻條件,所以往往需要PLL(鎖相環(huán))進行倍頻處理。在s3c2440中,有2個不同的PLL,一個是MPLL,另一個是UPLL。UPLL是給USB提供48MHz。MPLL處理后能夠得到三個不同的系統(tǒng)時鐘:FCLK、HCLK和PCLKFCLK是主頻時鐘,用于

2、ARM920T內核;HCLK用于AHB總線設備,如ARM920T,內存控制,中斷控制,LCD控制,DMA以及USB主模塊;PCLK用于APB總線設備,如外圍設備的看門狗,IIS,I2C,PWM,MMC接口,ADC,UART,GPIO,RTC以及SPI。三個系統(tǒng)時鐘(FCLK、HCLK和PCLK)是有一定的比例關系這種關系是通過寄存器CLKDIVN中的HDIVN位和PDIVN位來控制的因此我們只要知道了FCLK,再通過這兩位的控制,就能確定HCLK和PCLK而FCLK是如何得到的呢?它是通過輸入時鐘(即外部時鐘源)的頻率,經(jīng)過一個計算公式得到的,這個計算公式(查閱數(shù)據(jù)手冊)還需要三個參數(shù)(MDI

3、V、PDIV、SDIV),而這三個參數(shù)是經(jīng)過寄存器MPLLCON配置得到的最后,我們用最清晰的線路來繪制一下時鐘的產(chǎn)生過程:外部時鐘源通過寄存器MPLLCON得到FCLK再通過寄存器CLKDIVN得到HCLK和PCLK。在本開發(fā)板上,外部晶振為12MHz,進過MPLL倍頻以后得到400MHz的FCLK,而FCLK、HCLK、PCLK之間的比例關系為1:4:8,因此HCLK為100MHz,PCLK為50MHz啟動文件中定時器中斷定時器輸出時鐘頻率=PCLK (prescaler+1) divider其中prescaler值由TCFG0決定,divider值由TCFG1決定,而prescaler只

4、能取0255之間的整數(shù),divider只能取2、4、8和16。比如已知PCLK為50MHz,而我們想得到某一定時器的輸出時鐘頻率為25kHz,則依據(jù)公式可以使PCLK (prescaler+1) dividerprescaler等于249,divider等于8。25kHz 這個頻率用來給計數(shù)器TCNTB0用。假如:我們設置TCNTB0=1000,TCNTB0從1000減到0需要(1000/25000)秒如果我們要定1秒鐘的時間,怎么設置TCNTB0 ?當TCNTB0 減到0的時候,就會產(chǎn)生TIMER0中斷,也就是定時器0中斷,當然在程序前要先把中斷相關的屏弊打開,和定義TIMER0中斷服務程序

5、.當設置了頻率和計數(shù)值之后,還要在TCON寄存器中來更新你設置的TCNTB0值,并可以啟動定時器。TCON 定時器控制寄存器,是用來設置自動重載,更新TCNTB0,和啟動,停止定時器用的/中斷服務程序void _irq Timer4_ISR(void) rSRCPND = rSRCPND | (0 x114); rINTPND = rINTPND | (0 x114);. .注意:中斷服務程序要以 _irq 開頭,一般在中斷服務程序中,清除本中斷標志練習:用TIMER4中斷來控制,蜂鳴器的響聲,每0.5秒響一次。PWM(Pulse Width Modulation)脈寬調制,它是利用微控制器的

6、數(shù)字輸出來對模擬電路進行控制的一種非常有效的技術,廣泛應用于測量、通信、功率控制與變換等許多領域。s3c2440芯片中一共有5個16位的定時器,其中有4個定時器(定時器0定時器3)具有脈寬調制功能,因此用s3c2440可以很容易地實現(xiàn)PWM功能。PWM是通過引腳TOUT0TOUT3輸出的,而這4個引腳是與GPB0GPB3復用的,因此要實現(xiàn)PWM功能首先要把相應的引腳配置成TOUT輸出。再設置定時器的輸出時鐘頻率,它是以PCLK為基準,再除以用寄存器TCFG0配置的prescaler參數(shù),和用寄存器TCFG1配置的divider參數(shù)。然后設置脈沖的具體寬度,它的基本原理是通過寄存器TCNTBn來

7、對寄存器TCNTn(內部寄存器)進行配置計數(shù),TCNTn是遞減的,如果減到零,則它又會重新裝載TCNTBn里的數(shù),重新開始計數(shù)而寄存器TCMPBn作為比較寄存器與計數(shù)值進行比較,當TCNTn=TCMPBn時,TOUTn輸出的電平會翻轉,而當TCNTn減為零時,電平會又翻轉過來,就這樣周而復始。因此這一步的關鍵是設置寄存器TCNTBn和TCMPBn,前者可以確定一個計數(shù)周期的時間長度,而后者可以確定方波的占空比。從上面的圖來看,誰來確定周期?誰來確實占空比?最后就是對PWM的控制,它是通過寄存器TCON來實現(xiàn)的啟動/終止位,用于啟動和終止定時器手動更新位,用于手動更新TCNTBn和TCMPBn輸

8、出反轉位,用于改變輸出的電平方向,使原先是高電平輸出的變?yōu)榈碗娖剑碗娖降淖優(yōu)楦唠娖阶詣又剌d位,用于TCNTn減為零后重載TCNTBn里的值,當不想計數(shù)了,可以使自動重載無效練習:利用PWM驅動開發(fā)板的資源,用它來驅動蜂鳴器,并通過改變脈寬來改變蜂鳴器發(fā)聲的頻率定時器輸出時鐘頻率=PCLK (prescaler+1) divider其中prescaler值由TCFG0決定,divider值由TCFG1決定,而prescaler只能取0255之間的整數(shù),divider只能取2、4、8和16。比如已知PCLK為50MHz,而我們想得到某一定時器的輸出時鐘頻率為25kHz,則依據(jù)公式可以使PCLK (prescaler+1) dividerprescaler等于249,divider等于8。25kHz 這個頻率用來給計數(shù)器TCNTB0用。假如:我們設置TCNTB0=1000,TCNTB0從1000減到0需要(1000/25000)秒如果我們要定1秒鐘的時間,怎么設置TCNTB0 ?/中斷服務程序void _irq Timer4_ISR(void) rSRCPND = rSRCPND | (0 x114); rINTPND = rINTPND | (0

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論