嵌入式系統(tǒng)原理及應(yīng)用第9章-ARM9定時(shí)器計(jì)數(shù)器程序設(shè)計(jì)課件_第1頁(yè)
嵌入式系統(tǒng)原理及應(yīng)用第9章-ARM9定時(shí)器計(jì)數(shù)器程序設(shè)計(jì)課件_第2頁(yè)
嵌入式系統(tǒng)原理及應(yīng)用第9章-ARM9定時(shí)器計(jì)數(shù)器程序設(shè)計(jì)課件_第3頁(yè)
嵌入式系統(tǒng)原理及應(yīng)用第9章-ARM9定時(shí)器計(jì)數(shù)器程序設(shè)計(jì)課件_第4頁(yè)
嵌入式系統(tǒng)原理及應(yīng)用第9章-ARM9定時(shí)器計(jì)數(shù)器程序設(shè)計(jì)課件_第5頁(yè)
已閱讀5頁(yè),還剩69頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1第9章微處理器S3C2410A的定時(shí)/計(jì)數(shù)器定時(shí)器部件在實(shí)時(shí)控制系統(tǒng)中起著舉足輕重的作用,它可以實(shí)現(xiàn)對(duì)設(shè)備的周期性控制,同時(shí)使用定時(shí)器的PWM輸出功能可以實(shí)現(xiàn)設(shè)備功率的控制,用于恒溫控制系統(tǒng)等。S3C2410A芯片中的定時(shí)部件有多個(gè),不同的定時(shí)部件有不同的用途。看門狗定時(shí)器(WATCHDOG)主要用來(lái)防止處理器的死機(jī),需要在看門狗定時(shí)器規(guī)定的時(shí)間內(nèi)喂狗,就是重新給看門狗定時(shí)器賦初值,否則時(shí)間到產(chǎn)生溢出復(fù)位信號(hào),使ARM系統(tǒng)復(fù)位而重新啟動(dòng);定時(shí)器(TIMER)主要用于定時(shí)或計(jì)數(shù),還可用于脈寬調(diào)制PWM(PulseWidthModulation)的控制;實(shí)時(shí)時(shí)鐘RTC(RealTimeClock)主要用于為系統(tǒng)提供日歷與實(shí)時(shí)鐘信號(hào)。定時(shí)部件雖然種類較多,但它們的工作原理基本相同。本章主要介紹各自的原理與應(yīng)用。29.1S3C2410A定時(shí)/計(jì)數(shù)器原理定時(shí)器或計(jì)數(shù)器的邏輯電路是相同的,它們的主要區(qū)別在用途上。在應(yīng)用時(shí),定時(shí)器的輸入信號(hào)來(lái)自于內(nèi)部,是周期信號(hào),從而通過(guò)計(jì)數(shù)實(shí)現(xiàn)了定時(shí)的功能;而計(jì)數(shù)器的輸入信號(hào)一般來(lái)自于外部,是非周期信號(hào),因而只能實(shí)現(xiàn)計(jì)數(shù)的功能。因此這樣的邏輯電路被稱為定時(shí)/計(jì)數(shù)器。圖9-1是一般定時(shí)/計(jì)數(shù)器內(nèi)部工作原理框圖,它是以一個(gè)N位計(jì)數(shù)器(加1或減1)為核心,計(jì)數(shù)器的初值在編程時(shí)設(shè)置。計(jì)數(shù)器的輸入脈沖分為2類:系統(tǒng)時(shí)鐘和外部事件脈沖。微處理器S3C2410A使用的是具有減法功能的定時(shí)/計(jì)數(shù)器。39.2看門狗定時(shí)器(WATCHDOG)

S3C2410A中看門狗定時(shí)器的作用是,當(dāng)系統(tǒng)程序出現(xiàn)功能錯(cuò)亂,引起系統(tǒng)程序出現(xiàn)死循環(huán)時(shí),是系統(tǒng)重新啟動(dòng)開始工作。嵌入式系統(tǒng)由于使用環(huán)境的復(fù)雜,即使用環(huán)境中有較強(qiáng)的干擾信號(hào),或者系統(tǒng)程序本身的不完善,因而不能排除系統(tǒng)程序不會(huì)出現(xiàn)死循環(huán)現(xiàn)象。當(dāng)系統(tǒng)使用看門狗部件時(shí),如果系統(tǒng)出現(xiàn)了死循環(huán),看門狗定時(shí)器將產(chǎn)生一個(gè)具有一定寬度的復(fù)位信號(hào),強(qiáng)迫系統(tǒng)復(fù)位,恢復(fù)系統(tǒng)的正常運(yùn)行。看門狗定時(shí)器必須在小于定時(shí)的時(shí)間周期內(nèi),對(duì)其重新賦初值(俗稱“喂狗”),使看門狗定時(shí)器不會(huì)產(chǎn)生復(fù)位信號(hào),系統(tǒng)正常運(yùn)行。當(dāng)系統(tǒng)程序出現(xiàn)死循環(huán)時(shí),無(wú)法給看門狗定時(shí)器喂狗或者說(shuō)不能執(zhí)行喂狗函數(shù),將會(huì)產(chǎn)生復(fù)位信號(hào)。49.2.1看門狗定時(shí)器的工作原理

S3C2410A看門狗定時(shí)器有2種工作模式:

①帶中斷請(qǐng)求信號(hào)的常規(guī)時(shí)隙定時(shí)器。

②產(chǎn)生內(nèi)部復(fù)位信號(hào)的定時(shí)器,即當(dāng)定時(shí)器的值為0時(shí),產(chǎn)生一個(gè)寬度為128PCLK(系統(tǒng)時(shí)鐘周期)的復(fù)位脈沖信號(hào)。圖9-2是看門狗定時(shí)器的邏輯功能圖??撮T狗定時(shí)器一旦啟動(dòng)工作,看門狗定時(shí)器的計(jì)數(shù)常數(shù)寄存器(WTDAT)就無(wú)法自動(dòng)地裝載到計(jì)數(shù)寄存器(WTCNT)中。因此應(yīng)該在看門狗定時(shí)器工作之前,通過(guò)初始化編程將計(jì)數(shù)常數(shù)寄存器(WTDAT)的值寫入到計(jì)數(shù)寄存器(WTCNT)中。59.2.2看門狗特殊功能控制寄存器

S3C2410A芯片的看門狗定時(shí)器邏輯中有3個(gè)控制其操作的特殊功能寄存器:看門狗控制寄存器(WTCON);計(jì)數(shù)常數(shù)寄存器(WTDAT)和看門狗計(jì)數(shù)寄存器(WTCNT)。它們的屬性如表9-1。61.看門狗控制寄存器(WTCON)72.看門狗常數(shù)寄存器(WTDAT)看門狗常數(shù)寄存器WTDAT(WatchdogTimerDataRegister)用來(lái)存儲(chǔ)看門狗定時(shí)器的溢出時(shí)間間隔常數(shù)值??撮T狗計(jì)數(shù)寄存器從此值開始做減法計(jì)數(shù),直到變?yōu)?為時(shí)間間隔。計(jì)數(shù)公式如下:

計(jì)數(shù)常數(shù)=所需時(shí)間間隔/計(jì)數(shù)時(shí)鐘周期T=所需時(shí)間間隔*(PCLK/(預(yù)分頻值+1)/分割因子)WTDAT是可讀寫的,地址為0x53000004,復(fù)位初值為0x8000。其位功能如下表所示。83.看門狗計(jì)數(shù)寄存器(WTCNT)

看門狗計(jì)數(shù)寄存器WTCNT(WatchdogTimerCounterRegister)是一個(gè)實(shí)時(shí)動(dòng)態(tài)變化的減法計(jì)數(shù)器,WTCNT工作時(shí)存儲(chǔ)當(dāng)前計(jì)數(shù)值。WTCNT是可讀寫的,地址為0x53000008,復(fù)位后初值為0x8000??撮T狗計(jì)數(shù)寄存器的位功能描述如下表所示。99.2.3看門狗定時(shí)器應(yīng)用示例

1.Bootloader中的看門狗定時(shí)器編程

在系統(tǒng)啟動(dòng)引導(dǎo)的Bootloader程序中,由于這時(shí)ARM系統(tǒng)的部件初始化需要進(jìn)行大量的工作,需要關(guān)閉看門狗定時(shí)器,就是設(shè)置看門狗控制寄存器WTCON的b5=0(看門狗定時(shí)器使能位無(wú)效),b0=0(禁止看門狗定時(shí)器的復(fù)位功能),與其它位無(wú)關(guān),因此控制字可為0x00,而且必須使用匯編語(yǔ)言編寫程序。程序代碼如下:WTDOGEQU0x53000000;定義WTCON的地址 LDRR0,=WTCON;WTCON地址送R0 LDRR1,=0x00;控制字0x00送R1

STRR1,[R0]

;控制字寫入R02.程序正常運(yùn)行時(shí)的看門狗定時(shí)器編程

看門狗可以實(shí)現(xiàn)ARM系統(tǒng)的復(fù)位,不需要外圍的控制電路。要實(shí)現(xiàn)看門狗的功能,需要對(duì)看門狗的特殊功能寄存器進(jìn)行配置操作。編程流程如下:①看門狗定時(shí)器作為一般定時(shí)器使用時(shí),需要設(shè)置看門狗的中斷操作,因?yàn)檫@是看門狗作為一般定時(shí)器使用時(shí)的唯一用法。除包括ARM系統(tǒng)的各個(gè)中斷寄存器的設(shè)置外,還要看門狗自身中斷使能有效。如果作為ARM系統(tǒng)的看門狗使用,這一步不用設(shè)置。②設(shè)置看門狗控制寄存器WTCON,主要包括預(yù)分頻值、分割因子,看門狗定時(shí)器復(fù)位信號(hào)輸出使能b0=1(在看門狗定時(shí)器回0時(shí)復(fù)位信號(hào)有效)。③在預(yù)估的預(yù)分頻值、分割因子的情況下,計(jì)算看門狗的定時(shí)常數(shù)。只要計(jì)算的結(jié)果不大于WTDAT的數(shù)值范圍即216-1均為有效數(shù)據(jù)。將定時(shí)常數(shù)賦給WTDAT寄存器和WTCNT寄存器。④啟動(dòng)看門狗定時(shí)器。使看門狗定時(shí)器使能位b5=1(使能有效電平信號(hào))。1011應(yīng)用實(shí)例使用看門狗功能時(shí),必須事先進(jìn)行初始化。初始化的主要工作就是設(shè)置WTCON寄存器和WTDAT寄存器。例如,實(shí)現(xiàn)S3C2410A芯片的看門狗功能,監(jiān)測(cè)系統(tǒng)的周期不大于40us,PCKL=50Mhz。首先計(jì)算賦給WTDAT寄存器的初值。初值=40us*(PCKL/(預(yù)分頻值+1)/分割系數(shù))注意:這里PCKL的單位是赫茲,預(yù)分頻值和分割系數(shù)必須事先有一個(gè)固定的值。本例中預(yù)分頻值=0,分割系數(shù)=16,即設(shè)置WTCON的值為0x0021,允許看門狗定時(shí)器工作,允許看門狗復(fù)位信號(hào)有效。初值計(jì)算過(guò)程如下:初值=40*10-6*(50*106/(0+1)/16)=125=0x7d

程序代碼如下:12匯編語(yǔ)言代碼段WTCONEQU0x53000000WTDATEQU0x53000004 AREAWatchdog_Ini,CODE,READONLY ENTRY CODE32ldrr0,=WTDAT;將WTDAT寄存器地址值賦給r0ldrr1,=0x7d;將計(jì)數(shù)器初值0x7d賦給r1strr1,[r0];將r1的內(nèi)容寫到以r0內(nèi)容為地址的單元中

ldrr0,=WTCON;將WTCON寄存器地址值賦給r0ldrr1,=0x0021strr1,[r0]END C語(yǔ)言代碼段#definerWTCON=(*(volatileunsignedchar*)0x53000000)#definerWTDAT=(*(volatileunsignedchar*)0x53000004)#definerWTCNT=(*(volatileunsignedchar*)0x53000008)voidwatchdog40(void){rWTCON=(rWTCON&0x0000)|(1<<8)|(1<<3);/*設(shè)置預(yù)分頻值、分割因子*/rWTDAT=0x7d;rWTCNT=0x7d;rWTCON=rWTCON|(1<<5)|(1<<0);/*設(shè)啟動(dòng)看門狗??撮T狗復(fù)位使能、看門狗使能*/}13149.3具有脈寬調(diào)制(PWM)的定時(shí)器(TIMER)Timer部件主要用于提供定時(shí)功能,脈寬調(diào)制(PWM)功能,它的應(yīng)用比較靈活,對(duì)于需要一定頻率的脈沖信號(hào),一定時(shí)間間隔定時(shí)信號(hào)的應(yīng)用場(chǎng)合,都能提供支持。9.3.1定時(shí)器Timer概述

S3C2410A芯片中有5個(gè)16位的Timer部件,其中Timer0~Timer3具有PWM功能,Timer4僅用于定時(shí),不具有PWM功能,它沒(méi)有輸出引腳。Timer0是一個(gè)同時(shí)具有死區(qū)(dead-zone)發(fā)生器,通常用于控制大電流設(shè)備。15

9.3.2TIMER部件的操作每個(gè)定時(shí)/計(jì)數(shù)器都是16位的減法計(jì)數(shù)器,是通過(guò)定時(shí)器自己的時(shí)鐘驅(qū)動(dòng)的。當(dāng)計(jì)數(shù)器減到0時(shí),可產(chǎn)生定時(shí)器中斷請(qǐng)求信號(hào),通知CPU定時(shí)器的操作已經(jīng)完成了。此時(shí)定時(shí)/計(jì)數(shù)緩沖寄存器TCNTBn(TimerCounterBufferRegistern)的值將自動(dòng)裝載到遞減計(jì)數(shù)器,開始下一輪的操作。但是,若定時(shí)器停止工作,則TCNTBn的值將不會(huì)重新裝載到計(jì)數(shù)器中。定時(shí)器比較緩沖寄存器TCMPBn(TimerCompareBufferRegistern)的值用于脈寬調(diào)制。當(dāng)計(jì)數(shù)器的值與比較寄存器的值相同時(shí),定時(shí)器的邏輯將改變輸出電平。因此TCMPBn確定脈寬調(diào)制信號(hào)輸出的上升時(shí)間(或下降時(shí)間)。每個(gè)定時(shí)器(TIMER4除外)均含有TCNTBn,TCNTn,TCMPBn和TCMPn四種計(jì)數(shù)緩沖寄存器,其中定時(shí)器計(jì)數(shù)寄存器TCNTn(TimerCounterRegistern)和定時(shí)器比較寄存器TCMPn(TimerCompareRegistern)是內(nèi)部寄存器(編程不可見),內(nèi)部寄存器TCNTn的值可以通過(guò)計(jì)數(shù)觀察寄存器讀取。16179.3.2TIMER部件操作(續(xù))

每個(gè)定時(shí)器讀時(shí)都是16位的減法計(jì)數(shù)器,是通過(guò)定時(shí)器自己的時(shí)鐘驅(qū)動(dòng)的。當(dāng)計(jì)數(shù)器減到0時(shí),可產(chǎn)生定時(shí)器中斷請(qǐng)求信號(hào),通知CPU定時(shí)器的操作已經(jīng)完成了。此時(shí)TCNTBn的值將自動(dòng)裝載到遞減計(jì)數(shù)器,開始下一輪的操作。但是,若定時(shí)器停止工作,則TCNTBn的值將不會(huì)重新裝載到計(jì)數(shù)器中。

TCMPBn的值用于脈寬調(diào)制。當(dāng)計(jì)數(shù)器的值與比較寄存器的值相同時(shí),定時(shí)器的邏輯將改變輸出電平。因此TCMPBn確定脈寬調(diào)制信號(hào)輸出的上升時(shí)間(或下降時(shí)間)。每個(gè)定時(shí)器(TIMER4除外)均含有TCNTBn,TCNTn,TCMPBn和TCMPn四種計(jì)數(shù)緩沖寄存器,其中TCNTn和TCMPn是內(nèi)部寄存器(編程不可見),內(nèi)部寄存器TCNTn的值可以通過(guò)計(jì)數(shù)觀察寄存器讀取。181.自動(dòng)重載和雙緩沖器S3C2410A處理器的定時(shí)器具有雙緩沖功能,即在不停止當(dāng)前定時(shí)器運(yùn)行的情況下,重載下次定時(shí)器運(yùn)行周期(或頻率)的參數(shù)、PWM波形的占空比。主要是指向TCNTBn,TCMPBn寄存器賦值。裝載新值之后,在按原參數(shù)運(yùn)行完前周期后,在下一個(gè)新的周期,按新的設(shè)置參數(shù)運(yùn)行。當(dāng)內(nèi)部寄存器TCNTn的值減到0時(shí)將自動(dòng)裝載TCNTBn的值到TCNTn中,并可重新開始進(jìn)行減法計(jì)數(shù),前提條件是自動(dòng)重載允許。如果TCNTn=0,但自動(dòng)重載禁止,則定時(shí)器停止運(yùn)行。19雙緩沖功能編程圖例當(dāng)內(nèi)部寄存器TCNTn的值減到0時(shí)將自動(dòng)裝載TCNTBn的值到TCNTn中,并可重新開始進(jìn)行減法計(jì)數(shù),前提條件是自動(dòng)裝載功能允許。如果TCNTn=0,但自動(dòng)裝載禁止,則定時(shí)器停止運(yùn)行。2.復(fù)雜的定時(shí)器設(shè)置示例定時(shí)器初始化時(shí),使用手動(dòng)裝載位和反轉(zhuǎn)位。因?yàn)槎〞r(shí)器的自動(dòng)操作發(fā)生在減法計(jì)數(shù)器為0和TCNTBn沒(méi)有預(yù)先賦值時(shí)。在這種情況下必須使用手動(dòng)裝載功能給TCNTBn賦初值。開啟一個(gè)定時(shí)器的操作如下:①向TCNTBn和TCMPBn中寫入初值;②定時(shí)器控制寄存器TCON(TimerControlRegister)相關(guān)的手動(dòng)裝載位置1,不管是否需要反轉(zhuǎn)位功能,都將反轉(zhuǎn)位的開關(guān)打開;③設(shè)置定時(shí)器控制寄存器TCON的相關(guān)啟動(dòng)位,同時(shí)清除其手動(dòng)裝載位;④如果定時(shí)器被強(qiáng)行關(guān)閉,TCNTn就保持原有的計(jì)數(shù)值,且不從TCNTBn重新自動(dòng)裝載計(jì)數(shù)值。如果必須重新設(shè)置新值,則必須使用手動(dòng)裝載。定時(shí)器的操作示例如下,以圖9-5進(jìn)行敘述。20①允許自動(dòng)裝載功能,給TCNTBn和TCMPBn賦值,這里控制TOUTn周期的TCNTBn=250,控制高電平持續(xù)時(shí)間的TCMPBn=150;使能手動(dòng)裝載功能,TCNTBn和TCMPBn的值將被復(fù)制到TCNTn和TCMPn寄存器中;最后設(shè)置在TCNTBn和TCMPBn的值分別為300和100,作為下一個(gè)周期定時(shí)器的工作參數(shù)。②設(shè)置相應(yīng)定時(shí)器的啟動(dòng)位為1,清除手動(dòng)裝載控制位為0,關(guān)閉反轉(zhuǎn)開關(guān),自動(dòng)裝載開始,定時(shí)器按照第一個(gè)設(shè)定的參數(shù)運(yùn)行工作。③當(dāng)TCNTn的值等于TCMPBn的值時(shí),TOUTn從低電平跳變到高電平。④當(dāng)TCNTn的值等于0時(shí),定時(shí)器產(chǎn)生中斷請(qǐng)求,同時(shí)TCNTBn=300和TCMPBn=100的值自動(dòng)裝載到TCNTn和TCMPn中,定時(shí)器使用這個(gè)參數(shù)將進(jìn)行下一個(gè)周期的工作。④在響應(yīng)4)的中斷服務(wù)程序中,對(duì)TCNTBn和TCMPBn重新賦值,這里分別是130和80,用于下一個(gè)周期的工作參數(shù)。⑥當(dāng)TCNTn的值等于TCMPBn的值時(shí),TOUTn又從低電平跳變到高電平。⑦重復(fù)4)的操作。⑧在這個(gè)中斷服務(wù)程序中,相應(yīng)定時(shí)器的中斷請(qǐng)求和自動(dòng)裝載功能被禁止,定時(shí)器將使用最后一個(gè)給定的參數(shù)工作完后,終止工作。⑨同3)完成的操作相同。⑩當(dāng)TCNTn的值等于0時(shí),由于自動(dòng)裝載被禁止,因此TCNTn將不再裝載計(jì)數(shù)值,定時(shí)器停止工作。(11)不再產(chǎn)生中斷請(qǐng)求,工作過(guò)程徹底結(jié)束。21223.脈寬調(diào)制(PWM)

PWM的頻率由TCNTBn的值來(lái)確定,PWM的每個(gè)周期中高電平(或低電平)的持續(xù)時(shí)間由TCMPBn的值來(lái)確定。如果TCON中某定時(shí)器的輸出反轉(zhuǎn)位置0(不反轉(zhuǎn)),若要得到較高的PWM脈寬輸出值(高電平持續(xù)時(shí)間),則需要增加TCMPBn的值;若要得到較低的PWM脈寬輸出值,則需要減小TCMPBn的值。如果TCON中某定時(shí)器的輸出反轉(zhuǎn)位置1(反轉(zhuǎn)器被使能),若要得到較高的PWM脈寬輸出值(高電平持續(xù)時(shí)間),則需要減小TCMPBn的值;若要得到較低的PWM脈寬輸出值,則需要增加TCMPBn的值?;陔p緩沖器的功能,下一周期TCMPBn的值,可以在中斷服務(wù)程序中,并且在當(dāng)前的PWM周期內(nèi)的任何時(shí)刻寫入。23脈寬調(diào)制(PWM)設(shè)置圖例

圖中上面的波形是減法計(jì)數(shù)器的計(jì)數(shù)過(guò)程示意圖,為畫圖方便,使用(216-計(jì)數(shù)器值)。兩條橫線代表TCMPB的取值,取值為(TCNTBn-TCMPBn)。圖例是在反轉(zhuǎn)器關(guān)閉的情況下繪制的。244.輸出電平控制輸出電平控制是通過(guò)定時(shí)器TCON中的輸出反轉(zhuǎn)位控制的。包括定時(shí)器輸出TOUTn的初值及工作過(guò)程的波形。在定時(shí)器的反轉(zhuǎn)器開關(guān)關(guān)閉(即反轉(zhuǎn)位置0),可以控制TOUTn電平的高或低,方法如下。①關(guān)閉TCON自動(dòng)重載位之后,TOUTn變?yōu)楦唠娖?,并且定時(shí)器在TCNTn=0時(shí)停止;②通過(guò)對(duì)定時(shí)器的啟動(dòng)/停止位清0停止定時(shí)器工作。如果TCNTn不大于TCMPn,TOUTn輸出高電平;如果TCNTn大于TCMPn,TOUTn輸出低電平;③通過(guò)對(duì)TCON中的輸出反轉(zhuǎn)位置1控制TOUTn輸出反相。開關(guān)。反轉(zhuǎn)位開關(guān)控制TOUTn的波形如下。25定時(shí)器反轉(zhuǎn)位控制TOUTn圖例圖例如下:265.死區(qū)(DZDeadZone)發(fā)生器死區(qū)DZ(DeadZone)是當(dāng)定時(shí)器用于PWM,為大電流控制設(shè)備提供電能的時(shí)候,需要使用死區(qū)功能。這個(gè)功能允許在一個(gè)設(shè)備關(guān)閉和另一個(gè)設(shè)備開啟之間插入一個(gè)時(shí)間間隔,可防止兩個(gè)設(shè)備同時(shí)動(dòng)作對(duì)電網(wǎng)及現(xiàn)場(chǎng)環(huán)境造成較大的危害。TOUT0是T0的PWM輸出,nTOUT0是TOUT0的反相輸出。如果允許死區(qū)功能,TOUT0和nTOUT0的輸出波形就變?yōu)門OUT0_DZ和nTOUT0_DZ,nTOUT0_DZ在TOUT1引腳輸出。定時(shí)器的死區(qū)功能使得TOUT0_DZ和nTOUT0_DZ不會(huì)同時(shí)發(fā)生變化。死區(qū)功能的波形圖9-8所示。27死區(qū)功能允許波形圖死區(qū)允許波形圖即在原波形圖上將上升沿延遲一個(gè)死區(qū)間隔時(shí)間,而其下降沿的時(shí)間與原波形圖相同。6.DMA請(qǐng)求模式與中斷

配置寄存器TCFG1中的DMA模式位可以用來(lái)控制定時(shí)器n產(chǎn)生DMA請(qǐng)求或中斷使能,一個(gè)定時(shí)器只能在DMA方式或中斷方式中選擇其一,且最多只有一個(gè)定時(shí)器可以設(shè)置為DMA方式?,F(xiàn)將TCFG1中的DMA方式位[23:20]設(shè)置如表9-5所示:28表9-5DMA模式字對(duì)應(yīng)表29309.3.3TIMER部件內(nèi)部功能寄存器控制TIMER控件的操作,需要編程設(shè)置TIMER內(nèi)部的許多功能寄存器。主要有:

●定時(shí)器配置寄存器0(TCFG0);

●定時(shí)器配置寄存器1(TCFG1);

●定時(shí)器控制寄存器(TCON);

●TIMER0計(jì)數(shù)緩沖寄存器和比較緩沖寄存器(TCNTB0/TCMPB0);

●TIMER0計(jì)數(shù)觀察寄存器(TCNTO0)。以下分別予以介紹。表9-6定時(shí)器主要功能寄存器屬性表31注意:表中的××,對(duì)于不同的定時(shí)器取不同的數(shù)值,排列從定時(shí)器0開始到定時(shí)器3結(jié)束,按TCNTBn、TCMPBn、TCNTOn次序取值是0x0C、0x10、0x14、0x18…0x30、0x34、0x38。說(shuō)明數(shù)值序列是等差數(shù)列,等差為4。由于定時(shí)器4沒(méi)有PWM功能輸出,所以沒(méi)有TCMPB4,它的TCNTB4、TCNTO4最后2位取值是0x3C和0x40。321)

定時(shí)器配置寄存器0(TCFG0)TCFG0是可讀寫的,主要用來(lái)設(shè)置預(yù)分頻系數(shù)的。其地址為0x51000000,復(fù)位初值是0x0。具體位定義如下:332)

定時(shí)器配置寄存器1(TCFG1)TCFG1是可讀寫的,主要用來(lái)設(shè)置分割器值。其地址為0x51000004,復(fù)位初值是0x0。具體位定義如下:342)TCFG1(Continue)35TCFG0和TCFG1的聯(lián)合作用

通過(guò)TCFG0和TCFG1的設(shè)置,可以確定各定時(shí)器預(yù)分頻系數(shù)和分割器的值,最后通過(guò)以下公式計(jì)算定時(shí)器的輸入時(shí)鐘頻率。

定時(shí)器輸入時(shí)鐘頻率=PCLK/(預(yù)分頻值+1)/分割器值預(yù)分頻器系數(shù)范圍=0~255

分割器取值域={2,4,8,16}363.定時(shí)器控制寄存器(TCON)

定時(shí)器控制寄存器是可讀寫的,地址是0x51000008,復(fù)位初值是0x0。具體位定義如下表。37定時(shí)器控制寄存器(TCON)位定義(續(xù))384.TIMERn的三個(gè)計(jì)數(shù)寄存器TIMERn定時(shí)器的三個(gè)計(jì)數(shù)寄存器:有緩沖寄存器(TCNTBn)是可讀寫的;比較緩沖寄存器(TCMPBn)也是可讀寫的;和計(jì)數(shù)觀察寄存器(TCNTOn),它是只讀的。這里n=0~4,即指TIMER0~TIMER4。具體定義格式如下表。394.TIMERn三個(gè)計(jì)數(shù)寄存器(續(xù))從TIMER0-TIMER4它們的三個(gè)計(jì)數(shù)寄存器有相同的格式位定義,但是TIMER4沒(méi)有比較計(jì)數(shù)寄存器。它們分別占用不同的物理地址,具體如下表。地址為。地址為。Timer0的它們的復(fù)位初值均為0x0。9.3.4定時(shí)器Timer應(yīng)用示例

定時(shí)器的應(yīng)用非常廣泛,也很靈活,不同的應(yīng)用需求,將決定定時(shí)器使用不同的編程方式??蓺w結(jié)為以下幾種:

●一種是作為定時(shí)器使用,需要根據(jù)定時(shí)時(shí)間和ARM系統(tǒng)提供的PCLK時(shí)鐘,配置預(yù)分頻值,分割器值計(jì)算數(shù)據(jù)緩沖寄存器的值等;

●二種是作為計(jì)數(shù)器使用,分割器的值選TCLK0或TCLK1,將計(jì)數(shù)的初值賦給數(shù)據(jù)緩沖寄存器等,啟動(dòng)定時(shí)/計(jì)數(shù)器即可;

●三種是作為周期脈沖信號(hào)的輸出,即PWM輸出,這時(shí)除需要一種的工作外,還要設(shè)置比較緩沖寄存器的數(shù)值,以決定在反轉(zhuǎn)位=0時(shí)高電平的持續(xù)時(shí)間或反轉(zhuǎn)位=1時(shí)低電平的持續(xù)時(shí)間。這一功能也可以用于恒溫控制系統(tǒng)的功率調(diào)節(jié)(在一個(gè)周期內(nèi)高電平的持續(xù)時(shí)間越長(zhǎng),直流分量越大,對(duì)應(yīng)的平均功率越大),必要時(shí)可以使用死區(qū)這一功能。401.定時(shí)器的程序設(shè)計(jì)流程

1)設(shè)置配置寄存器0。內(nèi)容是設(shè)置預(yù)分頻器0或預(yù)分頻器1的值,以及Timer0的死區(qū)寬度。2)設(shè)置配置寄存器1。內(nèi)容是各個(gè)定時(shí)器的分割器值,DMA方式或中斷方式。3)根據(jù)前2項(xiàng)的設(shè)置、PCLK的時(shí)鐘,以及實(shí)際需要,計(jì)算計(jì)數(shù)緩沖寄存器TCNTBn和TCMPBn的初值并賦之。

4)設(shè)置定時(shí)器控制寄存器TCON。計(jì)數(shù)初值自動(dòng)裝載、手動(dòng)裝載位=1、設(shè)置反轉(zhuǎn)位=1等。

5)重新設(shè)置定時(shí)器控制寄存器TCON。清除手動(dòng)裝載位、設(shè)置反轉(zhuǎn)位=0,啟動(dòng)定時(shí)器。41422.應(yīng)用實(shí)例實(shí)例需要產(chǎn)生一個(gè)500ms的PWM脈沖周期信號(hào),高電平的持續(xù)時(shí)間占40%,系統(tǒng)的PCLK為66MHz。選用定時(shí)器TIMER0,要求從ARM的引腳TOUT0輸出。編程敘述如下。1)根據(jù)需要的脈沖信號(hào)周期500ms及系統(tǒng)PCLK=66MHz,確定預(yù)分頻系數(shù)和分割器值,并計(jì)算計(jì)數(shù)緩沖寄存器初值。本例預(yù)分頻值取31,分割器值取16,則計(jì)數(shù)緩沖寄存器的初值計(jì)算如下:

初值=定時(shí)間隔/(1/(PCLK/(預(yù)分頻系數(shù)+1)/分割器值))=500ms*(66MHz/32/16)=500*10-3*(66*106/32/16)=64453=0xfbc5

比較緩沖寄存器的初值=64453×40%=0x64b5432)編寫定時(shí)器程序:先設(shè)置TCFG0、TCFG1寄存器,再設(shè)置TCNTB0寄存器,最后設(shè)置TCON寄存器啟動(dòng)定時(shí)器工作。3)編寫程序#definerTCFG0(*(volitaleunsigned*)0x51000000/*定義定時(shí)器配置寄存器0地址*/#definerTCFG1(*(volitaleunsigned*)0x51000004/*定義定時(shí)器配置寄存器1地址*/#definerTCON(*(volitaleunsigned*)0x51000008

/*定義定時(shí)器控制寄存器地址*/#definerTCNTB0(*(volitaleunsigned*)0x5100000C#definerTCOMB0(*(volitaleunsigned*)0x51000010#definerGPBCON(*(volitaleunsigned*)0x56000010

/*定義B端口控制寄存器地址*/#definerGPBDAT(*(volitaleunsigned*)0x56000014

/*定義B端口數(shù)據(jù)寄存器地址*/#definerGPBUP(*(volitaleunsigned*)0x56000018/*定義B端口上拉電阻寄存器地址*/voidtimer0(void){GPBCON=rGPBCON|(2<0);/*設(shè)置GPB0為第2功能TOUT0*/rGPBUP=rGPBUP&(~(1<0));/*使能GPB0上拉電阻*/rTCFG0=(rTCFG0&0x00)|(31<<0);

/*deadzone=0,Timer0預(yù)分頻系數(shù)31*/rTCFG1=(rTCFG0&0x00)|(3<<0);/*均工作在中斷方式,分割系數(shù)16*/rTCNTB0=0xfbc5;rTCMPB0=0x64b5;rTCON=rTCON|(1<<2)|(1<<1);

/*反轉(zhuǎn)位置1,手動(dòng)裝載TCNTB0和TCMPB0*/rTCON=rTCON&(~(1<<2))&(~(1<<1))|(1<<3)|(1<0);/*手動(dòng)裝載清0,自動(dòng)裝載置1,并啟動(dòng)*/}44459.4實(shí)時(shí)時(shí)鐘(RTC)S3C2410A提供RTC(RealTimeClock)實(shí)時(shí)時(shí)鐘單元,在系統(tǒng)掉電后由后備電池供電繼續(xù)工作。RTC是用于提供年、月、日、時(shí)、分、秒、星期等實(shí)時(shí)時(shí)間信息的定時(shí)部件。它由外部時(shí)鐘驅(qū)動(dòng)工作,時(shí)鐘頻率為32.768khz。

以下主要介紹它的工作原理、功能控制寄存器和編程方法。46479.4.1RTC概述

RTC部件可以將提供實(shí)時(shí)信息的8位數(shù)據(jù)以BCD碼的格式輸出,同時(shí)還具有各種報(bào)警功能。其主要特點(diǎn)有:

1.年、月、日、時(shí)、分、秒、星期等實(shí)時(shí)時(shí)間信息采用BCD碼表示;

2.閏年發(fā)生器;

3.具有報(bào)警功能,提供報(bào)警中斷或者系統(tǒng)在節(jié)電模式下的喚醒;

4.擁有獨(dú)立的電源引腳(RTCVDD);

5.支持RTOS內(nèi)核時(shí)間片所需的毫秒計(jì)時(shí)中斷;

6.進(jìn)位復(fù)位功能。489.4.1RTC概述(續(xù)1)RTC部件提供專門的電源引腳可以由備用電源供電。當(dāng)系統(tǒng)電源關(guān)閉時(shí),微處理器接口和RTC邏輯電路均是斷開的,后備電池僅驅(qū)動(dòng)RTC部件的振蕩器和BCD碼計(jì)數(shù)器,以使功耗降到最低。在節(jié)電模式或正常運(yùn)行模式下,RTC可以在特定的時(shí)候觸發(fā)蜂鳴器。在正常運(yùn)行模式下,激活的是報(bào)警中斷信號(hào)(ARMINT)。在節(jié)電模式下,激活的是電源管理器部件的喚醒信號(hào)(PMWKUP)并同時(shí)激活報(bào)警中斷信號(hào)(ARMINT)。RTC內(nèi)部的報(bào)警寄存器(RTCALM)可以設(shè)置報(bào)警工作狀態(tài)的使能/不使能以及報(bào)警時(shí)間的條件。499.4.1RTC概述(續(xù)2)RTC的時(shí)間片計(jì)時(shí)器用于產(chǎn)生一個(gè)中斷請(qǐng)求,TICNT寄存器有一個(gè)中斷使能位,和計(jì)數(shù)器中的值一起用來(lái)控制中斷。當(dāng)計(jì)數(shù)器的值變?yōu)?時(shí),引起時(shí)間片計(jì)時(shí)中斷。中斷信號(hào)的周期計(jì)算如下:

周期s=(n+1)/128

其中n是時(shí)間片計(jì)數(shù)器中的值,范圍在0-127之間。RTC的時(shí)間片計(jì)時(shí)器可以用來(lái)產(chǎn)生實(shí)時(shí)操作系統(tǒng)內(nèi)核所需的時(shí)間片。進(jìn)位復(fù)位功能可以由RTC的進(jìn)位復(fù)位寄存器(RTCRST)來(lái)控制。秒的進(jìn)位周期可以進(jìn)行選擇(30、40、50),在進(jìn)位復(fù)位發(fā)生后,秒的數(shù)值又循回到0。例如當(dāng)前時(shí)間是23:37:47,進(jìn)位周期選為40秒,則當(dāng)前時(shí)間將變?yōu)?3:38:00。509.4.2實(shí)時(shí)時(shí)鐘RTC控制寄存器RTC的內(nèi)部有許多用于控制操作的寄存器。通過(guò)程序?qū)@些寄存器進(jìn)行設(shè)置,用戶就可控制RTC部件的工作。以下介紹這些寄存器的功能及位定義。511.RTC控制寄存器(RTCCON)RTC控制寄存器(RTCCON)是可讀/寫的,地址為0x57000040,初值是0x0。該寄存器僅使用4位,RTCEN控制BCD碼寄存器的讀寫使能,同時(shí)控制微處理器和RTC間的所有接口的使能。因此,在系統(tǒng)復(fù)位后需要對(duì)RTC進(jìn)行操作時(shí),RTCEN=1。而在其它時(shí)間,RTCEN應(yīng)清0,以防數(shù)據(jù)無(wú)意地寫入到RTC的寄存器中。52RTC控制寄存器RTCCON的位定義532.時(shí)間片計(jì)數(shù)器(TICNT)計(jì)數(shù)器TICNT是可/讀寫的,地址為0x57000044,初值為0x0。具體格式定義如下表。543.報(bào)警控制寄存器(RTCALM)報(bào)警控制寄存器(RTCALM)是可讀/寫的,地址為0x57000050,初值是0x0。RTCALM的組成格式如下所示。注意:在節(jié)電模式下,RTCALM寄存器通過(guò)ALMINT和PMWKUP來(lái)產(chǎn)生報(bào)警信號(hào);而在正常操作模式下,只通過(guò)ALMINT產(chǎn)生報(bào)警信號(hào)。554.報(bào)警秒數(shù)據(jù)寄存器(ALMSEC)寄存器ALMSEC是可/讀寫的,地址為0x57000054,初值為0x0。具體格式定義如下表。565.報(bào)警分?jǐn)?shù)據(jù)寄存器(ALMMIN)寄存器ALMMIN是可/讀寫的,地址為0x57000058,初值為0x0。具體格式定義如下表。576.報(bào)警時(shí)數(shù)據(jù)寄存器(ALMHOUR)寄存器ALMHOUR是可/讀寫的,地址為0x5700005C,初值為0x0。具體格式定義如下表。587.報(bào)警日數(shù)據(jù)寄存器(ALMDATE)寄存器ALMDATE是可/讀寫的,地址為0x57000060,初值為0x01。具體格式定義如下表。598.報(bào)警月數(shù)據(jù)寄存器(ALMMON)寄存器ALMMON是可/讀寫的,地址為0x57000064,初值為0x01。具體格式定義如下表。609.報(bào)警年數(shù)據(jù)寄存器(ALMYEAR)寄存器ALMYEAR是可/讀寫的,地址為0x57000068,初值為0x0。具體格式定義如下表。6110.循環(huán)復(fù)位寄存器(RTCRST)寄存器RTCRST是可/讀寫的,地址為0x5700006C,初值為0x0。具體格式定義如下表。6211.秒數(shù)據(jù)寄存器(BCDSEC)寄存器BCDSEC是可/讀寫的,用來(lái)存儲(chǔ)當(dāng)前時(shí)間的秒數(shù)據(jù),即合并的BCD碼格式。地址為0x57000070,初值不定。具體格式定義如下表。6312.分?jǐn)?shù)據(jù)寄存器(BCDMIN)寄存器BCDMIN是可/讀寫的,用來(lái)存儲(chǔ)當(dāng)前時(shí)間的分?jǐn)?shù)據(jù),即合并的BCD碼格式。地址為0x57000074,初值不定。具體格式定義如下表。6413.時(shí)數(shù)據(jù)寄存器(BCDHOUR)寄存器BCDHOUR是可/讀寫的,用來(lái)存儲(chǔ)當(dāng)前時(shí)間的時(shí)數(shù)據(jù),即合并的BCD碼格式。地址為0x57000078,初值不定。具體格式定義如下表。6514.日數(shù)據(jù)寄存器(BCDDATE)寄存器BCDDATE是可/讀寫的,用來(lái)存儲(chǔ)當(dāng)前日期的日數(shù)據(jù),即合并的BCD碼格式。地址為0x5700007C,初值不定。具體格式定義如下表。6615.星期數(shù)據(jù)寄存器(BCDDAY)寄存器BCDDAY是可/讀寫的,用來(lái)存儲(chǔ)當(dāng)前日期對(duì)應(yīng)的星期數(shù)據(jù),即合并的BCD碼格式。地址為0x57000080,初值不定。具體格式定義如下表。6716.月數(shù)據(jù)寄存器(BCDMON)寄存器BCDMON是可/讀寫的,用來(lái)存儲(chǔ)當(dāng)前日期的月數(shù)據(jù),即合并的BCD碼格式。地址為0x57000084,初值不定。具體格式定義如下表。6817.年數(shù)據(jù)寄存器(BCDYEAR)寄存器BCDYEAR是可/讀寫的,用來(lái)存儲(chǔ)當(dāng)前日期對(duì)應(yīng)的年數(shù)據(jù),即合并的BCD碼格式。地址為0x57000088,初值不定。具體格式定義如下表。699.4.3RTC編程舉例(應(yīng)用C語(yǔ)言編程)#definerRTCCON(*(volitaleunsigned*)0x57000040#definerTICNT(*(volitaleunsigned*)0x57000044#definerRTCALM(*(volitaleunsigned*)0x57000050#definerRTCRST(*(volitaleunsigned*)0x5700006C

………#defineuint8unsignedcharuint8year,month,day,wkday,hour,minute,second,flag;/*RTC初始化函數(shù).函數(shù)名:RTC_Init(void);

功能:初始化RTC,同時(shí)設(shè)置RTC的當(dāng)前日期和時(shí)間*/voidRTC_Init(void){year=14;//2014month=11;day=18;wkday=4;//Thursday709.4.3RTC編程舉例(續(xù)1)hour=11,minute=18,second=00;rRTCCON=(uint8)(rRTCCON|0x01);//使能RTC讀寫操作

rRTCALM=(uint8)0x0;//關(guān)閉所有的報(bào)警

rRTCRST=(uint8)0x0;//關(guān)閉復(fù)位操作

rTICNT=(uint8)0x0;//關(guān)閉時(shí)間片中斷

rRTCCON=(uint8)(rRTCCON|0xfe);//關(guān)閉RTC讀寫操作}/*RTC寫函數(shù)。函數(shù)名RTC_Write(void);

功能:完成將初始化函數(shù)中設(shè)置的日期與時(shí)間參數(shù)寫到

溫馨提示

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

評(píng)論

0/150

提交評(píng)論