定時器原理(包含軟定時器設計)_第1頁
定時器原理(包含軟定時器設計)_第2頁
定時器原理(包含軟定時器設計)_第3頁
定時器原理(包含軟定時器設計)_第4頁
定時器原理(包含軟定時器設計)_第5頁
已閱讀5頁,還剩25頁未讀, 繼續免費閱讀

下載本文檔

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

文檔簡介

第五章定時器PWM定時器本章目標2440PWM定時器的基本操作定時器中斷操作軟定時器的封裝特性–五個16位定時器–兩個8位預分頻器和兩個4位分頻器–可編程輸出波形的占空比控制(PWM)–自動重載模式或單脈沖模式–死區發生什么是定時器定時器的本質就是一個遞減的計數器,根據觸發條件在計數器的值達到觸發條件的時候,觸發事件的發生。特性概述S3C2440A有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。功能框圖定時器0定時器1定時器2定時器3定時器4比定時器4多了具有脈寬調制(PWM)功能無輸出引腳內部定時器比定時器1多了死區發生器步驟1:配置預分頻器和分頻值(TCFG0,TCFG1)目的產生一定的定時器時鐘周期時鐘頻率計算公式:定時器輸入時鐘頻率=PCLK/{預分頻值+1}/{分頻值}TCFGn定時器配制寄存器0(TCFG0)位[7:0]、位[15:8]分別用于控制預分頻器0、1,范圍0~255。經過預分頻器出來的始終頻率:PCLK/{預分頻值+1}定時器配制寄存器1(TCFG1)經過預分頻器的始終將被2、4、8、16分頻

示例:假設PCLK=50M,預分頻值=249,分頻值=8 時鐘頻率=50M/(249+1)/8=25Khz時鐘周期=1/25KHZ=40usTCFG0定時器配制寄存器0(TCFG0)TCFG1定時器配制寄存器1(TCFG1)步驟2:配置計數初始值(TCNTBn)目的產生一個計數初始值(注意:這里暫沒有設置比較值,不產生PWM脈沖控制)初始值計算公式:初始值=定時時間/時鐘周期問:假設時鐘周期已設置40us,若要定時500ms產生一次中斷,初始值等于多少?初始值=500ms/40us=12500TCNTBn、TCMPBn定時器計數寄存器和比較寄存器(TCNTB0/TCMPB0)步驟3:把初始值裝載進內部TCNTn過程:設置TCON寄存器的手動更新位,當給TCON寄存器的手動更新位置1,即將TCNTB0寄存器的值裝入內部寄存器TCNT0(注意:第一次要手動更新)TCON功能位設置手動更新10:無用1:將TCNTB0/TCMPB0寄存器的值裝入內部寄存器TCNT0/TCMP0步驟4:設置自動裝載,并清除手動更新目的:第一次手動更新后,TCNTn有計數值,但是當計數到0時,沒有再給TCNTBn賦值就不會再計數,所以設置自動裝載(注意:設置自動裝載后,要把手動更新清除)自動重載S3C2440APWM定時器包含雙緩沖功能,允許在不停止當前定時器操作的情況下為下次定時器操作改變重載值。所以即使設置了新的定時器值,當前定時器操作仍然順利的被完成。定時器值可以被寫入到定時器計數緩沖寄存器(TCNTBn)中并且可以從定時器計數監視寄存器(TCNTOn)中讀取當前定時器的計數值。如果讀取TCNTBn,讀出的值不是指示當前計數器的狀態而是下次定時器持續時間的重載值。自動重載操作在TCNTn到達0時復制TCNTBn到TCNTn。如果需要改變TCNTBn,需執行手動更新。TCNTBn的值,只有在TCNTn到達0并且使能了自動重載時才被加載到TCNTn。如果TCNTn變為0并且自動重載位為0,TCNTn不會進一步任何操作。TCON功能位設置開啟/停止00:停止定時器1:開啟定時器手動更新10:無用1:將TCNTB0/TCMPB0寄存器的值裝入內部寄存器TCNT0/TCMP0自動加載30:不自動加載1:在定時器0計數達到0時,將TCNTB0/TCMPB0寄存器的值自動裝入內部寄存器TCNT0/TCMP0步驟5:注冊定時器中斷服務函數并開啟定時器中斷

步驟6:開啟定時器功能位設置開啟/停止00:停止定時器1:開啟定時器要使用PWM脈寬調試的方法在原來的步驟2(配置計數初始值--TCNTBn)時,同時配置TCMPBn,并設置TCON的輸出反轉PWMTCON功能位設置開啟/停止00:停止定時器1:開啟定時器手動更新10:無用1:將TCNTB0/TCMPB0寄存器的值裝入內部寄存器TCNT0/TCMP0輸出反轉20:TOUT0不反轉;1:TOUT0反轉自動加載30:不自動加載1:在定時器0計數達到0時,將TCNTB0/TCMPB0寄存器的值自動裝入內部寄存器TCNT0/TCMP0內部結構一個定時器(除了定時器4)包含TCNTBn,TCNTn,TCMPBn和TCMPn。(TCNTn和TCMPn是內部寄存器的名稱。從TCNTOn寄存器中可以讀取TCNTn)當定時器到達0時TCNTBn和TCMPBn被加載到TCNTn和TCMPn中。當TCNTn到達0時,如果中斷為使能則將發生一個中斷請求。內部工作流程定時器內部控制邏輯工作流程:程序初始化,設定TCMPBn、TCNTBn這兩個寄存器,他們表示定時器n的比較值、初始計數值。隨之設置TCON寄存器啟動定時器n,這是TCMPBn、TCNTBn的值將被裝入其內部寄存器TCMPn、TCNTn中。在定時器n的工作頻率下,TCNTn開始計數,其值可以通過讀取TCNTOn寄存器獲得。當TCNTn的值等于TCMPn的值時,定時器n的輸出管腳TOUTn反轉;TCNTn繼續減1計數。當TCNTn的值到達0時,其輸出管腳TOUTn再次反轉。并觸發定時器的中斷(假設中斷使能)當TCNTn的值到達0時,如果TCON寄存器中將定時器n設為“自動加載”,則TCMPBn和TCNTBn寄存器的值被自動裝入TCMPn和TCNTn中,下一個計數流程開始。PWM假設設置TCNTBn為150,設置TCMPBn為100。置位手動更新位并且配制變相位(開/關),開啟自動裝載,清除手動更新位后,開啟定時器,則輸出波形如下:工作原理定時計數緩沖寄存器(TCNTBn)包含了一個(當定時器被使能時)被加載到遞減計數器中的初始值。定時比較緩沖寄存器(TCMPBn)包含了與遞減計數器相比較的初始值。這種TCNTBn和TCMPBn的雙緩沖特征保證了改變頻率和占空比時定時器產生穩定的輸出。每個定時器有它自己的由定時器時鐘驅動的16位遞減計數器。當遞減計數器到達零時,產生定時器中斷請求通知CPU定時器操作已經完成。當定時器計數器到達零時,相應的TCNTBn的值將自動被加載到遞減計數器以繼續下一次操作。然而,如果定時器停止了,例如,在定時器運行模式期間清除TCONn的定時器使能位,TCNTBn的值將不會被重新加載到計數器中。TCMPBn的值是用于脈寬調制(PWM)。當遞減計數器的值與定時器控制邏輯中的比較寄存器的值相匹配時定時器控制邏輯改變輸出電平。因此,比較寄存器決定PWM輸出的開啟時間(或關閉時間)。過程分析1.使能自動重載功能。設置TCNTBn為160(50+110)并且設置TCMPBn為110。置位手動更新位并且配制變相位(開/關).手動更新位分別設置TCNTn和TCMPn到TCNTBn和TCMPBn的值中。然后分別設置TCNTBn和TCMPBn為80(40+40)和40,以決定下次重載值。2.設置啟動位,預設手動更新位為0,變相位為關,自動重載位為開。定時器在定時器分辨率內的等待時間后啟動遞減計數。3.當TCNTn與TCMPn的值相同時,TOUTn的邏輯電平從低電平變為高電平。過程分析4.當TCNTn到達0時,發出中斷請求并且TCNTBn的值加載到暫存器中。在下一個定時器標記時刻,重載TCNTn為暫存器(TCNTBn)的值。5.中斷服務程序(ISR)中,為下一個持續時間分別設置TCNTBn和TCMPBn為80(20+60)和60。6.當TCNTn與TCMPn的值相同時,TOUTn的邏輯電平從低電平變為高電平。7.當當TCNTn到達0時,觸發一個中斷自動重載TCNTn為TCNTBn的值。8.中斷服務程序(ISR)中,禁止自動重載和中斷請求以停止定時器。9.當TCNTn與TCMPn的值相同時,TOUTn的邏輯電平從低電平變為高電平。10.盡管TCNTn到達0,但因為禁止了自動重載,所以TCNTn并不會再次重載并且定時器已經停止了。11.不再產生中斷請求。配置定時器流程選擇一個定時器(0,1,2,3,4)設置預分頻值(TCFG0)設置分頻值(TCFG1)設置計數初始值(TCNTBn)設置TCON(手動更新,自動加載)清除TCON的手動更新開啟定時器開啟定時器中斷(定時器中斷使能)注冊定時器中斷服務函數代碼分析rTCFG0&=0xFF00FF;rTCFG0|=0xf900;//prescaler等于249rTCFG1&=~0xF0000;rTCFG1|=0x20000;//divider等于8,則設置定時器4的時鐘頻率為25kHzrTCNTB4=12500;//讓定時器4每隔0.5秒中斷一次

rTCON&=~0xF00000;rTCON|=0x700000;rTCON&=~0x200000;//定時器4開始工作硬件驅動硬件接口函數:1、intTIMER_Init(intnTimerID,intnDiv0,intnDiv1)//配置預分頻比2、intTIMER_Create(......)//配置定時器3、intTIMER_Destory(intnTimerID)//注銷定時器中斷4、voidTIMER_Start(intnTimerID)//啟動定時器5、voidTIMER_Stop(intnTimerID)//停止定時器軟定

溫馨提示

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

評論

0/150

提交評論