《ARM Cortex-A9多核嵌入式系統(tǒng)開發(fā)教程》課件第九章_第1頁
《ARM Cortex-A9多核嵌入式系統(tǒng)開發(fā)教程》課件第九章_第2頁
《ARM Cortex-A9多核嵌入式系統(tǒng)開發(fā)教程》課件第九章_第3頁
《ARM Cortex-A9多核嵌入式系統(tǒng)開發(fā)教程》課件第九章_第4頁
《ARM Cortex-A9多核嵌入式系統(tǒng)開發(fā)教程》課件第九章_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

PWM定時器和WatchDog定時器9PWM定時器PWM定時器控制寄存器PWM定時器應用實例WatchDog定時器WatchDog定時器控制寄存器WatchDog定時器程序?qū)嵗?章PWM定時器和WatchDog定時器9.1PWM定時器9.1.1PWM定時器概述

在Exynos4412處理器中,共有5個32位的具有脈沖寬度調(diào)制(PulseWidthModulation,PWM)功能的定時器,這些定時器都可產(chǎn)生內(nèi)部中斷信號給ARM子系統(tǒng)。另外,定時器0、1、2、3具有脈沖寬度調(diào)制功能,并可驅(qū)動其對應的I/O口。其中,定時器0有可選的死區(qū)(dead-zone)產(chǎn)生功能,用以支持大電流設備;定時器4是內(nèi)置的,沒有外部引腳。PWM定時器的特點:●

5個32位定時器;●

2個8位的預分頻器對PLCK進行第一次分頻,5個時鐘分頻器和多路復用器進行第二次分頻;●?可編程選擇PWM通道;●

4個獨立的PWM通道,可編程進行占空比和極性控制;第9章PWM定時器和WatchDog定時器PWM定時器的特點:●?提供靜態(tài)配置方式,在PWM沒有啟動時使用;●?提供動態(tài)配置方式,在PWM運行期間使用;●?支持自動重載模式和觸發(fā)脈沖模式;●?兩個PWM輸出具有死區(qū)發(fā)生器;第9章PWM定時器和WatchDog定時器9.1.2PWM定時器工作原理5個定時器都采用APB-PCLK作為時鐘源。通過預分頻器進行第一級分頻,其中定時器0和1共用一個可編程8位的預分頻器0,定時器2、3、4共用另外一個預分頻器1。之后,通過定時器各自的時鐘分頻器進行第二級分頻,時鐘分頻器有5種分頻輸出(1/1,1/2,1/4,1/8,1/16)。然后,通過TCNTBn和TCMPBn進行計數(shù)和電平翻轉(zhuǎn)。第9章PWM定時器和WatchDog定時器圖9.1Exynos4412PWM定時器的工作原理第9章PWM定時器和WatchDog定時器PWM定時器工作的具體過程:●?當時鐘被使能后,定時器計數(shù)緩沖寄存器(TCNTBn)把計數(shù)初始值下載到遞減計數(shù)器(TCNTn)中,定時器比較緩沖寄存器(TCMPBn)把其初始值下載到比較寄存器(TCMPn)中?!襁f減計數(shù)器從TCNTBn得到初值以后,按其時鐘頻率進行遞減計數(shù)。當其值達到0時,產(chǎn)生定時器中斷請求并通知CPU該次計時完成。●TCMPBn的值用于脈沖寬度調(diào)制。當定時器的遞減計數(shù)器的值和比較寄存器的值相等時,PWM輸出將改變輸出電平的狀態(tài)。第9章PWM定時器和WatchDog定時器9.1.3PWM定時器的死區(qū)功能

圖9.1中,XpwmTOUT0和XpwmTOUT1可用于電源設備的PWM控制。Exynos4412具有死區(qū)產(chǎn)生器,能夠產(chǎn)生如圖9.3所示的波形。這個功能允許在一個設備關閉和另外一個設備開啟之間插入一個時間間隔。這個時間間隔能夠有效防止兩個設備的同時啟/停。。第9章PWM定時器和WatchDog定時器圖9.3死區(qū)使能時的波形第9章PWM定時器和WatchDog定時器9.2PWM定時器控制寄存器定時器配置寄存器0(TFCG0)

該寄存器用于配置兩個8位預分配器的值和死區(qū)長度,如表9.1所示表9.1定時器配置寄存器0(TFCG0)第9章PWM定時器和WatchDog定時器2.定時器配置寄存器1(TFCG1)

該寄存器用于配置PWM定時器多路開關MUX的輸入,即選擇分頻器的值,如表9.2所示。表9.2定時器配置寄存器1(TFCG1)第9章PWM定時器和WatchDog定時器定時器的輸入頻率的計算公式為:定時器的輸入時鐘頻率?=?PCLK/({預分頻值?+?1})/{分頻值}其中:

預分頻值的取值范圍為1~255,按照表9.1;

各個定時器的分頻值則按表9.2列出的寄存器TCFG1中各對應位域進行設置;第9章PWM定時器和WatchDog定時器3.定時器控制寄存器(TCON)

該寄存器用于自動重載、定時器自動更新、定時器啟/停、輸出翻轉(zhuǎn)、死區(qū)啟/停等功能的控制,如表9.3所示。第9章PWM定時器和WatchDog定時器表9.3定時器控制寄存器(TCON)第9章PWM定時器和WatchDog定時器4.定時器計數(shù)緩沖寄存器(TCNTBn,n

=

0~4)該類寄存器用來預裝PWM定時器的計數(shù)初值,如表9.4所示。表9.4定時器比較緩沖寄存器第9章PWM定時器和WatchDog定時器5.定時器比較緩沖寄存器(TCMPBn,n

=

0~3)該類寄存器用來更改PWM波形的電平狀態(tài),從而更改PWM的占空比,如表9.5所示。表9.5定時器比較緩沖寄存器第9章PWM定時器和WatchDog定時器9.3PWM定時器應用實例以產(chǎn)生定時器0中斷為例,介紹定時器0的配置過程。第9章PWM定時器和WatchDog定時器/*1.相關寄存器的定義,關聯(lián)各自的物理地址*/#include"int.h"#include"stdio.h"#define PWMTIMER_BASE (0x139D0000)#define TCFG0

(*((volatileunsignedlong*)(PWMTIMER_BASE+0x00)))#define TCFG1

(*((volatileunsignedlong*)(PWMTIMER_BASE+0x04)))#define TCON

(*((volatileunsignedlong*)(PWMTIMER_BASE+0x08)))#define TCNTB0

(*((volatileunsignedlong*)(PWMTIMER_BASE+0x0C)))#define TCMPB0

(*((volatileunsignedlong*)(PWMTIMER_BASE+0x10)))#define TCNTO0

(*((volatileunsignedlong*)(PWMTIMER_BASE+0x14)))#define

TINT_CSTA

(*((volatileunsignedlong*)(PWMTIMER_BASE+0x44)))#defineulongunsignedlongvoidpwm_stop(void);voidtimer_request(void);voidirq_handler(void);voidtimer_init(ulong

utimer,ulong

uprescaler,ulong

udivider,ulong

utcntb,ulong

utcmpb);voidirs_timer(?);intcounter=0; //用于記錄中斷發(fā)生的次數(shù)第9章PWM定時器和WatchDog定時器/*2.定義各個功能函數(shù)*/voidpwm_stop(void) //停止timer0{ TCON&=~0x1;}voidirs_timer(?) //?timer0中斷的中斷處理函數(shù){TINT_CSTAT|=(0x1<<5); //清timer0的中斷狀態(tài)寄存器printf("Timer0IntCounter=%d\r\n",counter++); //打印中斷發(fā)生次數(shù)

intc_clearvectaddr(?); //清除vic相關的中斷}第9章PWM定時器和WatchDog定時器voidtimer_request(void){ printf("\r\n#############Timertest############\r\n");

pwm_stop(?); //禁止timer0 counter=0; intc_setvectaddr(NUM_TIMER0,irs_timer); //設置timer0的中斷處理函數(shù),未列出函數(shù)原型 intc_enable(NUM_TIMER0); //使能timer0中斷,未列出函數(shù)原型 //設置timer0的參數(shù):定時器0,預分配值(65+1),分頻值4(0b0100), tcntb=62500,tcmpb=0 timer_init(0,66,4,62500,0); }第9章PWM定時器和WatchDog定時器9.4WatchDog定時器9.4.1看門狗原理

看門狗(WatchDog)原理上就是一個定時器。定時器對時鐘脈沖進行計數(shù),當定時器溢出時,產(chǎn)生復位信號,使得整個系統(tǒng)復位。在正常的程序或嵌入式系統(tǒng)中,需要定期對看門狗進行復位,使其重新計數(shù),這樣定時器不會溢出而導致復位系統(tǒng),從而保證系統(tǒng)的正常運行。

看門狗的作用就是防止系統(tǒng)因意外而“跑飛”;而在可能導致整個系統(tǒng)癱瘓時,保證系統(tǒng)能夠在無人監(jiān)守的情況下仍然能夠復位,正常運行。第9章PWM定時器和WatchDog定時器9.4.2Exynos4412看門狗控制Exynos4412處理器的看門狗模塊如圖9.4所示,包括一個預分頻因子、一個四分頻的分頻器和一個16位的計數(shù)器。輸入時鐘為PCLK,它經(jīng)過兩級分頻(預分頻和分頻),將分頻后的時鐘作為該定時器的輸入時鐘。當計數(shù)器計滿后可以產(chǎn)生中斷或者復位信號。第9章PWM定時器和WatchDog定時器圖9.4Exynos4412處理器的看門狗模塊第9章PWM定時器和WatchDog定時器看門狗定時器計數(shù)值的計算公式如下:輸入到計數(shù)器的時鐘周期t_WatchDog=1/(PCLK/(預分頻值?+?1)/分頻值)其中:預分頻器(Prescaler,取值范圍為0~254)及分頻因子(Divisionfactor,取值為16、32、64、128)的值由用戶在WTCON(看門狗時鐘控制寄存器)中設置。第9章PWM定時器和WatchDog定時器(2)看門狗的定時周期為T?=?計數(shù)值(WTCNT初值?-?WTCNT當前值)?*t_WatchDog其中,WTCNT為看門狗計數(shù)寄存器,用來設置計數(shù)多少個時鐘周期,乘以時鐘周期則是定時的總時間。第9章PWM定時器和WatchDog定時器9.5WatchDog定時器控制寄存器1.看門狗時鐘控制寄存器(WTCON)

該寄存器用于配置用戶是否啟用看門狗定時器、預分頻值、4個分頻比的選擇、是否允許中斷產(chǎn)生、是否允許復位操作等。表9.6看門狗時鐘控制寄存器(WTCON)第9章PWM定時器和WatchDog定時器2.看門狗數(shù)據(jù)寄存器(WTDAT)WTDAT用于指定定時時間。在初始化看門狗操作后,看門狗寄存器的值不能被自動裝載到看門狗計數(shù)器(WTCNT)中。表9.7看門狗數(shù)據(jù)寄存器(WTDAT)第9章PWM定時器和WatchDog定時器3.看門狗計數(shù)寄存器(WTCNT)WTCNT用于設定看門狗定時器工作時計數(shù)器的當前計數(shù)值。初始化看門狗操作后,看門狗數(shù)據(jù)寄存器的值不能被自動裝載到看門狗計數(shù)寄存器中。表9.8看門狗計數(shù)寄存器(WTCNT)第9章PWM定時器和WatchDog定時器9.6WatchDog定時器程序?qū)嵗?.看門狗程序設計思路一般流程如下:(1)設置看門狗中斷操作,包括全局中斷和看門狗中斷的使能以及看門狗中斷向量的定義。如果只是進行復位操作,這一步可以不用設置。(2)對看門狗控制寄存器進行設置,包括設置預分頻因子、分頻器的分頻值、中斷使能和復位使能等。(3)對看門狗數(shù)據(jù)寄存器(WTDAT)和看門狗計數(shù)寄存器(WTCNT)進行設置。(4)啟動看門狗定時器。第9章PWM定時器和WatchDog定時器2.看門狗程序設計#include"int.h"#include"stdio.h"#defineWDT_BASE (0x10060000)#defineWTCON (*((volatileunsignedlong*)(WDT_BASE+0x00)))#defineWTDAT (*((volatileunsignedlong*)(WDT_BASE+0x04)))#defineWTCNT (*((volatileunsignedlong*)(WDT_BASE+0x08)))#defineWTCLRINT (*((volatileunsignedlong*)(WDT_BASE+0x0C)))#defineulongunsignedlongvoidisr_wtd(void);voidwtd_operate(ulonguenreset,ulonguenint,ulonguselectclk,ulonguenwtd,ulong uprescaler,ulonguwtdat,ulonguwtcnt);第9章PWM定時器和WatchDog定時器voidwtd_test(void){ printf("\r\n\r\n#############WatchDogtest#############\r\n");

//設置看門狗中斷的中斷處理函數(shù) intc_setvectaddr(NUM_WDT,isr_wtd); intc_enable(NUM_WDT); //使能看門狗中斷 wtd_operate(0,1,0,1,100,100000000,100000000); //測試看門狗的定時功能}第9章PWM定時器和WatchDog定時器//看門狗中斷處理函數(shù)voidisr_wtd(?){ staticintwtdcounter=0; //記錄中斷發(fā)生次數(shù) printf("%d\r\n",++wtdcounter); WTCLRINT=1; //看門狗

溫馨提示

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

評論

0/150

提交評論