版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1第9章微處理器S3C2410A的定時/計數(shù)器定時器部件在實時控制系統(tǒng)中起著舉足輕重的作用,它可以實現(xiàn)對設(shè)備的周期性控制,同時使用定時器的PWM輸出功能可以實現(xiàn)設(shè)備功率的控制,用于恒溫控制系統(tǒng)等。S3C2410A芯片中的定時部件有多個,不同的定時部件有不同的用途??撮T狗定時器(WATCHDOG)主要用來防止處理器的死機,需要在看門狗定時器規(guī)定的時間內(nèi)喂狗,就是重新給看門狗定時器賦初值,否則時間到產(chǎn)生溢出復位信號,使ARM系統(tǒng)復位而重新啟動;定時器(TIMER)主要用于定時或計數(shù),還可用于脈寬調(diào)制PWM(PulseWidthModulation)的控制;實時時鐘RTC(RealTimeClock)主要用于為系統(tǒng)提供日歷與實時鐘信號。定時部件雖然種類較多,但它們的工作原理基本相同。本章主要介紹各自的原理與應用。29.1S3C2410A定時/計數(shù)器原理定時器或計數(shù)器的邏輯電路是相同的,它們的主要區(qū)別在用途上。在應用時,定時器的輸入信號來自于內(nèi)部,是周期信號,從而通過計數(shù)實現(xiàn)了定時的功能;而計數(shù)器的輸入信號一般來自于外部,是非周期信號,因而只能實現(xiàn)計數(shù)的功能。因此這樣的邏輯電路被稱為定時/計數(shù)器。圖9-1是一般定時/計數(shù)器內(nèi)部工作原理框圖,它是以一個N位計數(shù)器(加1或減1)為核心,計數(shù)器的初值在編程時設(shè)置。計數(shù)器的輸入脈沖分為2類:系統(tǒng)時鐘和外部事件脈沖。微處理器S3C2410A使用的是具有減法功能的定時/計數(shù)器。39.2看門狗定時器(WATCHDOG)
S3C2410A中看門狗定時器的作用是,當系統(tǒng)程序出現(xiàn)功能錯亂,引起系統(tǒng)程序出現(xiàn)死循環(huán)時,是系統(tǒng)重新啟動開始工作。嵌入式系統(tǒng)由于使用環(huán)境的復雜,即使用環(huán)境中有較強的干擾信號,或者系統(tǒng)程序本身的不完善,因而不能排除系統(tǒng)程序不會出現(xiàn)死循環(huán)現(xiàn)象。當系統(tǒng)使用看門狗部件時,如果系統(tǒng)出現(xiàn)了死循環(huán),看門狗定時器將產(chǎn)生一個具有一定寬度的復位信號,強迫系統(tǒng)復位,恢復系統(tǒng)的正常運行??撮T狗定時器必須在小于定時的時間周期內(nèi),對其重新賦初值(俗稱“喂狗”),使看門狗定時器不會產(chǎn)生復位信號,系統(tǒng)正常運行。當系統(tǒng)程序出現(xiàn)死循環(huán)時,無法給看門狗定時器喂狗或者說不能執(zhí)行喂狗函數(shù),將會產(chǎn)生復位信號。49.2.1看門狗定時器的工作原理
S3C2410A看門狗定時器有2種工作模式:
①帶中斷請求信號的常規(guī)時隙定時器。
②產(chǎn)生內(nèi)部復位信號的定時器,即當定時器的值為0時,產(chǎn)生一個寬度為128PCLK(系統(tǒng)時鐘周期)的復位脈沖信號。圖9-2是看門狗定時器的邏輯功能圖??撮T狗定時器一旦啟動工作,看門狗定時器的計數(shù)常數(shù)寄存器(WTDAT)就無法自動地裝載到計數(shù)寄存器(WTCNT)中。因此應該在看門狗定時器工作之前,通過初始化編程將計數(shù)常數(shù)寄存器(WTDAT)的值寫入到計數(shù)寄存器(WTCNT)中。59.2.2看門狗特殊功能控制寄存器
S3C2410A芯片的看門狗定時器邏輯中有3個控制其操作的特殊功能寄存器:看門狗控制寄存器(WTCON);計數(shù)常數(shù)寄存器(WTDAT)和看門狗計數(shù)寄存器(WTCNT)。它們的屬性如表9-1。61.看門狗控制寄存器(WTCON)72.看門狗常數(shù)寄存器(WTDAT)看門狗常數(shù)寄存器WTDAT(WatchdogTimerDataRegister)用來存儲看門狗定時器的溢出時間間隔常數(shù)值??撮T狗計數(shù)寄存器從此值開始做減法計數(shù),直到變?yōu)?為時間間隔。計數(shù)公式如下:
計數(shù)常數(shù)=所需時間間隔/計數(shù)時鐘周期T=所需時間間隔*(PCLK/(預分頻值+1)/分割因子)WTDAT是可讀寫的,地址為0x53000004,復位初值為0x8000。其位功能如下表所示。83.看門狗計數(shù)寄存器(WTCNT)
看門狗計數(shù)寄存器WTCNT(WatchdogTimerCounterRegister)是一個實時動態(tài)變化的減法計數(shù)器,WTCNT工作時存儲當前計數(shù)值。WTCNT是可讀寫的,地址為0x53000008,復位后初值為0x8000??撮T狗計數(shù)寄存器的位功能描述如下表所示。99.2.3看門狗定時器應用示例
1.Bootloader中的看門狗定時器編程
在系統(tǒng)啟動引導的Bootloader程序中,由于這時ARM系統(tǒng)的部件初始化需要進行大量的工作,需要關(guān)閉看門狗定時器,就是設(shè)置看門狗控制寄存器WTCON的b5=0(看門狗定時器使能位無效),b0=0(禁止看門狗定時器的復位功能),與其它位無關(guān),因此控制字可為0x00,而且必須使用匯編語言編寫程序。程序代碼如下:WTDOGEQU0x53000000;定義WTCON的地址 LDRR0,=WTCON;WTCON地址送R0 LDRR1,=0x00;控制字0x00送R1
STRR1,[R0]
;控制字寫入R02.程序正常運行時的看門狗定時器編程
看門狗可以實現(xiàn)ARM系統(tǒng)的復位,不需要外圍的控制電路。要實現(xiàn)看門狗的功能,需要對看門狗的特殊功能寄存器進行配置操作。編程流程如下:①看門狗定時器作為一般定時器使用時,需要設(shè)置看門狗的中斷操作,因為這是看門狗作為一般定時器使用時的唯一用法。除包括ARM系統(tǒng)的各個中斷寄存器的設(shè)置外,還要看門狗自身中斷使能有效。如果作為ARM系統(tǒng)的看門狗使用,這一步不用設(shè)置。②設(shè)置看門狗控制寄存器WTCON,主要包括預分頻值、分割因子,看門狗定時器復位信號輸出使能b0=1(在看門狗定時器回0時復位信號有效)。③在預估的預分頻值、分割因子的情況下,計算看門狗的定時常數(shù)。只要計算的結(jié)果不大于WTDAT的數(shù)值范圍即216-1均為有效數(shù)據(jù)。將定時常數(shù)賦給WTDAT寄存器和WTCNT寄存器。④啟動看門狗定時器。使看門狗定時器使能位b5=1(使能有效電平信號)。1011應用實例使用看門狗功能時,必須事先進行初始化。初始化的主要工作就是設(shè)置WTCON寄存器和WTDAT寄存器。例如,實現(xiàn)S3C2410A芯片的看門狗功能,監(jiān)測系統(tǒng)的周期不大于40us,PCKL=50Mhz。首先計算賦給WTDAT寄存器的初值。初值=40us*(PCKL/(預分頻值+1)/分割系數(shù))注意:這里PCKL的單位是赫茲,預分頻值和分割系數(shù)必須事先有一個固定的值。本例中預分頻值=0,分割系數(shù)=16,即設(shè)置WTCON的值為0x0021,允許看門狗定時器工作,允許看門狗復位信號有效。初值計算過程如下:初值=40*10-6*(50*106/(0+1)/16)=125=0x7d
程序代碼如下:12匯編語言代碼段WTCONEQU0x53000000WTDATEQU0x53000004 AREAWatchdog_Ini,CODE,READONLY ENTRY CODE32ldrr0,=WTDAT;將WTDAT寄存器地址值賦給r0ldrr1,=0x7d;將計數(shù)器初值0x7d賦給r1strr1,[r0];將r1的內(nèi)容寫到以r0內(nèi)容為地址的單元中
ldrr0,=WTCON;將WTCON寄存器地址值賦給r0ldrr1,=0x0021strr1,[r0]END C語言代碼段#definerWTCON=(*(volatileunsignedchar*)0x53000000)#definerWTDAT=(*(volatileunsignedchar*)0x53000004)#definerWTCNT=(*(volatileunsignedchar*)0x53000008)voidwatchdog40(void){rWTCON=(rWTCON&0x0000)|(1<<8)|(1<<3);/*設(shè)置預分頻值、分割因子*/rWTDAT=0x7d;rWTCNT=0x7d;rWTCON=rWTCON|(1<<5)|(1<<0);/*設(shè)啟動看門狗??撮T狗復位使能、看門狗使能*/}13149.3具有脈寬調(diào)制(PWM)的定時器(TIMER)Timer部件主要用于提供定時功能,脈寬調(diào)制(PWM)功能,它的應用比較靈活,對于需要一定頻率的脈沖信號,一定時間間隔定時信號的應用場合,都能提供支持。9.3.1定時器Timer概述
S3C2410A芯片中有5個16位的Timer部件,其中Timer0~Timer3具有PWM功能,Timer4僅用于定時,不具有PWM功能,它沒有輸出引腳。Timer0是一個同時具有死區(qū)(dead-zone)發(fā)生器,通常用于控制大電流設(shè)備。15
9.3.2TIMER部件的操作每個定時/計數(shù)器都是16位的減法計數(shù)器,是通過定時器自己的時鐘驅(qū)動的。當計數(shù)器減到0時,可產(chǎn)生定時器中斷請求信號,通知CPU定時器的操作已經(jīng)完成了。此時定時/計數(shù)緩沖寄存器TCNTBn(TimerCounterBufferRegistern)的值將自動裝載到遞減計數(shù)器,開始下一輪的操作。但是,若定時器停止工作,則TCNTBn的值將不會重新裝載到計數(shù)器中。定時器比較緩沖寄存器TCMPBn(TimerCompareBufferRegistern)的值用于脈寬調(diào)制。當計數(shù)器的值與比較寄存器的值相同時,定時器的邏輯將改變輸出電平。因此TCMPBn確定脈寬調(diào)制信號輸出的上升時間(或下降時間)。每個定時器(TIMER4除外)均含有TCNTBn,TCNTn,TCMPBn和TCMPn四種計數(shù)緩沖寄存器,其中定時器計數(shù)寄存器TCNTn(TimerCounterRegistern)和定時器比較寄存器TCMPn(TimerCompareRegistern)是內(nèi)部寄存器(編程不可見),內(nèi)部寄存器TCNTn的值可以通過計數(shù)觀察寄存器讀取。16179.3.2TIMER部件操作(續(xù))
每個定時器讀時都是16位的減法計數(shù)器,是通過定時器自己的時鐘驅(qū)動的。當計數(shù)器減到0時,可產(chǎn)生定時器中斷請求信號,通知CPU定時器的操作已經(jīng)完成了。此時TCNTBn的值將自動裝載到遞減計數(shù)器,開始下一輪的操作。但是,若定時器停止工作,則TCNTBn的值將不會重新裝載到計數(shù)器中。
TCMPBn的值用于脈寬調(diào)制。當計數(shù)器的值與比較寄存器的值相同時,定時器的邏輯將改變輸出電平。因此TCMPBn確定脈寬調(diào)制信號輸出的上升時間(或下降時間)。每個定時器(TIMER4除外)均含有TCNTBn,TCNTn,TCMPBn和TCMPn四種計數(shù)緩沖寄存器,其中TCNTn和TCMPn是內(nèi)部寄存器(編程不可見),內(nèi)部寄存器TCNTn的值可以通過計數(shù)觀察寄存器讀取。181.自動重載和雙緩沖器S3C2410A處理器的定時器具有雙緩沖功能,即在不停止當前定時器運行的情況下,重載下次定時器運行周期(或頻率)的參數(shù)、PWM波形的占空比。主要是指向TCNTBn,TCMPBn寄存器賦值。裝載新值之后,在按原參數(shù)運行完前周期后,在下一個新的周期,按新的設(shè)置參數(shù)運行。當內(nèi)部寄存器TCNTn的值減到0時將自動裝載TCNTBn的值到TCNTn中,并可重新開始進行減法計數(shù),前提條件是自動重載允許。如果TCNTn=0,但自動重載禁止,則定時器停止運行。19雙緩沖功能編程圖例當內(nèi)部寄存器TCNTn的值減到0時將自動裝載TCNTBn的值到TCNTn中,并可重新開始進行減法計數(shù),前提條件是自動裝載功能允許。如果TCNTn=0,但自動裝載禁止,則定時器停止運行。2.復雜的定時器設(shè)置示例定時器初始化時,使用手動裝載位和反轉(zhuǎn)位。因為定時器的自動操作發(fā)生在減法計數(shù)器為0和TCNTBn沒有預先賦值時。在這種情況下必須使用手動裝載功能給TCNTBn賦初值。開啟一個定時器的操作如下:①向TCNTBn和TCMPBn中寫入初值;②定時器控制寄存器TCON(TimerControlRegister)相關(guān)的手動裝載位置1,不管是否需要反轉(zhuǎn)位功能,都將反轉(zhuǎn)位的開關(guān)打開;③設(shè)置定時器控制寄存器TCON的相關(guān)啟動位,同時清除其手動裝載位;④如果定時器被強行關(guān)閉,TCNTn就保持原有的計數(shù)值,且不從TCNTBn重新自動裝載計數(shù)值。如果必須重新設(shè)置新值,則必須使用手動裝載。定時器的操作示例如下,以圖9-5進行敘述。20①允許自動裝載功能,給TCNTBn和TCMPBn賦值,這里控制TOUTn周期的TCNTBn=250,控制高電平持續(xù)時間的TCMPBn=150;使能手動裝載功能,TCNTBn和TCMPBn的值將被復制到TCNTn和TCMPn寄存器中;最后設(shè)置在TCNTBn和TCMPBn的值分別為300和100,作為下一個周期定時器的工作參數(shù)。②設(shè)置相應定時器的啟動位為1,清除手動裝載控制位為0,關(guān)閉反轉(zhuǎn)開關(guān),自動裝載開始,定時器按照第一個設(shè)定的參數(shù)運行工作。③當TCNTn的值等于TCMPBn的值時,TOUTn從低電平跳變到高電平。④當TCNTn的值等于0時,定時器產(chǎn)生中斷請求,同時TCNTBn=300和TCMPBn=100的值自動裝載到TCNTn和TCMPn中,定時器使用這個參數(shù)將進行下一個周期的工作。④在響應4)的中斷服務程序中,對TCNTBn和TCMPBn重新賦值,這里分別是130和80,用于下一個周期的工作參數(shù)。⑥當TCNTn的值等于TCMPBn的值時,TOUTn又從低電平跳變到高電平。⑦重復4)的操作。⑧在這個中斷服務程序中,相應定時器的中斷請求和自動裝載功能被禁止,定時器將使用最后一個給定的參數(shù)工作完后,終止工作。⑨同3)完成的操作相同。⑩當TCNTn的值等于0時,由于自動裝載被禁止,因此TCNTn將不再裝載計數(shù)值,定時器停止工作。(11)不再產(chǎn)生中斷請求,工作過程徹底結(jié)束。21223.脈寬調(diào)制(PWM)
PWM的頻率由TCNTBn的值來確定,PWM的每個周期中高電平(或低電平)的持續(xù)時間由TCMPBn的值來確定。如果TCON中某定時器的輸出反轉(zhuǎn)位置0(不反轉(zhuǎn)),若要得到較高的PWM脈寬輸出值(高電平持續(xù)時間),則需要增加TCMPBn的值;若要得到較低的PWM脈寬輸出值,則需要減小TCMPBn的值。如果TCON中某定時器的輸出反轉(zhuǎn)位置1(反轉(zhuǎn)器被使能),若要得到較高的PWM脈寬輸出值(高電平持續(xù)時間),則需要減小TCMPBn的值;若要得到較低的PWM脈寬輸出值,則需要增加TCMPBn的值?;陔p緩沖器的功能,下一周期TCMPBn的值,可以在中斷服務程序中,并且在當前的PWM周期內(nèi)的任何時刻寫入。23脈寬調(diào)制(PWM)設(shè)置圖例
圖中上面的波形是減法計數(shù)器的計數(shù)過程示意圖,為畫圖方便,使用(216-計數(shù)器值)。兩條橫線代表TCMPB的取值,取值為(TCNTBn-TCMPBn)。圖例是在反轉(zhuǎn)器關(guān)閉的情況下繪制的。244.輸出電平控制輸出電平控制是通過定時器TCON中的輸出反轉(zhuǎn)位控制的。包括定時器輸出TOUTn的初值及工作過程的波形。在定時器的反轉(zhuǎn)器開關(guān)關(guān)閉(即反轉(zhuǎn)位置0),可以控制TOUTn電平的高或低,方法如下。①關(guān)閉TCON自動重載位之后,TOUTn變?yōu)楦唠娖?,并且定時器在TCNTn=0時停止;②通過對定時器的啟動/停止位清0停止定時器工作。如果TCNTn不大于TCMPn,TOUTn輸出高電平;如果TCNTn大于TCMPn,TOUTn輸出低電平;③通過對TCON中的輸出反轉(zhuǎn)位置1控制TOUTn輸出反相。開關(guān)。反轉(zhuǎn)位開關(guān)控制TOUTn的波形如下。25定時器反轉(zhuǎn)位控制TOUTn圖例圖例如下:265.死區(qū)(DZDeadZone)發(fā)生器死區(qū)DZ(DeadZone)是當定時器用于PWM,為大電流控制設(shè)備提供電能的時候,需要使用死區(qū)功能。這個功能允許在一個設(shè)備關(guān)閉和另一個設(shè)備開啟之間插入一個時間間隔,可防止兩個設(shè)備同時動作對電網(wǎng)及現(xiàn)場環(huán)境造成較大的危害。TOUT0是T0的PWM輸出,nTOUT0是TOUT0的反相輸出。如果允許死區(qū)功能,TOUT0和nTOUT0的輸出波形就變?yōu)門OUT0_DZ和nTOUT0_DZ,nTOUT0_DZ在TOUT1引腳輸出。定時器的死區(qū)功能使得TOUT0_DZ和nTOUT0_DZ不會同時發(fā)生變化。死區(qū)功能的波形圖9-8所示。27死區(qū)功能允許波形圖死區(qū)允許波形圖即在原波形圖上將上升沿延遲一個死區(qū)間隔時間,而其下降沿的時間與原波形圖相同。6.DMA請求模式與中斷
配置寄存器TCFG1中的DMA模式位可以用來控制定時器n產(chǎn)生DMA請求或中斷使能,一個定時器只能在DMA方式或中斷方式中選擇其一,且最多只有一個定時器可以設(shè)置為DMA方式?,F(xiàn)將TCFG1中的DMA方式位[23:20]設(shè)置如表9-5所示:28表9-5DMA模式字對應表29309.3.3TIMER部件內(nèi)部功能寄存器控制TIMER控件的操作,需要編程設(shè)置TIMER內(nèi)部的許多功能寄存器。主要有:
●定時器配置寄存器0(TCFG0);
●定時器配置寄存器1(TCFG1);
●定時器控制寄存器(TCON);
●TIMER0計數(shù)緩沖寄存器和比較緩沖寄存器(TCNTB0/TCMPB0);
●TIMER0計數(shù)觀察寄存器(TCNTO0)。以下分別予以介紹。表9-6定時器主要功能寄存器屬性表31注意:表中的××,對于不同的定時器取不同的數(shù)值,排列從定時器0開始到定時器3結(jié)束,按TCNTBn、TCMPBn、TCNTOn次序取值是0x0C、0x10、0x14、0x18…0x30、0x34、0x38。說明數(shù)值序列是等差數(shù)列,等差為4。由于定時器4沒有PWM功能輸出,所以沒有TCMPB4,它的TCNTB4、TCNTO4最后2位取值是0x3C和0x40。321)
定時器配置寄存器0(TCFG0)TCFG0是可讀寫的,主要用來設(shè)置預分頻系數(shù)的。其地址為0x51000000,復位初值是0x0。具體位定義如下:332)
定時器配置寄存器1(TCFG1)TCFG1是可讀寫的,主要用來設(shè)置分割器值。其地址為0x51000004,復位初值是0x0。具體位定義如下:342)TCFG1(Continue)35TCFG0和TCFG1的聯(lián)合作用
通過TCFG0和TCFG1的設(shè)置,可以確定各定時器預分頻系數(shù)和分割器的值,最后通過以下公式計算定時器的輸入時鐘頻率。
定時器輸入時鐘頻率=PCLK/(預分頻值+1)/分割器值預分頻器系數(shù)范圍=0~255
分割器取值域={2,4,8,16}363.定時器控制寄存器(TCON)
定時器控制寄存器是可讀寫的,地址是0x51000008,復位初值是0x0。具體位定義如下表。37定時器控制寄存器(TCON)位定義(續(xù))384.TIMERn的三個計數(shù)寄存器TIMERn定時器的三個計數(shù)寄存器:有緩沖寄存器(TCNTBn)是可讀寫的;比較緩沖寄存器(TCMPBn)也是可讀寫的;和計數(shù)觀察寄存器(TCNTOn),它是只讀的。這里n=0~4,即指TIMER0~TIMER4。具體定義格式如下表。394.TIMERn三個計數(shù)寄存器(續(xù))從TIMER0-TIMER4它們的三個計數(shù)寄存器有相同的格式位定義,但是TIMER4沒有比較計數(shù)寄存器。它們分別占用不同的物理地址,具體如下表。地址為。地址為。Timer0的它們的復位初值均為0x0。9.3.4定時器Timer應用示例
定時器的應用非常廣泛,也很靈活,不同的應用需求,將決定定時器使用不同的編程方式??蓺w結(jié)為以下幾種:
●一種是作為定時器使用,需要根據(jù)定時時間和ARM系統(tǒng)提供的PCLK時鐘,配置預分頻值,分割器值計算數(shù)據(jù)緩沖寄存器的值等;
●二種是作為計數(shù)器使用,分割器的值選TCLK0或TCLK1,將計數(shù)的初值賦給數(shù)據(jù)緩沖寄存器等,啟動定時/計數(shù)器即可;
●三種是作為周期脈沖信號的輸出,即PWM輸出,這時除需要一種的工作外,還要設(shè)置比較緩沖寄存器的數(shù)值,以決定在反轉(zhuǎn)位=0時高電平的持續(xù)時間或反轉(zhuǎn)位=1時低電平的持續(xù)時間。這一功能也可以用于恒溫控制系統(tǒng)的功率調(diào)節(jié)(在一個周期內(nèi)高電平的持續(xù)時間越長,直流分量越大,對應的平均功率越大),必要時可以使用死區(qū)這一功能。401.定時器的程序設(shè)計流程
1)設(shè)置配置寄存器0。內(nèi)容是設(shè)置預分頻器0或預分頻器1的值,以及Timer0的死區(qū)寬度。2)設(shè)置配置寄存器1。內(nèi)容是各個定時器的分割器值,DMA方式或中斷方式。3)根據(jù)前2項的設(shè)置、PCLK的時鐘,以及實際需要,計算計數(shù)緩沖寄存器TCNTBn和TCMPBn的初值并賦之。
4)設(shè)置定時器控制寄存器TCON。計數(shù)初值自動裝載、手動裝載位=1、設(shè)置反轉(zhuǎn)位=1等。
5)重新設(shè)置定時器控制寄存器TCON。清除手動裝載位、設(shè)置反轉(zhuǎn)位=0,啟動定時器。41422.應用實例實例需要產(chǎn)生一個500ms的PWM脈沖周期信號,高電平的持續(xù)時間占40%,系統(tǒng)的PCLK為66MHz。選用定時器TIMER0,要求從ARM的引腳TOUT0輸出。編程敘述如下。1)根據(jù)需要的脈沖信號周期500ms及系統(tǒng)PCLK=66MHz,確定預分頻系數(shù)和分割器值,并計算計數(shù)緩沖寄存器初值。本例預分頻值取31,分割器值取16,則計數(shù)緩沖寄存器的初值計算如下:
初值=定時間隔/(1/(PCLK/(預分頻系數(shù)+1)/分割器值))=500ms*(66MHz/32/16)=500*10-3*(66*106/32/16)=64453=0xfbc5
比較緩沖寄存器的初值=64453×40%=0x64b5432)編寫定時器程序:先設(shè)置TCFG0、TCFG1寄存器,再設(shè)置TCNTB0寄存器,最后設(shè)置TCON寄存器啟動定時器工作。3)編寫程序#definerTCFG0(*(volitaleunsigned*)0x51000000/*定義定時器配置寄存器0地址*/#definerTCFG1(*(volitaleunsigned*)0x51000004/*定義定時器配置寄存器1地址*/#definerTCON(*(volitaleunsigned*)0x51000008
/*定義定時器控制寄存器地址*/#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預分頻系數(shù)31*/rTCFG1=(rTCFG0&0x00)|(3<<0);/*均工作在中斷方式,分割系數(shù)16*/rTCNTB0=0xfbc5;rTCMPB0=0x64b5;rTCON=rTCON|(1<<2)|(1<<1);
/*反轉(zhuǎn)位置1,手動裝載TCNTB0和TCMPB0*/rTCON=rTCON&(~(1<<2))&(~(1<<1))|(1<<3)|(1<0);/*手動裝載清0,自動裝載置1,并啟動*/}44459.4實時時鐘(RTC)S3C2410A提供RTC(RealTimeClock)實時時鐘單元,在系統(tǒng)掉電后由后備電池供電繼續(xù)工作。RTC是用于提供年、月、日、時、分、秒、星期等實時時間信息的定時部件。它由外部時鐘驅(qū)動工作,時鐘頻率為32.768khz。
以下主要介紹它的工作原理、功能控制寄存器和編程方法。46479.4.1RTC概述
RTC部件可以將提供實時信息的8位數(shù)據(jù)以BCD碼的格式輸出,同時還具有各種報警功能。其主要特點有:
1.年、月、日、時、分、秒、星期等實時時間信息采用BCD碼表示;
2.閏年發(fā)生器;
3.具有報警功能,提供報警中斷或者系統(tǒng)在節(jié)電模式下的喚醒;
4.擁有獨立的電源引腳(RTCVDD);
5.支持RTOS內(nèi)核時間片所需的毫秒計時中斷;
6.進位復位功能。489.4.1RTC概述(續(xù)1)RTC部件提供專門的電源引腳可以由備用電源供電。當系統(tǒng)電源關(guān)閉時,微處理器接口和RTC邏輯電路均是斷開的,后備電池僅驅(qū)動RTC部件的振蕩器和BCD碼計數(shù)器,以使功耗降到最低。在節(jié)電模式或正常運行模式下,RTC可以在特定的時候觸發(fā)蜂鳴器。在正常運行模式下,激活的是報警中斷信號(ARMINT)。在節(jié)電模式下,激活的是電源管理器部件的喚醒信號(PMWKUP)并同時激活報警中斷信號(ARMINT)。RTC內(nèi)部的報警寄存器(RTCALM)可以設(shè)置報警工作狀態(tài)的使能/不使能以及報警時間的條件。499.4.1RTC概述(續(xù)2)RTC的時間片計時器用于產(chǎn)生一個中斷請求,TICNT寄存器有一個中斷使能位,和計數(shù)器中的值一起用來控制中斷。當計數(shù)器的值變?yōu)?時,引起時間片計時中斷。中斷信號的周期計算如下:
周期s=(n+1)/128
其中n是時間片計數(shù)器中的值,范圍在0-127之間。RTC的時間片計時器可以用來產(chǎn)生實時操作系統(tǒng)內(nèi)核所需的時間片。進位復位功能可以由RTC的進位復位寄存器(RTCRST)來控制。秒的進位周期可以進行選擇(30、40、50),在進位復位發(fā)生后,秒的數(shù)值又循回到0。例如當前時間是23:37:47,進位周期選為40秒,則當前時間將變?yōu)?3:38:00。509.4.2實時時鐘RTC控制寄存器RTC的內(nèi)部有許多用于控制操作的寄存器。通過程序?qū)@些寄存器進行設(shè)置,用戶就可控制RTC部件的工作。以下介紹這些寄存器的功能及位定義。511.RTC控制寄存器(RTCCON)RTC控制寄存器(RTCCON)是可讀/寫的,地址為0x57000040,初值是0x0。該寄存器僅使用4位,RTCEN控制BCD碼寄存器的讀寫使能,同時控制微處理器和RTC間的所有接口的使能。因此,在系統(tǒng)復位后需要對RTC進行操作時,RTCEN=1。而在其它時間,RTCEN應清0,以防數(shù)據(jù)無意地寫入到RTC的寄存器中。52RTC控制寄存器RTCCON的位定義532.時間片計數(shù)器(TICNT)計數(shù)器TICNT是可/讀寫的,地址為0x57000044,初值為0x0。具體格式定義如下表。543.報警控制寄存器(RTCALM)報警控制寄存器(RTCALM)是可讀/寫的,地址為0x57000050,初值是0x0。RTCALM的組成格式如下所示。注意:在節(jié)電模式下,RTCALM寄存器通過ALMINT和PMWKUP來產(chǎn)生報警信號;而在正常操作模式下,只通過ALMINT產(chǎn)生報警信號。554.報警秒數(shù)據(jù)寄存器(ALMSEC)寄存器ALMSEC是可/讀寫的,地址為0x57000054,初值為0x0。具體格式定義如下表。565.報警分數(shù)據(jù)寄存器(ALMMIN)寄存器ALMMIN是可/讀寫的,地址為0x57000058,初值為0x0。具體格式定義如下表。576.報警時數(shù)據(jù)寄存器(ALMHOUR)寄存器ALMHOUR是可/讀寫的,地址為0x5700005C,初值為0x0。具體格式定義如下表。587.報警日數(shù)據(jù)寄存器(ALMDATE)寄存器ALMDATE是可/讀寫的,地址為0x57000060,初值為0x01。具體格式定義如下表。598.報警月數(shù)據(jù)寄存器(ALMMON)寄存器ALMMON是可/讀寫的,地址為0x57000064,初值為0x01。具體格式定義如下表。609.報警年數(shù)據(jù)寄存器(ALMYEAR)寄存器ALMYEAR是可/讀寫的,地址為0x57000068,初值為0x0。具體格式定義如下表。6110.循環(huán)復位寄存器(RTCRST)寄存器RTCRST是可/讀寫的,地址為0x5700006C,初值為0x0。具體格式定義如下表。6211.秒數(shù)據(jù)寄存器(BCDSEC)寄存器BCDSEC是可/讀寫的,用來存儲當前時間的秒數(shù)據(jù),即合并的BCD碼格式。地址為0x57000070,初值不定。具體格式定義如下表。6312.分數(shù)據(jù)寄存器(BCDMIN)寄存器BCDMIN是可/讀寫的,用來存儲當前時間的分數(shù)據(jù),即合并的BCD碼格式。地址為0x57000074,初值不定。具體格式定義如下表。6413.時數(shù)據(jù)寄存器(BCDHOUR)寄存器BCDHOUR是可/讀寫的,用來存儲當前時間的時數(shù)據(jù),即合并的BCD碼格式。地址為0x57000078,初值不定。具體格式定義如下表。6514.日數(shù)據(jù)寄存器(BCDDATE)寄存器BCDDATE是可/讀寫的,用來存儲當前日期的日數(shù)據(jù),即合并的BCD碼格式。地址為0x5700007C,初值不定。具體格式定義如下表。6615.星期數(shù)據(jù)寄存器(BCDDAY)寄存器BCDDAY是可/讀寫的,用來存儲當前日期對應的星期數(shù)據(jù),即合并的BCD碼格式。地址為0x57000080,初值不定。具體格式定義如下表。6716.月數(shù)據(jù)寄存器(BCDMON)寄存器BCDMON是可/讀寫的,用來存儲當前日期的月數(shù)據(jù),即合并的BCD碼格式。地址為0x57000084,初值不定。具體格式定義如下表。6817.年數(shù)據(jù)寄存器(BCDYEAR)寄存器BCDYEAR是可/讀寫的,用來存儲當前日期對應的年數(shù)據(jù),即合并的BCD碼格式。地址為0x57000088,初值不定。具體格式定義如下表。699.4.3RTC編程舉例(應用C語言編程)#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è)置RTC的當前日期和時間*/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)閉所有的報警
rRTCRST=(uint8)0x0;//關(guān)閉復位操作
rTICNT=(uint8)0x0;//關(guān)閉時間片中斷
rRTCCON=(uint8)(rRTCCON|0xfe);//關(guān)閉RTC讀寫操作}/*RTC寫函數(shù)。函數(shù)名RTC_Write(void);
功能:完成將初始化函數(shù)中設(shè)置的日期與時間參數(shù)寫到
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年小學體育教師年度工作總結(jié)
- 民航安全考試題庫及答案解析
- 2025年企業(yè)人力資源管理師三級考試題及答案
- 幼兒園食品安全事故應急演練活動方案兩篇
- 求職與面試技巧實訓報告
- 建設(shè)工程施工合同糾紛要素式起訴狀模板律師日常使用版
- 建設(shè)工程施工合同糾紛要素式起訴狀模板多場景適配
- 2026 年專用型離婚協(xié)議書制式模板
- 2026 年無子女離婚協(xié)議書合規(guī)版
- 用戶增長2026年裂變策略
- 《認識時鐘》大班數(shù)學教案
- 攜程推廣模式方案
- THHPA 001-2024 盆底康復管理質(zhì)量評價指標體系
- JGT138-2010 建筑玻璃點支承裝置
- 垃圾清運服務投標方案(技術(shù)方案)
- 顱鼻眶溝通惡性腫瘤的治療及護理
- 光速測量實驗講義
- 斷橋鋁合金門窗施工組織設(shè)計
- 新蘇教版六年級科學上冊第一單元《物質(zhì)的變化》全部教案
- 四川山體滑坡地質(zhì)勘察報告
- 工程結(jié)算書(設(shè)備及安裝類)
評論
0/150
提交評論