接口技術(shù)-8定時(shí)部件_第1頁(yè)
接口技術(shù)-8定時(shí)部件_第2頁(yè)
接口技術(shù)-8定時(shí)部件_第3頁(yè)
接口技術(shù)-8定時(shí)部件_第4頁(yè)
接口技術(shù)-8定時(shí)部件_第5頁(yè)
已閱讀5頁(yè),還剩145頁(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)介

第八章定時(shí)/計(jì)數(shù)器接口(jiēkǒu)設(shè)計(jì)精品資料2/4/2023本章(běnzhānɡ)學(xué)習(xí)目標(biāo)與要求1.掌握定時(shí)/計(jì)數(shù)器的基本原理。2.掌握實(shí)時(shí)(shíshí)時(shí)鐘RTC的編程方法。3.掌握看門狗定時(shí)器的設(shè)計(jì)方法。4.掌握tick中斷的設(shè)計(jì)方法。5.掌握PWM的設(shè)計(jì)方法。基于ARM的嵌入式系統(tǒng)接口技術(shù)精品資料定時(shí)(dìnɡshí)控制部件定時(shí)部件是嵌入式系統(tǒng)中常用的部件,其主要用作定時(shí)功能或計(jì)數(shù)功能。不同的定時(shí)部件在使用上有所差異,但它們的邏輯原理是相同的。S3C2410芯片(xīnpiàn)中的定時(shí)部件有多個(gè),不同的定時(shí)部件有不同的應(yīng)用。這里主要介紹其中的看門狗定時(shí)器、RTC部件和Timer部件的控制原理及應(yīng)用?;贏RM的嵌入式系統(tǒng)接口技術(shù)精品資料8.1工作(gōngzuò)場(chǎng)景導(dǎo)入精品資料2/4/20238.1.1工作(gōngzuò)場(chǎng)景一設(shè)計(jì)(shèjì)一個(gè)簡(jiǎn)單的電子鐘可以在超級(jí)終端上顯示實(shí)時(shí)時(shí)間的年月日時(shí)分秒,時(shí)間實(shí)時(shí)更新,即每秒鐘更新;通常電子時(shí)鐘校準(zhǔn)時(shí)間只能校準(zhǔn)時(shí)分,該鬧鐘可以實(shí)現(xiàn)秒校準(zhǔn);另外,可以設(shè)置在重要的時(shí)間點(diǎn)的報(bào)時(shí)功能。具體功能如下。(1)給系統(tǒng)設(shè)置一個(gè)起始時(shí)間,如2010/12/2509:35:00,星期六,要求時(shí)間每隔一秒更新顯示,即可以看到時(shí)間在一秒一秒變化(時(shí)間顯示通過(guò)串口通信在超級(jí)終端上顯示)。基于ARM的嵌入式系統(tǒng)接口技術(shù)精品資料8.1.1工作(gōngzuò)場(chǎng)景一(2)具有小范圍校準(zhǔn)秒時(shí)間的功能:當(dāng)顯示的時(shí)間有誤差(wùchā)時(shí),可以通過(guò)按鍵2(接外部中斷EINT2),在實(shí)時(shí)時(shí)間秒數(shù)大于40秒時(shí),進(jìn)位到整秒時(shí)間;實(shí)時(shí)時(shí)間秒數(shù)小于40秒時(shí),退到00秒(如在09:36:47時(shí),按下按鍵2則變成09:37:00;如在09:36:37時(shí),按下按鍵2則變成09:36:00)實(shí)現(xiàn)時(shí)間校準(zhǔn)。(3)設(shè)置電子鐘的報(bào)時(shí)功能,在2010/12/2509:38:05時(shí)報(bào)時(shí),報(bào)時(shí)時(shí)四只發(fā)光二極管閃爍三次。基于ARM的嵌入式系統(tǒng)接口技術(shù)精品資料引導(dǎo)(yǐndǎo)問(wèn)題(1)如何設(shè)置實(shí)時(shí)(shíshí)時(shí)間?(2)如何使顯示的時(shí)間每秒鐘更新一次?(3)通常的電子鐘在校準(zhǔn)時(shí)間時(shí)都只有小時(shí)和分鐘的調(diào)整,而沒(méi)有秒調(diào)整,那么如何得到準(zhǔn)備到秒的時(shí)間?(4)如何設(shè)置電子鐘報(bào)時(shí)的功能?基于ARM的嵌入式系統(tǒng)接口技術(shù)精品資料8.1.2工作(gōngzuò)場(chǎng)景二帶看門狗功能的電子鐘如果在工作場(chǎng)景一中所制作的電子鐘放在城市的馬路上使用,由于無(wú)人職守,并且環(huán)境條件不好,可能會(huì)出現(xiàn)死機(jī)、程序跑飛(時(shí)間顯示不正確)等狀況。要解決這個(gè)問(wèn)題,需要增加看門狗的功能,當(dāng)出現(xiàn)上述狀況時(shí),能夠自動(dòng)重啟(假設(shè)內(nèi)部時(shí)鐘正常(zhèngcháng),重新啟動(dòng)后會(huì)顯示正確的時(shí)間)。在實(shí)驗(yàn)環(huán)境中,通常程序不會(huì)出現(xiàn)問(wèn)題,因此實(shí)驗(yàn)中采用的方法是:加入看門狗后,定時(shí)喂狗則程序正常(zhèngcháng)執(zhí)行;如果人為修改程序不喂狗,則會(huì)使實(shí)驗(yàn)箱重新啟動(dòng)?;贏RM的嵌入式系統(tǒng)接口技術(shù)精品資料引導(dǎo)(yǐndǎo)問(wèn)題(1)看門狗在程序中起什么作用?(2)如何初始化看門狗?如何啟動(dòng)(qǐdòng)看門狗工作?(3)看門狗的定時(shí)時(shí)間間隔如何計(jì)算?基于ARM的嵌入式系統(tǒng)接口技術(shù)精品資料8.1.3工作(gōngzuò)場(chǎng)景三用蜂鳴器作鬧鈴聲鬧鐘在報(bào)警時(shí)可以發(fā)出(fāchū)各種不同的顯示效果。在工作場(chǎng)景一(3)中為簡(jiǎn)化程序使用的報(bào)警方法是讓發(fā)光二極管發(fā)光,通常鬧鐘報(bào)警時(shí)應(yīng)該是發(fā)出(fāchū)聲音。因此我們給鬧鐘增加聲音報(bào)警功能:修改工作場(chǎng)景一(3)中的報(bào)警方法,改為當(dāng)報(bào)警時(shí)間到時(shí)蜂鳴器響,并且用PWM控制蜂鳴器。基于ARM的嵌入式系統(tǒng)接口技術(shù)精品資料引導(dǎo)(yǐndǎo)問(wèn)題(1)ARM中的定時(shí)部件(bùjiàn)有什么作用?(2)什么是PWM?(3)如何通過(guò)PWM控制蜂鳴器發(fā)出不同的聲音?基于ARM的嵌入式系統(tǒng)接口技術(shù)精品資料8.2定時(shí)(dìnɡshí)/計(jì)數(shù)器原理精品資料2/4/20238.2.1定時(shí)(dìnɡshí)/計(jì)數(shù)器如果將定時(shí)器定時(shí)到1分鐘,那么秒針計(jì)數(shù)到60次后,時(shí)鐘鬧鈴就會(huì)響。這里(zhèlǐ)有個(gè)計(jì)數(shù)和定時(shí)之間的概念轉(zhuǎn)化,時(shí)間表示為秒針計(jì)數(shù)值,即秒針每一次走動(dòng)的時(shí)間正好是1s,走60次即計(jì)數(shù)60次為1分鐘?;贏RM的嵌入式系統(tǒng)接口技術(shù)精品資料定時(shí)(dìnɡshí)部件的一般性原理定時(shí)/計(jì)數(shù)器內(nèi)部工作原理圖是以一個(gè)N位的加1或減1計(jì)數(shù)器為核心,計(jì)數(shù)器的初始值由初始化編程設(shè)置,計(jì)數(shù)脈沖的來(lái)源有兩類:系統(tǒng)時(shí)鐘和外部(wàibù)事件脈沖。系統(tǒng)時(shí)鐘M分頻外部事件脈沖N位計(jì)數(shù)器=0回0信號(hào)初始值基于ARM的嵌入式系統(tǒng)接口技術(shù)精品資料定時(shí)(dìnɡshí)部件的一般性原理定時(shí)器或計(jì)數(shù)(jìshù)器的邏輯電路本質(zhì)上是相同的,它們之間的區(qū)別主要在用途上。它們都是主要由帶有保存當(dāng)前值的寄存器和當(dāng)前寄存器值加1或減1邏輯組成。定時(shí)器的計(jì)數(shù)(jìshù)信號(hào)是由內(nèi)部的、周期性的時(shí)鐘信號(hào)承擔(dān),以便產(chǎn)生具有固定時(shí)間間隔的脈沖信號(hào),實(shí)現(xiàn)定時(shí)的功能。計(jì)數(shù)(jìshù)器的計(jì)數(shù)(jìshù)信號(hào)是由非周期性的信號(hào)承擔(dān),通常是外部事件產(chǎn)生的脈沖信號(hào),以便對(duì)外部事件發(fā)生的次數(shù)進(jìn)行計(jì)數(shù)(jìshù)。因?yàn)橥瑯拥倪壿嬰娐房捎糜谶@兩個(gè)目的,所以該功能部件通常被稱為“定時(shí)/計(jì)數(shù)(jìshù)器”。基于ARM的嵌入式系統(tǒng)接口技術(shù)精品資料定時(shí)(dìnɡshí)部件的一般性原理若編程設(shè)置定時(shí)/計(jì)數(shù)器為定時(shí)工作方式時(shí),則N位計(jì)數(shù)器的計(jì)數(shù)脈沖來(lái)源于內(nèi)部系統(tǒng)時(shí)鐘(shízhōng),并經(jīng)過(guò)M分頻。每個(gè)計(jì)數(shù)脈沖使計(jì)數(shù)器加1或減1,當(dāng)N位計(jì)數(shù)器里的數(shù)加到0或減到0時(shí),則會(huì)產(chǎn)生一個(gè)“回0信號(hào)”,該信號(hào)有效時(shí)表示N位計(jì)數(shù)器里的當(dāng)前值是0。因?yàn)橄到y(tǒng)時(shí)鐘(shízhōng)的頻率是固定的,其M分頻后所得到的計(jì)數(shù)脈沖頻率也就是固定的,因此通過(guò)對(duì)該頻率脈沖的計(jì)數(shù)就轉(zhuǎn)換為定時(shí),實(shí)現(xiàn)了定時(shí)功能?;贏RM的嵌入式系統(tǒng)接口技術(shù)精品資料定時(shí)部件(bùjiàn)的一般性原理若編程設(shè)置定時(shí)/計(jì)數(shù)(jìshù)器為計(jì)數(shù)(jìshù)方式時(shí),則N位計(jì)數(shù)(jìshù)器的計(jì)數(shù)(jìshù)脈沖來(lái)源于外部事件產(chǎn)生的脈沖信號(hào)。有一個(gè)外部事件脈沖,計(jì)數(shù)(jìshù)器加1或減1,直到N位計(jì)數(shù)(jìshù)器中的值為0,產(chǎn)生“回0信號(hào)”。N位計(jì)數(shù)(jìshù)器里初始值的計(jì)算,在不同的定時(shí)部件中其具體的計(jì)算公式是不同的?;贏RM的嵌入式系統(tǒng)接口技術(shù)精品資料8.2.2看門狗定時(shí)器如果你養(yǎng)了一只狗,讓狗看家護(hù)院,那么你必須及時(shí)喂它,否則它可能不會(huì)給你看門,甚至可能會(huì)咬你。嵌入式系統(tǒng)經(jīng)常工作在惡劣的環(huán)境下,或者需要在無(wú)人狀態(tài)下連續(xù)工作,可能常常會(huì)受到來(lái)自外界的各種干擾,造成程序紊亂(俗稱程序跑飛),而陷入(xiànrù)死循環(huán):程序的正常運(yùn)行被打斷,系統(tǒng)無(wú)法繼續(xù)工作,造成整個(gè)系統(tǒng)陷入(xiànrù)停滯狀態(tài),發(fā)生不可預(yù)料的后果?;?jīyú)ARM的嵌入式系統(tǒng)接口技術(shù)精品資料8.2.2看門狗定時(shí)器對(duì)于嵌入式系統(tǒng),人們想到在系統(tǒng)中設(shè)置一種能夠?qū)崟r(shí)監(jiān)測(cè)系統(tǒng)運(yùn)行(yùnxíng)狀態(tài)的功能,當(dāng)系統(tǒng)程序出現(xiàn)功能錯(cuò)亂、引起系統(tǒng)程序死循環(huán)或無(wú)法運(yùn)行(yùnxíng)下去時(shí),這個(gè)功能能中斷該系統(tǒng)程序的不正常運(yùn)行(yùnxíng),恢復(fù)系統(tǒng)程序的正常運(yùn)行(yùnxíng)。Watchdogtimer,中文名稱叫做“看門狗定時(shí)器”,就是完成這種功能的部件??撮T狗定時(shí)器計(jì)時(shí)超時(shí)時(shí)也會(huì)引起事件的發(fā)生,只是這個(gè)事件除了可以是系統(tǒng)中斷外,也可以是一個(gè)系統(tǒng)重起信號(hào)(ResetSignal),即能發(fā)送系統(tǒng)重起信號(hào)的定時(shí)器就是watchdog?;?jīyú)ARM的嵌入式系統(tǒng)接口技術(shù)精品資料8.2.3Timer部件(bùjiàn)Timer部件是主要用于提供定時(shí)功能的部件,能夠滿足人們控制時(shí)間的需求。Timer部件作為定時(shí)器,可以(kěyǐ)得到一定時(shí)間間隔的定時(shí)信號(hào)、一定頻率的脈沖信號(hào),充分顯示了“定時(shí)”的功能,而計(jì)時(shí)的功能是次要的。即Timer定時(shí)器通常用于不帶計(jì)時(shí)功能的定時(shí),如“看門狗”就是一種定時(shí)器?;贏RM的嵌入式系統(tǒng)接口技術(shù)精品資料8.2.3Timer部件(bùjiàn)Timer部件的典型應(yīng)用是脈寬調(diào)制(PWM)功能,脈寬調(diào)制(PWM)是生成占空比可變、頻率可變、相位可變的方波的設(shè)計(jì)方法。PWM是利用微處理器的數(shù)字輸出來(lái)對(duì)模擬電路進(jìn)行控制(kòngzhì)的一種非常有效的技術(shù),廣泛應(yīng)用于測(cè)量、通信、功率控制(kòngzhì)與變換等許多領(lǐng)域。PWM的一個(gè)優(yōu)點(diǎn)是從處理器到被控系統(tǒng)信號(hào)都是數(shù)字信號(hào),無(wú)需進(jìn)行數(shù)模轉(zhuǎn)換,數(shù)字信號(hào)可將噪聲影響降到最小?;贏RM的嵌入式系統(tǒng)接口技術(shù)精品資料8.3實(shí)時(shí)(shíshí)時(shí)鐘精品資料2/4/20238.3.1RTC部件(bùjiàn)實(shí)時(shí)時(shí)鐘部件RTC是用于提供年、月、日、時(shí)、分、秒、星期等實(shí)時(shí)時(shí)間信息的定時(shí)部件。RTC部件可以將年、月、日、時(shí)、分、秒、星期等信息的8位數(shù)據(jù)以BCD碼格式輸出。它由外部(wàibù)時(shí)鐘驅(qū)動(dòng)工作,外部(wàibù)時(shí)鐘頻率為32.768kHz晶體。同時(shí)RTC部件還可以具有報(bào)警功能。基于ARM的嵌入式系統(tǒng)接口技術(shù)精品資料實(shí)時(shí)(shíshí)時(shí)鐘在嵌入式系統(tǒng)中的作用在一個(gè)嵌入式系統(tǒng)中,實(shí)時(shí)時(shí)鐘單元(dānyuán)可以其提供可靠的時(shí)鐘,包括時(shí)分秒和年月日;即使在系統(tǒng)處于關(guān)機(jī)狀態(tài)下它也能夠正常工作(通常采用后備電池供電),它的外圍也不需要太多的輔助電路,典型的就是只需要一個(gè)高精度的晶振基于ARM的嵌入式系統(tǒng)接口技術(shù)精品資料S3C2410內(nèi)部RTC模塊(mókuài)結(jié)構(gòu)框圖PMWKUP215時(shí)鐘分頻秒閏年發(fā)生器重置寄存器ALMINTRTCALMXTlrtc時(shí)鐘滴答分時(shí)日期星期月控制寄存器年報(bào)警發(fā)生器XTortc時(shí)鐘滴答發(fā)生器①②④③1Hz⑤基于(jīyú)ARM的嵌入式系統(tǒng)接口技術(shù)精品資料8.3.2S3C2410RTC的主要(zhǔyào)特點(diǎn)·年、月、日、時(shí)、分、秒、星期等信息采用BCD碼表示。·閏年發(fā)生器,簡(jiǎn)單以判斷最后兩位為00時(shí)為閏年,2100年會(huì)出錯(cuò)?!ぞ哂袌?bào)警功能,能提供報(bào)警中斷或者系統(tǒng)在節(jié)電模式下的喚醒?!碛歇?dú)立的電源引腳(RTCVDD)?!ぶС諶TOS內(nèi)核時(shí)間片所需的毫秒計(jì)時(shí)中斷。·進(jìn)位(jìnwèi)復(fù)位功能?;贏RM的嵌入式系統(tǒng)接口技術(shù)精品資料BCD碼BCD碼是用4位二進(jìn)制數(shù)來(lái)表示1位十進(jìn)制數(shù)中的0~9這10個(gè)數(shù)碼,這種編碼形式利用了四個(gè)位元來(lái)儲(chǔ)存一個(gè)十進(jìn)制的數(shù)碼。RTC部件能將8位數(shù)據(jù)轉(zhuǎn)換(zhuǎnhuàn)為BCD碼的格式傳送給CPU。使用BCD碼存儲(chǔ)各個(gè)時(shí)間值,BCD碼在二進(jìn)制和十進(jìn)制之間可以很容易的轉(zhuǎn)換(zhuǎnhuàn),因此使設(shè)置變得很簡(jiǎn)單?;?jīyú)ARM的嵌入式系統(tǒng)接口技術(shù)精品資料8.3.2S3C2410RTC的主要(zhǔyào)特點(diǎn)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ì)算: 周期=(n+1)/128s n:時(shí)間片計(jì)數(shù)器的值,范圍為1-127RTC的時(shí)間片計(jì)時(shí)器可以(kěyǐ)用來(lái)產(chǎn)生實(shí)時(shí)操作系統(tǒng)內(nèi)核所需要的時(shí)間片?;贏RM的嵌入式系統(tǒng)接口技術(shù)精品資料8.3.3S3C2410RTC的基本操作時(shí)鐘產(chǎn)生寄存器時(shí)間計(jì)數(shù)器組報(bào)警寄存器組中斷(zhōngduàn)相關(guān)寄存器組基于(jīyú)ARM的嵌入式系統(tǒng)接口技術(shù)精品資料RTC的基本操作RTC的主要(zhǔyào)功能是提供時(shí)間信息和產(chǎn)生與時(shí)間相關(guān)的中斷。對(duì)RTC的操作分為兩部分:RTC初始化讀RTC時(shí)間或產(chǎn)生中斷基于(jīyú)ARM的嵌入式系統(tǒng)接口技術(shù)精品資料RTC的初始化初始化RTC時(shí)鐘值中斷設(shè)置(shèzhì)啟動(dòng)RTC基于(jīyú)ARM的嵌入式系統(tǒng)接口技術(shù)精品資料初始化RTC時(shí)鐘(shízhōng)值初始化RTC時(shí)鐘值是通過(guò)(tōngguò)設(shè)置時(shí)間計(jì)數(shù)器組完成的,時(shí)間計(jì)數(shù)器組包括8個(gè)寄存器。一般設(shè)置其中七個(gè):如:設(shè)置RTC時(shí)間為“2009-11-23,星期一,10:30:02”基于ARM的嵌入式系統(tǒng)接口技術(shù)精品資料1.RTC控制(kòngzhì)寄存器(RTCCON)注意:讀寫RTC寄存器前需要先將RTCEN位置1,修改完各數(shù)據(jù)寄存器后,為防止無(wú)意修改,設(shè)置RTCEN不使能,即RTCEN位置0。另外還有一點(diǎn)需要注意的是CNTSEL位,RTC默認(rèn)是使用(shǐyòng)BCD編碼,這樣對(duì)BCD時(shí)鐘寄存器的讀寫就變得非常方便。rRTCCON=0x01; //讀寫使能…… //設(shè)置各個(gè)時(shí)間計(jì)數(shù)器的值或者讀出各個(gè)時(shí)間計(jì)數(shù)器的值rRTCCON=0x00; //禁止讀寫使能符號(hào)位描述初始CLKRST[3]實(shí)時(shí)時(shí)鐘計(jì)數(shù)器復(fù)位0:不復(fù)位1:復(fù)位0CNTSEL[2]BCD計(jì)數(shù)選擇,將計(jì)數(shù)器設(shè)置為BCD模式0:選擇BCD模式1:保留0CLKSEL[1]BCD時(shí)鐘選擇0:將輸入時(shí)鐘進(jìn)行1/223分頻1:保留0RTCEN[0]RTC讀寫使能0:禁止1:使能0基于ARM的嵌入式系統(tǒng)接口技術(shù)精品資料2.時(shí)間(shíjiān)計(jì)數(shù)器組基于(jīyú)ARM的嵌入式系統(tǒng)接口技術(shù)精品資料秒數(shù)據(jù)(shùjù)寄存器(BCDSEC)符號(hào)位描述初始狀態(tài)SECDATA[6:4]秒數(shù)據(jù)十位的BCD碼值,范圍為0~5-[3:0]秒數(shù)據(jù)個(gè)位的BCD碼值,范圍為0~9如設(shè)置當(dāng)前時(shí)間2010年9月1日9時(shí)32分00秒,星期三,其中秒數(shù)是00秒,則可以設(shè)置如下。要想獲得當(dāng)前實(shí)時(shí)(shíshí)時(shí)間的秒數(shù),即讀取秒數(shù)據(jù)寄存器的值,則編寫如下的程序段。//設(shè)置各個(gè)時(shí)間計(jì)數(shù)器的值,設(shè)置秒數(shù)據(jù)寄存器的值rBCDSEC=0x00; //rBCDSEC是BCDSEC寄存器的名字//讀出秒數(shù)據(jù)寄存器的值,放在已聲明的變量sec中sec=rBCDSEC; //sec已聲明的變量基于ARM的嵌入式系統(tǒng)接口技術(shù)精品資料分?jǐn)?shù)據(jù)(shùjù)寄存器(BCDMIN)符號(hào)位描述初始狀態(tài)MINDATA[6:4]分?jǐn)?shù)據(jù)十位的BCD碼值,范圍為0~5-[3:0]分?jǐn)?shù)據(jù)個(gè)位的BCD碼值,范圍為0~9如設(shè)置當(dāng)前時(shí)間2010年9月1日9時(shí)32分00秒,星期三,其中分鐘是32分,則可以(kěyǐ)設(shè)置如下。要想獲得當(dāng)前實(shí)時(shí)時(shí)間的分鐘數(shù),則可以(kěyǐ)編寫如下的程序段。//設(shè)置各個(gè)時(shí)間計(jì)數(shù)器的值,設(shè)置分鐘數(shù)據(jù)寄存器的值rBCDMIN=0x32;//讀出分鐘數(shù)據(jù)寄存器的值,放在已聲明的變量min中min=rBCDMIN;基于ARM的嵌入式系統(tǒng)接口技術(shù)精品資料時(shí)數(shù)據(jù)(shùjù)寄存器(BCDHOUR)符號(hào)位描述初始狀態(tài)reserved[7:6]保留HOURDATA[5:4]時(shí)數(shù)據(jù)十位的BCD碼值,范圍為0~2-[3:0]時(shí)數(shù)據(jù)個(gè)位的BCD碼值,范圍為0~9如設(shè)置當(dāng)前時(shí)間2010年9月1日9時(shí)32分00秒,星期三,其中(qízhōng)小時(shí)數(shù)是09時(shí),則可以設(shè)置如下。要想獲得當(dāng)前實(shí)時(shí)時(shí)間的小時(shí)數(shù),則可以編寫如下的程序段。//設(shè)置各個(gè)時(shí)間計(jì)數(shù)器的值,設(shè)置時(shí)數(shù)據(jù)寄存器的值rBCDHOUR=0x09;//讀出時(shí)數(shù)據(jù)寄存器的值,放在已聲明的變量hour中hour=rBCDHOUR; 基于ARM的嵌入式系統(tǒng)接口技術(shù)精品資料日數(shù)據(jù)(shùjù)寄存器(BCDDATE)符號(hào)位描述初始狀態(tài)reserved[7:6]保留DATEDATA[5:4]日數(shù)據(jù)十位的BCD碼值,范圍為0~3-[3:0]日數(shù)據(jù)個(gè)位的BCD碼值,范圍為0~9如設(shè)置當(dāng)前時(shí)間2010年9月1日9時(shí)32分00秒,星期三,其中(qízhōng)日期是1日,則可以設(shè)置如下。要想獲得當(dāng)前實(shí)時(shí)時(shí)間的日期值,則可以編寫如下的程序段。//設(shè)置各個(gè)時(shí)間計(jì)數(shù)器的值,設(shè)置日期數(shù)據(jù)寄存器的值rBCDDATE=0x01;//讀出日期數(shù)據(jù)寄存器的值,放在已聲明的變量date中date=rBCDDATE; 基于ARM的嵌入式系統(tǒng)接口技術(shù)精品資料星期(xīngqī)數(shù)據(jù)寄存器(BCDDAY)符號(hào)位描述初始狀態(tài)reserved[7:3]保留-DAYDATA[2:0]星期數(shù)據(jù)的BCD碼值,范圍為1~7其余(qíyú)略基于ARM的嵌入式系統(tǒng)接口技術(shù)精品資料因?yàn)闀r(shí)間計(jì)數(shù)器組的各個(gè)寄存器都是定義為unsignedchar類型,因此,rBCDYEAR寄存器中也只能(zhīnénɡ)存放年份的最后兩位,因此設(shè)置時(shí)雖然設(shè)置的是四位十進(jìn)制數(shù),但保存的只是后面的兩位,而取出其中值的時(shí)候需要加上前兩位值。基于(jīyú)ARM的嵌入式系統(tǒng)接口技術(shù)精品資料例設(shè)置(shèzhì)RTC時(shí)間為“2009-11-23,星期一,10:30:02”rRTCCON=0x01;//讀寫使能rBCDSEC=0x02;rBCDMIN=0x30;rBCDHOUR=0x10;rBCDDAY=0x23;rBCDDATE=0x01;rBCDMON=0x11;rBCDYEAR=0x2009;rRTCCON=0x00;基于(jīyú)ARM的嵌入式系統(tǒng)接口技術(shù)精品資料獲取實(shí)時(shí)時(shí)間(shíjiān),即獲取實(shí)時(shí)時(shí)鐘當(dāng)前時(shí)間(shíjiān)、日期rRTCCON=0x01;sec=rBCDSEC;min=rBCDMIN;hour=rBCDHOUR;day=rBCDDAY;date=rBCDDATE;mon=rBCDMON;year=0x2000+rBCDYEAR;rRTCCON=0x00;基于(jīyú)ARM的嵌入式系統(tǒng)接口技術(shù)精品資料8.3.3.2報(bào)警(bàojǐng)中斷可以在RTC中設(shè)定在某個(gè)時(shí)間產(chǎn)生中斷,該功能(gōngnéng)可通過(guò)報(bào)警中斷來(lái)實(shí)現(xiàn):當(dāng)未屏蔽的報(bào)警時(shí)間寄存器和對(duì)應(yīng)的時(shí)間計(jì)數(shù)器計(jì)數(shù)值都相匹配時(shí),就產(chǎn)生報(bào)警中斷,且輸出一個(gè)約為1.8V的報(bào)警輸出信號(hào)。通過(guò)設(shè)置報(bào)警控制寄存器即可設(shè)定報(bào)警中斷的產(chǎn)生時(shí)刻。例如:設(shè)置秒時(shí)鐘告警,則設(shè)置:rRTCALM=0x41;//0x41表示使能RTC告警,以及使能秒時(shí)鐘告警基于ARM的嵌入式系統(tǒng)接口技術(shù)精品資料報(bào)警(bàojǐng)控制寄存器(RTCALM)符號(hào)位描述初始狀態(tài)保留[7]保留0ALMEN[6]時(shí)鐘告警總使能/禁止0:禁止1:使能0YEAREN[5]年時(shí)鐘告警使能/禁止0:禁止1:使能0MONREN[4]月時(shí)鐘告警使能/禁止0:禁止1:使能0DAYEN[3]日時(shí)鐘告警使能/禁止0:禁止1:使能0HOUREN[2]時(shí)時(shí)鐘告警使能/禁止0:禁止1:使能0MINEN[1]分時(shí)鐘告警使能/禁止0:禁止1:使能0SECEN[0]秒時(shí)鐘告警使能/禁止0:禁止1:使能0基于(jīyú)ARM的嵌入式系統(tǒng)接口技術(shù)精品資料日數(shù)據(jù)(shùjù)寄存器(BCDDATE)報(bào)警控制寄存器(RTCALM)用來(lái)確定報(bào)警功能(gōngnéng)是否使能以及各報(bào)警時(shí)間寄存器是否使能(被屏蔽)。RTCALM寄存器是可讀/寫的如設(shè)置秒時(shí)鐘告警,則需要使能總告警位和秒時(shí)鐘告警位。要設(shè)置報(bào)警時(shí)間為每天的9時(shí)35分05秒,即相應(yīng)的時(shí)分秒各位都要匹配時(shí)報(bào)警,應(yīng)該如下設(shè)置。//先設(shè)置報(bào)警時(shí)間,即設(shè)置相應(yīng)的報(bào)警數(shù)據(jù)寄存器的值rRTCALM=0x41;//0x41表示告警總使能bit[6]和使能秒時(shí)鐘告警bit[0]//先設(shè)置報(bào)警時(shí)間,即設(shè)置相應(yīng)的報(bào)警數(shù)據(jù)寄存器的值rRTCALM=0x47;//0x47表示告警總使能bit[6]=1并使能bit[2:0]=111基于ARM的嵌入式系統(tǒng)接口技術(shù)精品資料報(bào)警時(shí)間(shíjiān)數(shù)據(jù)寄存器基于(jīyú)ARM的嵌入式系統(tǒng)接口技術(shù)精品資料報(bào)警(bàojǐng)秒數(shù)據(jù)寄存器(ALMSEC)(其余略)符號(hào)位描述初始狀態(tài)reserved[7]保留0SECDATA[6:4]報(bào)警定時(shí)器秒數(shù)據(jù)的十位數(shù)BCD碼值,范圍為0~5000[3:0]報(bào)警定時(shí)器秒數(shù)據(jù)的個(gè)位BCD碼值,范圍為0~90000如設(shè)置報(bào)警時(shí)間為每天的9時(shí)35分05秒,其中秒報(bào)警時(shí)間為05秒,則可以(kěyǐ)如下設(shè)置。rALMSEC=0x05;基于ARM的嵌入式系統(tǒng)接口技術(shù)精品資料例設(shè)置報(bào)警時(shí)間(shíjiān)為每天的9時(shí)35分05秒,可以如下設(shè)置。rRTCCON=0x01;//讀寫使能//以下六行(liùxínɡ)設(shè)置各個(gè)報(bào)警數(shù)據(jù)寄存器的值rALMSEC=0x05;rALMMIN=0x35;rALMHOUR=0x09;rALMDATE=0x01;rALMMON=0x09;rALMYEAR=0x2010;rRTCALM=0x47; //報(bào)警總使能、時(shí)、分、秒報(bào)警使能rRTCCON=0x00; //禁止讀寫使能基于ARM的嵌入式系統(tǒng)接口技術(shù)精品資料8.3.3.2報(bào)警(bàojǐng)中斷若要在報(bào)警時(shí)間到時(shí)產(chǎn)生(chǎnshēng)報(bào)警中斷,還需要進(jìn)行中斷設(shè)置,利用第六章的中斷處理函數(shù),可以如下設(shè)置void__irqrtc_int_isr(void); //放在函數(shù)外,聲明中斷處理函數(shù)Irq_Request(IRQ_RTC,rtc_int_isr); //請(qǐng)求中斷,IRQ_RTC為中斷號(hào)//此處加入設(shè)置報(bào)警時(shí)間及方式的語(yǔ)句或函數(shù)調(diào)用Irq_Enable(IRQ_RTC); //使能中斷//在中斷處理函數(shù)里清除中斷Irq_Clear(IRQ_RTC);基于ARM的嵌入式系統(tǒng)接口技術(shù)精品資料8.3.3.2報(bào)警(bàojǐng)中斷ALMEN使能,對(duì)應(yīng)RTCALM都相應(yīng)使能。設(shè)置相應(yīng)告警(gàojǐng)時(shí)分秒寄存器。當(dāng)RTC時(shí)鐘運(yùn)行到跟我們?cè)O(shè)定的告警(gàojǐng)時(shí)鐘值相等瞬間發(fā)生一次告警(gàojǐng)中斷,RTC時(shí)鐘跟告警(gàojǐng)時(shí)鐘比較時(shí),只是按照RTCALM中設(shè)定的使能的年月日時(shí)分秒順序比較,均想等時(shí)才發(fā)生,如果其中的RTCALM中的某位設(shè)為禁止,則不對(duì)此位作比即可?;贏RM的嵌入式系統(tǒng)接口技術(shù)精品資料8.3.3.3進(jìn)位復(fù)位(fùwèi)功能在S3C2410的RTC單元中有一個(gè)循環(huán)復(fù)位寄存器(RTCRST),具有進(jìn)位復(fù)位的功能,即可以把實(shí)時(shí)時(shí)間直接調(diào)整(tiáozhěng)到整分鐘值,把秒置為00。更具體地說(shuō),秒的進(jìn)位周期可以選擇,進(jìn)位周期可以設(shè)置為30、40、50。有兩種調(diào)整(tiáozhěng)方式:大于設(shè)定的進(jìn)位周期時(shí),分鐘數(shù)據(jù)加1,秒置為00;小于設(shè)定的進(jìn)位周期時(shí),分鐘數(shù)據(jù)不變,秒置00。這個(gè)功能類似于數(shù)學(xué)上“四舍五入”的計(jì)算方法?;贏RM的嵌入式系統(tǒng)接口技術(shù)精品資料8.3.3.3進(jìn)位(jìnwèi)復(fù)位功能例如,當(dāng)進(jìn)位周期選為40秒,若當(dāng)前時(shí)間是09:36:47,通過(guò)使能循環(huán)(xúnhuán)復(fù)位位,則當(dāng)前時(shí)間將變?yōu)?9:37:00;若當(dāng)前時(shí)間是09:36:37,通過(guò)使能循環(huán)(xúnhuán)復(fù)位位,則當(dāng)前時(shí)間將變?yōu)?9:36:00。進(jìn)位復(fù)位功能是通過(guò)循環(huán)(xúnhuán)復(fù)位寄存器(RTCRST)完成的?;贏RM的嵌入式系統(tǒng)接口技術(shù)精品資料循環(huán)(xúnhuán)復(fù)位寄存器(RTCRST)符號(hào)位描述初始狀態(tài)SRSTEN[3]秒循環(huán)復(fù)位使能位1:使能

0:不使能0SCCR[2:0]確定秒循環(huán)進(jìn)位的周期011=超過(guò)30秒100=超過(guò)40秒101=超過(guò)50秒000秒的進(jìn)位周期可以進(jìn)行(jìnxíng)選擇(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?;贏RM的嵌入式系統(tǒng)接口技術(shù)精品資料8.3.3.4時(shí)鐘(shízhōng)節(jié)拍中斷RTC的時(shí)間片計(jì)時(shí)器即時(shí)鐘節(jié)拍用于中斷請(qǐng)求,可以用來(lái)產(chǎn)生實(shí)時(shí)操作系統(tǒng)內(nèi)核所需的時(shí)間片。在TICNT寄存器中有一個(gè)時(shí)間片計(jì)數(shù)器,該寄存器共有八位,有一位中斷使能位和一個(gè)計(jì)數(shù)數(shù)值n(n占7位,因此n的取值范圍為1~127(27-1=127)),該計(jì)數(shù)器是減1計(jì)數(shù)器,啟動(dòng)(qǐdòng)計(jì)數(shù)后,當(dāng)計(jì)數(shù)器的值減到0后,則產(chǎn)生一個(gè)毫秒級(jí)中斷,叫做時(shí)間片計(jì)時(shí)中斷或時(shí)鐘節(jié)拍中斷?;贏RM的嵌入式系統(tǒng)接口技術(shù)精品資料實(shí)時(shí)時(shí)鐘(shízhōng)計(jì)數(shù)器(時(shí)間片計(jì)數(shù)器)TICNT符號(hào)位描述初始狀態(tài)TICKINTENABLE[7]中斷使能/禁止0:禁止1:使能0TICKTIMECOUNT[6:0]實(shí)時(shí)時(shí)鐘計(jì)數(shù)器0000000當(dāng)計(jì)數(shù)值(shùzí)減少到0則產(chǎn)生時(shí)間片計(jì)時(shí)(時(shí)鐘節(jié)拍)中斷。那么中斷周期就是: 周期=(n+1)/128sec其中n為時(shí)間片計(jì)數(shù)器中的值(Ticktimecountvalue),范圍是1-127?;贏RM的嵌入式系統(tǒng)接口技術(shù)精品資料8.3.3.4時(shí)鐘(shízhōng)節(jié)拍中斷例如,程序(chéngxù)中設(shè)置每秒鐘引發(fā)一次中斷rRTCCON=0x0; //禁止RTC寄存器讀寫使能rTICNT=0x7f|0x80; //TICK中斷使能,周期為(1+127)/128秒//0x80即設(shè)置此寄存器的位[7]為1,使能時(shí)間片計(jì)數(shù)中斷基于ARM的嵌入式系統(tǒng)接口技術(shù)精品資料8.4回到工作(gōngzuò)場(chǎng)景一精品資料2/4/2023工作(gōngzuò)過(guò)程一1)通過(guò)超級(jí)終端顯示實(shí)時(shí)時(shí)間的時(shí)、分、秒首先設(shè)置實(shí)時(shí)時(shí)間,然后讀取實(shí)時(shí)時(shí)間值,并在超級(jí)終端上打印出來(lái)。建立一個(gè)工程打開(kāi)CodeWarriorIDE,新建一個(gè)工程,輸入(shūrù)工程名rtc,存放在D:\test\rtc目錄下;新建一個(gè)C語(yǔ)言源文件,輸入(shūrù)文件名rtctest.c,存放在D:\test\rtc目錄下并加入到工程rtc中?;贏RM的嵌入式系統(tǒng)接口技術(shù)精品資料工作(gōngzuò)過(guò)程二編寫rtctest.c程序首先包含(bāohán)寄存器地址定義的頭文件。/*包含文件*/#include"2410addr.h"/*在此頭文件中有對(duì)RTC中用到的寄存器的定義,例如#definerRTCCON (*(volatileunsignedchar*)0x57000040)//RTCcontrol#definerTICNT (*(volatileunsignedchar*)0x57000044)//Ticktimecount#definerRTCALM (*(volatileunsignedchar*)0x57000050)//RTCalarmcontrol#definerALMSEC (*(volatileunsignedchar*)0x57000054)//Alarmsecond……*/基于ARM的嵌入式系統(tǒng)接口技術(shù)精品資料工作(gōngzuò)過(guò)程二編寫rtctest.c程序在程序中,定義一個(gè)函數(shù)rtcset(),用來(lái)設(shè)置當(dāng)前時(shí)間,函數(shù)的參數(shù)為要設(shè)置的時(shí)間,用數(shù)組(年只存儲(chǔ)后面(hòumian)兩位)或結(jié)構(gòu)體(可以表示不同的數(shù)據(jù)類型)來(lái)定義此參數(shù)更加方便。假設(shè)設(shè)置的時(shí)間為2010/12/2509:35:00,星期六。①定義一個(gè)結(jié)構(gòu)體類型rtc_date。typedefstructST_DATE //定義結(jié)構(gòu)體類型,該類型命名為rtc_date{ shortyear; //年,定義為short類型,可以存儲(chǔ)4位的年份 char mon; //月 char day; //日 char week; //星期 char hour; //時(shí) char min; //分 char sec; //秒}rtc_date; //用typedef定義結(jié)構(gòu)體類型的別名為rtc_date基于ARM的嵌入式系統(tǒng)接口技術(shù)精品資料工作(gōngzuò)過(guò)程二編寫(biānxiě)rtctest.c程序②定義函數(shù)rtcset(rtc_date*p_date),用于設(shè)置系統(tǒng)的實(shí)時(shí)時(shí)間,其中p_date是rtc_date類型的結(jié)構(gòu)體變量。rtcset(rtc_date*p_date){ rRTCCON=0x01; //讀寫使能 rBCDSEC=p_date->sec; //以下使用結(jié)構(gòu)體成員賦值, rBCDMIN=p_date->min; //用指針取成員時(shí)用->運(yùn)算符 rBCDHOUR=p_date->hour; rBCDDAY=p_date->week; rBCDDATE=p_date->day; rBCDMON=p_date->mon; rBCDYEAR=p_date->year; rRTCCON=0x00; //禁止讀寫}基于ARM的嵌入式系統(tǒng)接口技術(shù)精品資料工作(gōngzuò)過(guò)程二編寫rtctest.c程序③再定義一個(gè)獲取(huòqǔ)時(shí)間的函數(shù)rtcget(rtc_date*p_date),用于取出實(shí)時(shí)時(shí)間。rtcget(rtc_date*p_date){ rRTCCON=0x01; //讀寫使能 p_date->sec=rBCDSEC; //以下取出時(shí)間計(jì)數(shù)器組的值賦給結(jié)構(gòu)體成員 p_date->min=rBCDMIN; p_date->hour=rBCDHOUR; p_date->week=rBCDDAY; p_date->day=rBCDDATE; p_date->mon=rBCDMON; p_date->year=rBCDYEAR; rRTCCON=0x00; //禁止讀寫}基于ARM的嵌入式系統(tǒng)接口技術(shù)精品資料工作(gōngzuò)過(guò)程二編寫rtctest.c程序(chéngxù)④實(shí)時(shí)時(shí)間要通過(guò)串口在超級(jí)終端上顯示,因此在主函數(shù)中,首先要初始化時(shí)鐘和串口,參見(jiàn)第十章,在這里仍然直接調(diào)用已有的函數(shù)設(shè)置。voidMain(void){ SetClockDivider(1,1); SetMPllValue(0xa1,0x3,0x1); Isr_Init(); Port_Init(); uart0_init(); …… //下面是具體的對(duì)RTC的操作}基于ARM的嵌入式系統(tǒng)接口技術(shù)精品資料工作(gōngzuò)過(guò)程二編寫rtctest.c程序⑤因?yàn)橐竺扛粢幻敫?gēngxīn)顯示時(shí)間,所以在這里利用秒中斷,每秒中斷一次,重新顯示實(shí)時(shí)時(shí)間,秒中斷的設(shè)置也定義為函數(shù),把相應(yīng)的中斷請(qǐng)求和中斷使能都在函數(shù)中實(shí)現(xiàn)。#include"interrupt.h" //包含處理中斷相關(guān)的頭文件void__irqrtctick_isr(void); //在主函數(shù)前聲明中斷處理函數(shù)……rtc_tickset(chartick){ pISR_TICK=(unsigned)rtctick_isr; //請(qǐng)求中斷rRTCCON=0x0; //設(shè)置前禁止對(duì)數(shù)據(jù)寄存器讀寫rTICNT=(tick&0x7f)|0x80; //bit[7]=1,使能TICK中斷,周期為(1+tick)/128秒Irq_Enable(IRQ_TICK); //使能中斷,在中斷處理函數(shù)中清除}基于ARM的嵌入式系統(tǒng)接口技術(shù)精品資料工作(gōngzuò)過(guò)程二編寫rtctest.c程序⑥調(diào)用上面的兩個(gè)函數(shù)進(jìn)行實(shí)時(shí)時(shí)間的設(shè)置,再取出實(shí)時(shí)時(shí)間,并設(shè)置一個(gè)全局變量,標(biāo)識(shí)是否需要更新顯示的內(nèi)容,最后把實(shí)時(shí)時(shí)間通過(guò)串口顯示在超級(jí)終端里。(程序清單見(jiàn)書(shū)上。)上述寫法,每隔一秒鐘重新獲取時(shí)間,再更新超級(jí)終端的顯示。如果不用秒中斷而直接在while(1)循環(huán)中顯示實(shí)時(shí)時(shí)間,如下面的寫法,雖然也可以(kěyǐ)實(shí)時(shí)更新顯示,但這樣的寫法,程序一直在取時(shí)間并顯示,浪費(fèi)資源?;贏RM的嵌入式系統(tǒng)接口技術(shù)精品資料工作(gōngzuò)過(guò)程二編寫(biānxiě)rtctest.c程序while(1){ rtcget(&m_date); Uart_Printf(“\b\b\b\b\b\b\b\b%02x:%02x:%02x”,m_date.hour,m_date.min,m_date.sec);}基于ARM的嵌入式系統(tǒng)接口技術(shù)精品資料工作(gōngzuò)過(guò)程二編寫rtctest.c程序⑦只要設(shè)置(shèzhì)好了時(shí)間片中斷計(jì)數(shù)器,到時(shí)間就會(huì)產(chǎn)生中斷,時(shí)間片中斷的中斷處理函數(shù)很簡(jiǎn)單,只要更改一下標(biāo)識(shí),保證每秒鐘重新到時(shí)間計(jì)數(shù)器組取實(shí)時(shí)時(shí)間值。voidrtctick_isr(void){Irq_Clear(IRQ_TICK); //清除TICK中斷flag++; //使flag=flag+1}基于ARM的嵌入式系統(tǒng)接口技術(shù)精品資料工作(gōngzuò)過(guò)程三設(shè)置工程并編譯工程①加入需要的啟動(dòng)文件和其他需要的文件。 加入2410init.s和2410slib.s; 加入2410lib.c,interrupt.c(從提供的光盤(ɡuānɡpán)資料中拷貝到D:\test目錄),并在工程窗口的LinkOrder標(biāo)簽頁(yè)設(shè)置把它們放在主程序前面;②在工程屬性對(duì)話框中的Target\AccessPaths設(shè)置包含的頭文件路徑,對(duì)工程的ARMLinker進(jìn)行設(shè)置,同前。③編譯工程?;贏RM的嵌入式系統(tǒng)接口技術(shù)精品資料工作(gōngzuò)過(guò)程四、五下載程序打開(kāi)AXDDebugger,選擇File|LoadImage命令,加載要調(diào)試的文件(wénjiàn)D:\test\rtc\rtc_Data\DebugRel\rtc.axf,將程序下載到目標(biāo)系統(tǒng)。調(diào)試、運(yùn)行打開(kāi)超級(jí)終端,下載完成后調(diào)試運(yùn)行,可以在超級(jí)終端上看到實(shí)時(shí)時(shí)間年月日時(shí)分秒的顯示。此工作場(chǎng)景是在超級(jí)終端上顯示實(shí)時(shí)時(shí)間,也可以用六只數(shù)碼管顯示年月日,再顯示時(shí)分秒,程序見(jiàn)第11章11.10節(jié)“工作實(shí)訓(xùn)營(yíng)”的訓(xùn)練實(shí)例1。基于ARM的嵌入式系統(tǒng)接口技術(shù)精品資料工作(gōngzuò)過(guò)程一2)校準(zhǔn)秒時(shí)間在1)所完成的實(shí)時(shí)時(shí)間顯示程序基礎(chǔ)上填加功能:通過(guò)按下按鍵2,在實(shí)時(shí)時(shí)間秒數(shù)大于40秒時(shí),進(jìn)位到整秒時(shí)間;實(shí)時(shí)時(shí)間秒數(shù)小于40秒時(shí),退到00秒(如在09:36:47時(shí),按下按鍵2則變成09:37:00;如在09:36:37時(shí),按下按鍵2則變成09:36:00。)假設(shè)按鍵2接外部中斷2。修改rtctest.c程序因?yàn)?yīnwèi)需要使用外部中斷,所以要增加中斷設(shè)置編程?;贏RM的嵌入式系統(tǒng)接口技術(shù)精品資料工作(gōngzuò)過(guò)程二①在包含文件部分(bùfen)加入(如果沒(méi)有)處理中斷需要用到的頭文件:interrupt.h,2410lib.h(前面用到了tick中斷,已經(jīng)有一部分(bùfen)中斷設(shè)置,只需填加和EINT2相關(guān)的中斷處理部分(bùfen)),在主函數(shù)外部,定義中斷處理函數(shù)。/*定義中斷處理函數(shù)*/void__irqeint2_isr(void);基于ARM的嵌入式系統(tǒng)接口技術(shù)精品資料工作(gōngzuò)過(guò)程二②在主函數(shù)中,加入(jiārù)對(duì)EINT2中斷處理過(guò)程的函數(shù),包括請(qǐng)求中斷、使能中斷。voidMain(void){

...... //已有端口設(shè)置和中斷初始化pISR_EINT2=(unsigned)eint2_isr; //請(qǐng)求中斷Irq_Enable(IRQ_EINT2); //使能中斷

......}基于ARM的嵌入式系統(tǒng)接口技術(shù)精品資料工作(gōngzuò)過(guò)程二③在中斷(zhōngduàn)處理函數(shù)中,設(shè)置RTCRST寄存器,主要是使能秒循環(huán)復(fù)位,設(shè)置如何循環(huán)復(fù)位可以在主函數(shù)中設(shè)置也可以在中斷(zhōngduàn)函數(shù)中設(shè)置。voideint2_isr(void){ Irq_Clear(IRQ_EINT2);//清除中斷 rRTCCON=0x01;//因?yàn)閺?fù)位置位要修改時(shí)間計(jì)數(shù)器組的值,因此允許其讀寫 rRTCRST|=0xB; //或者在Main中,rRTCRST=0x3,這里rRTCRST|=0x8 rRTCCON=0x00;//修改完后使讀寫禁止,防止被誤修改}基于ARM的嵌入式系統(tǒng)接口技術(shù)精品資料工作(gōngzuò)過(guò)程二重新編譯工程、下載并運(yùn)行重新編譯工程,并下載到實(shí)驗(yàn)箱上運(yùn)行,分別在不同(bùtónɡ)的時(shí)刻按下按鍵2,在超級(jí)終端的時(shí)間顯示上,觀察秒和分鐘值的變化?;贏RM的嵌入式系統(tǒng)接口技術(shù)精品資料工作(gōngzuò)過(guò)程一3)設(shè)置在每分鐘的第5秒時(shí)報(bào)時(shí),報(bào)時(shí)時(shí)間到時(shí)四只發(fā)光二極管閃爍三次。修改rtctest.c程序①報(bào)警功能也是中斷,因此也需要進(jìn)行中斷處理。在前面已經(jīng)設(shè)置好包含文件,在主函數(shù)外部,定義(dìngyì)中斷處理函數(shù),報(bào)警中斷的中斷號(hào)命名為IRQ_RTC。/*定義中斷處理函數(shù)*/void__irqalarm_isr(void);基于ARM的嵌入式系統(tǒng)接口技術(shù)精品資料工作(gōngzuò)過(guò)程一②對(duì)于報(bào)警的時(shí)間和報(bào)警方式的設(shè)置,也用一個(gè)函數(shù)來(lái)完成。在程序中主函數(shù)的前面定義(dìngyì)函數(shù)alarmset(rtc_date*p_date,unsignedcharalmmode),這個(gè)函數(shù)有兩個(gè)參數(shù),第一個(gè)是報(bào)警的時(shí)間,和上面設(shè)置實(shí)時(shí)時(shí)間及獲得實(shí)時(shí)時(shí)間的參數(shù)一樣;第二個(gè)參數(shù)是報(bào)警的方式,也就是RTCALM報(bào)警控制寄存器(RTCALM)中的內(nèi)容,此寄存器共有七位有效位,因此設(shè)置參數(shù)類型為unsignedchar?;贏RM的嵌入式系統(tǒng)接口技術(shù)精品資料工作(gōngzuò)過(guò)程一alarmset(rtc_date*p_date,unsignedcharalmmode){ rRTCCON=0x01; //讀寫使能 rALMSEC=p_date->sec; rALMMIN=p_date->min; rALMHOUR=p_date->hour; rALMDATE=p_date->day; rALMMON=p_date->mon; rALMYEAR=p_date->year; rRTCALM=almmode; rRTCCON=0x00; //禁止(jìnzhǐ)讀寫}基于ARM的嵌入式系統(tǒng)接口技術(shù)精品資料工作(gōngzuò)過(guò)程一③在主函數(shù)中,加入(jiārù)中斷處理過(guò)程的函數(shù),包括中斷初始化、端口初始化、請(qǐng)求中斷、并調(diào)用上面的函數(shù)實(shí)現(xiàn)報(bào)警中斷設(shè)置,最后使能中斷。voidMain(void){

...... Isr_Init();//中斷初始化,如果有其他中斷已經(jīng)調(diào)用此函數(shù),不用調(diào)用兩次 Port_Init(); //初始化端口,說(shuō)明同上 pISR_RTC=(unsigned)alarm_isr; //請(qǐng)求中斷 m_date.sec=0x05; //設(shè)置告警時(shí)間,與設(shè)置實(shí)時(shí)時(shí)間類似 m_date.min=0x35;//變量m_date只在賦初值時(shí)用到,此處可以重復(fù)使用 m_date.hour=0x09; m_date.date=0x25; m_date.mon=0x12; m_date.year=0x10;/*以上賦值語(yǔ)句其實(shí)只修改了m_date.sec的值,其他沒(méi)變的賦值語(yǔ)句可以不用*/ alarmset(&m_date,0x41); //調(diào)用函數(shù)設(shè)置報(bào)警的時(shí)間和方式 Irq_Enable(IRQ_RTC); //使能中斷

......}基于ARM的嵌入式系統(tǒng)接口技術(shù)精品資料工作(gōngzuò)過(guò)程一④在中斷處理函數(shù)中,使四只二極管閃爍三次,假設(shè)(jiǎshè)二極管由0x10000000的bit[7:4]控制。voidrtc_alarm_isr(void){ Irq_Clear(IRQ_RTC); //清除中斷 for(intm=0;m<3;m++){ //閃爍三次 *((unsignedchar*)0x10000000)=0x0f;//0x10000000用于控制二極管 Delay(10); //調(diào)用延時(shí)函數(shù) *((unsignedchar*)0x10000000)=0xff; Delay(10); //調(diào)用延時(shí)函數(shù) }//因?yàn)檫@段程序執(zhí)行時(shí)間不長(zhǎng),所以放在中斷處理函數(shù)里。}基于ARM的嵌入式系統(tǒng)接口技術(shù)精品資料工作(gōngzuò)過(guò)程二重新編譯工程、下載并運(yùn)行(yùnxíng)重新編譯工程,并下載到實(shí)驗(yàn)箱上運(yùn)行(yùnxíng),觀察當(dāng)秒值為5時(shí)發(fā)光二極管的變化?;贏RM的嵌入式系統(tǒng)接口技術(shù)精品資料8.5看門狗定時(shí)器精品資料2/4/20238.5.1看門狗定時(shí)器的原理(yuánlǐ)S3C2410芯片(xīnpiàn)看門狗定時(shí)器的作用是,當(dāng)系統(tǒng)程序出現(xiàn)功能錯(cuò)亂,引起系統(tǒng)程序死循環(huán)時(shí),能中斷該系統(tǒng)程序的不正常運(yùn)行,恢復(fù)系統(tǒng)程序的正常運(yùn)行。基于ARM的嵌入式系統(tǒng)接口技術(shù)精品資料五基礎(chǔ)知識(shí)8.5.1看門狗定時(shí)器的原理(yuánlǐ)其基本原理為:設(shè)本系統(tǒng)程序(chéngxù)完整運(yùn)行一周期的時(shí)間是Tp,看門狗的定時(shí)周期為Ti,Ti>Tp,在程序(chéngxù)運(yùn)行一周期后就修改定時(shí)器的計(jì)數(shù)值,只要程序(chéngxù)正常運(yùn)行,定時(shí)器就不會(huì)溢出,若由于干擾等原因使系統(tǒng)不能在Tp時(shí)刻修改定時(shí)器的計(jì)數(shù)值,定時(shí)器將在Ti時(shí)刻溢出,引發(fā)系統(tǒng)復(fù)位,使系統(tǒng)得以重新運(yùn)行,從而起到監(jiān)控作用。在一個(gè)完整的嵌入式系統(tǒng)或單片機(jī)小系統(tǒng)中通常都有看門狗定時(shí)器,且一般集成在處理器芯片中,看門狗實(shí)際上就是一個(gè)定時(shí)器,只是它在期滿后將自動(dòng)引起系統(tǒng)復(fù)位?;贏RM的嵌入式系統(tǒng)接口技術(shù)精品資料輸入時(shí)鐘為PCLK(該時(shí)鐘頻率等于(děngyú)系統(tǒng)的主頻),它經(jīng)過(guò)兩級(jí)分頻,最后將分頻后的時(shí)鐘作為該定時(shí)器的輸入時(shí)鐘,當(dāng)計(jì)數(shù)器期滿后可以產(chǎn)生中斷或者復(fù)位信號(hào)。S3C2410的看門狗定時(shí)器有兩個(gè)功能作為常規(guī)定時(shí)器使用,并且可以(kěyǐ)產(chǎn)生中斷作為看門狗定時(shí)器使用,期滿時(shí),它可以(kěyǐ)產(chǎn)生128個(gè)時(shí)鐘周期的復(fù)位信號(hào)系統(tǒng)時(shí)鐘M分頻外部事件脈沖N位計(jì)數(shù)器=0回0信號(hào)初始值基于ARM的嵌入式系統(tǒng)接口技術(shù)精品資料8.5.1看門狗定時(shí)器的原理(yuánlǐ)Watchdog根據(jù)系統(tǒng)時(shí)鐘、預(yù)分頻值、分割器因子(yīnzǐ)會(huì)產(chǎn)生一個(gè)watchdog自己的工作周期,t_watchdog=1/(PCLK/(Prescalervalue+1)/Division_factor)watchdog在一個(gè)t_watchdog周期結(jié)束時(shí)會(huì)產(chǎn)生一個(gè)記數(shù)遞減信號(hào),每當(dāng)這個(gè)信號(hào)產(chǎn)生時(shí),WTCNT中的值便減1,若在WTCNT遞減為0(TimerOut)的時(shí)候軟件層還沒(méi)有重新往WTCNT中寫入數(shù)值(喂狗),則watchdog觸發(fā)ResetSignal,系統(tǒng)重起?;贏RM的嵌入式系統(tǒng)接口技術(shù)精品資料8.5.1看門狗定時(shí)器的原理(yuánlǐ)預(yù)分頻器的值和頻率分解(fēnjiě)因子可由看門狗定時(shí)器的控制寄存器(WTCON)進(jìn)行編程設(shè)定。預(yù)分頻器值的可選范圍是:0~28-1。頻率分割因子可選擇的值為16,32,64,128。使用下面公式來(lái)計(jì)算看門狗定時(shí)器的計(jì)數(shù)時(shí)鐘周期: 計(jì)數(shù)時(shí)鐘周期 =1/(PCLK/(預(yù)分頻器值+1)/分割因子)看門狗的定時(shí)周期 T=WTCNT*計(jì)數(shù)時(shí)鐘周期#defineFCLK202800000#defineHCLK(FCLK/2)#definePCLK(FCLK/4)#defineUCLKPCLK基于ARM的嵌入式系統(tǒng)接口技術(shù)精品資料8.5.1看門狗定時(shí)器的原理(yuánlǐ)一旦看門狗定時(shí)器被啟動(dòng)工作,看門狗定時(shí)器中的計(jì)數(shù)常數(shù)寄存器(WTDAT)就無(wú)法自動(dòng)的重載到計(jì)數(shù)寄存器(WTCNT)中。因此,應(yīng)該在看門狗定時(shí)器啟動(dòng)工作之前(zhīqián),通過(guò)初始化編程使計(jì)數(shù)常數(shù)寫入計(jì)數(shù)寄存器(WTCNT)中。voidwatchdog_init(){ rWTCNT=8448*2; /*設(shè)置看門狗初始值*/ rWTCON=WDT_ENABLE|WDT_RST_ENABLE|WDT_CLK_SEL|WDT_PRE_SCALER; /*打開(kāi)看門狗*/}基于ARM的嵌入式系統(tǒng)接口技術(shù)精品資料五基礎(chǔ)知識(shí)8.5.2看門狗定時(shí)器的基本操作與看門狗定時(shí)器相關(guān)的有如下三個(gè)寄存器??撮T狗控制寄存器(WTCON)??撮T狗數(shù)據(jù)(shùjù)寄存器(WTDAT)??撮T狗計(jì)數(shù)寄存器(WTCNT)?;?jīyú)ARM的嵌入式系統(tǒng)接口技術(shù)精品資料五基礎(chǔ)知識(shí)8.5.2看門狗定時(shí)器的基本操作使用看門狗定時(shí)器時(shí),需要進(jìn)行以下三個(gè)基本操作步驟的設(shè)置。(1)給減1計(jì)數(shù)器WTCNT一個(gè)(yīɡè)值,用來(lái)設(shè)置定時(shí)的時(shí)鐘周期個(gè)數(shù),通過(guò)這個(gè)值計(jì)算出來(lái)的定時(shí)長(zhǎng)度應(yīng)該大于程序運(yùn)行的周期。(2)設(shè)置計(jì)數(shù)脈沖值,即設(shè)置預(yù)分頻器值及分割器因子值;設(shè)置計(jì)數(shù)器溢出時(shí)的動(dòng)作。(3)啟動(dòng)看門狗定時(shí)器?;?jīyú)ARM的嵌入式系統(tǒng)接口技術(shù)精品資料1.看門狗控制(kòngzhì)寄存器(WTCON)符號(hào)位描述初始狀態(tài)PrescalerValue[15:8]預(yù)分頻值,有效范圍為:0到(28-1)0x80Reserved[7:6]保留,必須為0000WatchdogTimer[5]看門狗定時(shí)器使能/禁止0:禁止看門狗定時(shí)器1:使能看門狗定時(shí)器1ClockSelect[4:3]決定時(shí)鐘分頻因子(分割器因子)

00:1/1601:1/3210:1/6411:1/12800InterruptGeneration[2]中斷使能/禁止0:禁止產(chǎn)生中斷1:使能產(chǎn)生中斷0Reserved[1]保留,必須為00ResetEnable/Disable[0]看門狗定時(shí)器輸出引發(fā)復(fù)位信號(hào)的使能/禁止位0:禁止看門狗定時(shí)器的復(fù)位功能1:看門狗定時(shí)器超時(shí)后引發(fā)復(fù)位信號(hào)1基于(jīyú)ARM的嵌入式系統(tǒng)接口技術(shù)精品資料五基礎(chǔ)知識(shí)8.5.2看門狗定時(shí)器的基本操作設(shè)置計(jì)數(shù)脈沖也就是設(shè)置預(yù)分頻值和分割器因子值。預(yù)分頻器的值和頻率(pínlǜ)分割器因子可由看門狗定時(shí)器的控制寄存器(WTCON)進(jìn)行編程設(shè)定:控制寄存器(WTCON)的bit[15:8]共8位二進(jìn)制數(shù)決定預(yù)分頻器的分頻值,因此預(yù)分頻器值的可選范圍是0~28-1;控制寄存器(WTCON)的bit[4:3]2位決定頻率(pínlǜ)分割因子的值,可選擇的值為16,32,64,128?;?jīyú)ARM的嵌入式系統(tǒng)接口技術(shù)精品資料五基礎(chǔ)知識(shí)8.5.2看門狗定時(shí)器的基本操作控制寄存器還可以設(shè)置定時(shí)器溢出時(shí)產(chǎn)生什么動(dòng)作,由控制寄存器(WTCON)的bit[2]設(shè)定是否產(chǎn)生中斷信號(hào),bit[0]設(shè)定是否產(chǎn)生復(fù)位信號(hào)。最后設(shè)置好上面(shàngmiɑn)幾位之后,把該寄存器的bit[5]置1則啟動(dòng)看門狗開(kāi)始工作?;?jīyú)ARM的嵌入式系統(tǒng)接口技術(shù)精品資料例要設(shè)置預(yù)分頻值為255,分割器因子選擇16,計(jì)數(shù)器溢出時(shí)產(chǎn)生復(fù)位信號(hào),不生產(chǎn)中斷信號(hào),同時(shí)啟動(dòng)看門狗,則設(shè)置語(yǔ)句:rWTCON=0x7F21;//[15:8]設(shè)為0x7f,[5]設(shè)為1,[4:3]設(shè)為00,[2]設(shè)為0,[0]設(shè)為1,其余位設(shè)為0使用下面(xiàmian)公式來(lái)計(jì)算看門狗定時(shí)器的計(jì)數(shù)時(shí)鐘周期(也就是一個(gè)脈沖的時(shí)間)。 計(jì)數(shù)時(shí)鐘周期(t_watchdog)=1/(PCLK/(預(yù)分頻器值+1)/分割因子)基于(jīyú)ARM的嵌入式系統(tǒng)接口技術(shù)精品資料2.計(jì)數(shù)器寄存器(WTCNT)計(jì)數(shù)器寄存器(WTCNT)中存放的是當(dāng)前的計(jì)數(shù)值,正常情況下用作減1計(jì)數(shù)器,每來(lái)一個(gè)計(jì)數(shù)時(shí)鐘脈沖,計(jì)數(shù)器的值減1。重載計(jì)數(shù)值即計(jì)數(shù)常數(shù)的計(jì)算:計(jì)數(shù)常數(shù)=所需時(shí)間間隔(jiàngé)/計(jì)數(shù)時(shí)鐘周期=所需時(shí)間間隔(jiàngé)*(PCLK/(預(yù)分頻器值+1)/分割因子)位描述初始狀態(tài)[15:0]看門狗定時(shí)器的重載計(jì)數(shù)值0x8000基于(jīyú)ARM的嵌入式系統(tǒng)接口技術(shù)精品資料2.計(jì)數(shù)器寄存器(WTCNT)設(shè)置計(jì)數(shù)器的初始值以及重置計(jì)數(shù)器值的語(yǔ)句如下。rWTCNT=d; //d表示計(jì)數(shù)常數(shù)(十進(jìn)制或十六進(jìn)制),由上面的公式(gōngshì)計(jì)算得到基于(jīyú)ARM的嵌入式系統(tǒng)接口技術(shù)精品資料3.數(shù)據(jù)(shùjù)寄存器(WTDAT)位描述初始狀態(tài)[15:0]看門狗定時(shí)器的當(dāng)前計(jì)數(shù)值0x8000數(shù)據(jù)(shùjù)寄存器(WTDAT)里存放的是看門狗定時(shí)器的計(jì)數(shù)常數(shù)值,即看門狗定時(shí)器的溢出時(shí)間間隔值。數(shù)據(jù)(shùjù)寄存器(WTDAT)是可讀/寫的,這個(gè)寄存器的功能很簡(jiǎn)單,就是保存計(jì)數(shù)常數(shù)值,這里存放的值始終不變,并不做減1的操作?;贏RM的嵌入式系統(tǒng)接口技術(shù)精品資料3.數(shù)據(jù)(shùjù)寄存器(WTDAT)位描述初始狀態(tài)[15:0]看門狗定時(shí)器的當(dāng)前計(jì)數(shù)值0x8000數(shù)據(jù)寄存器(WTDAT)里存放的是看門狗定時(shí)器的計(jì)數(shù)常數(shù)值,即看門狗定時(shí)器的溢出時(shí)間間隔值。數(shù)據(jù)寄存器(WTDAT)是可讀/寫的,這個(gè)寄存器的功能很簡(jiǎn)單(jiǎndān),就是保存計(jì)數(shù)常數(shù)值,這里存放的值始終不變,并不做減1的操作?;贏RM的嵌入式系統(tǒng)接口技術(shù)精品資料8.5.2看門狗定時(shí)器的基本操作下面通過(guò)一個(gè)例子,看看看門狗定時(shí)器是如何(rúhé)工作的。例:假設(shè)要監(jiān)測(cè)的系統(tǒng)程序的周期不大于40μs,系統(tǒng)時(shí)鐘頻率PCLK=50MHz,設(shè)計(jì)時(shí)假設(shè)取分割器因子為16,預(yù)分頻值為0,則可以得到計(jì)數(shù)時(shí)鐘周期如下。計(jì)數(shù)時(shí)鐘周期=1/(PCLK/(預(yù)分頻器值+1)/分割因子)=0.32μs即一個(gè)計(jì)數(shù)脈沖的時(shí)間是0.32μs,要產(chǎn)生一個(gè)大于40μs的時(shí)間間隔,則計(jì)數(shù)脈沖的個(gè)數(shù)即計(jì)數(shù)常數(shù)的計(jì)算公式如下。計(jì)數(shù)常數(shù)=所需時(shí)間間隔/計(jì)數(shù)時(shí)鐘周期=40/0.32=125(0x7d)基于(jīyú)ARM的嵌入式系統(tǒng)接口技術(shù)精品資料8.5.2看門狗定時(shí)器的基本操作voidmain()

{

init_system();

.

...

.....

enable_watchdog();

.

...

.....

while(1)

{

feed_dog();

}

}在實(shí)際(shíjì)應(yīng)用中,一般來(lái)說(shuō)feed_dog函數(shù)的調(diào)用是被安插在定時(shí)器的中斷服務(wù)例程中。定時(shí)器的timeout(不是watchdog的timeout)時(shí)間長(zhǎng)度必須合適,否則在定時(shí)器還沒(méi)來(lái)得及發(fā)生中斷調(diào)用feed_dog函數(shù)之前,watchdog已經(jīng)timeout了,將引起系統(tǒng)重起基于(jīyú)ARM的嵌入式系統(tǒng)接口技術(shù)精品資料例如(lìrú):監(jiān)測(cè)系統(tǒng)程序的周期不大于40μs,PCLK=50MHz。#definerWTCON(*(volatileunsigned*)0x53000000)#definerWTDAT(*(volatileunsigned*)0x53000004)#definerWTCNT(*(volatileunsigned*)0x53000008)voidwatchdog_init(){ rWTCNT=0x7d; rWTCON=0x21;}取分割因子為:16,預(yù)分頻值為:取0計(jì)數(shù)時(shí)鐘(shízhōng)周期=1/(PCLK/(預(yù)分頻器值+1)/分割因子)=0.32μs定時(shí)周期:T=計(jì)數(shù)值*計(jì)數(shù)時(shí)鐘(shízhōng)周期,T=40μs,因此計(jì)數(shù)值=T/計(jì)數(shù)時(shí)鐘(shízhōng)周期=40/0.32=125基于ARM的嵌入式系統(tǒng)接口技術(shù)精品資料匯編語(yǔ)言(huìbiānyǔyán)實(shí)現(xiàn)ldr

r0,=WTDAT

;WTDAT寄存器對(duì)應(yīng)的地址(dìzhǐ)賦給R0

ldr

r1,=0x7d

;計(jì)數(shù)器初始值

str

r1,[r0]

ldr

r0,=WTCON

;WTCON寄存器對(duì)應(yīng)的地址(dìzhǐ)賦給R0

ldr

r1,=0x0021

;使能看門狗及其復(fù)位功能,分割器值設(shè)為16

str

r1,[r0]

基于ARM的嵌入式系統(tǒng)接口技術(shù)精品資料8.6回到工作(gōngzuò)場(chǎng)景二精品資料2/4/2023工作(gōngzuò)過(guò)程一修改rtctest.c程序在8.4節(jié)所編寫的C程序基礎(chǔ)上,填加看門狗定時(shí)器的功能。在本程序中我們?cè)O(shè)置在時(shí)鐘節(jié)拍中斷里喂狗,每秒中斷一次,即每秒喂狗一次。①在主函數(shù)中加入看門狗定時(shí)器的初始化程序,初始化程序中設(shè)置WTCNT計(jì)數(shù)器的值,并設(shè)置看門狗控制寄存器,(這段程序加在Main()函數(shù)里面(lǐmiàn),在設(shè)置部分即可,只要不是在while(1)中)。voidMain(void){

……rWTCNT=0x0800; //此計(jì)數(shù)值根據(jù)程序執(zhí)行的時(shí)間調(diào)整rWTCON=0x7f21;

……}基于ARM的嵌入式系統(tǒng)接口技術(shù)精品資料工作(gōngzuò)過(guò)程一②時(shí)鐘節(jié)拍中斷的設(shè)置已經(jīng)在工作場(chǎng)景一中的程序中完成,在工作場(chǎng)景一中,通過(guò)時(shí)鐘節(jié)拍中斷使顯示的時(shí)間每秒鐘更新一次。在本場(chǎng)景中,時(shí)鐘節(jié)拍中斷除了完成上述(shàngshù)功能外,還要在時(shí)鐘節(jié)拍中斷的中斷處理函數(shù)中喂狗。時(shí)鐘節(jié)拍中斷的中斷處理函數(shù)內(nèi)容如下。voidrtctick_isr(void){Irq_Clear(IRQ_TICK); //清除TICK中斷flag++; //原來(lái)程序中的內(nèi)容rWTCNT=0x0800; //加入喂狗}基于ARM的嵌入式系統(tǒng)接口技術(shù)精品資料工作(gōngzuò)過(guò)程二重新編譯工程、下載并運(yùn)行重新編譯工程,并下載到實(shí)驗(yàn)箱上運(yùn)行,觀察程序的運(yùn)行情況,再把中斷處理函數(shù)中的喂狗部分(bùfen)注釋掉,再重新編譯工程,并下載到實(shí)驗(yàn)箱上運(yùn)行,觀察此時(shí)程序運(yùn)行的情況。結(jié)論:當(dāng)加入看門狗功能,并且每秒中喂狗一次時(shí),程序運(yùn)行和原來(lái)一樣;當(dāng)注釋掉喂狗的語(yǔ)句后,程序很快就會(huì)重新啟動(dòng)。基于ARM的嵌入式系統(tǒng)接口技術(shù)精品資料8.7Timer部件(bùjiàn)精品資料2/4/20238.7.1基礎(chǔ)知識(shí)Timer部件主要是用于提供定時(shí)功能、脈寬調(diào)制(PWM)功能的部件,它的應(yīng)用比較靈活,對(duì)于需要(xūyào)一定頻率的脈沖信號(hào)、一定時(shí)間間隔的定時(shí)信號(hào)的應(yīng)用場(chǎng)合,它都能提供應(yīng)用支持。s3c2410提供了5個(gè)16位的Timer(Timer0~Timer4),其中Timer0~Timer3支持PulseWidthModulation——PWM(脈寬調(diào)制)。Timer4是一個(gè)內(nèi)部定時(shí)器(internaltimer),沒(méi)有輸出引腳(outputpins)。定時(shí)器0有Dead-zone發(fā)生器,可以保證一對(duì)反向信號(hào)不會(huì)同時(shí)改變狀態(tài),常用于大電流設(shè)備中?;?jīyú)ARM的嵌入式系統(tǒng)接口技術(shù)精品資料8.7.1基礎(chǔ)知識(shí)脈寬調(diào)制(PWM)就是利用微處理器的數(shù)字輸出來(lái)對(duì)模擬電路進(jìn)行控制(kòngzhì)的一種非常有效的技術(shù)。廣泛應(yīng)用在從測(cè)量、通信到功率控制與變換的許多領(lǐng)域中,例如多相位電機(jī)控制、燈光(dēngguāng)亮度控制、DC-DC轉(zhuǎn)換器等場(chǎng)合。PWM從處理器到被控系統(tǒng)信號(hào)都是數(shù)字式的,無(wú)需進(jìn)行數(shù)模轉(zhuǎn)換。讓信號(hào)保持為數(shù)字形式可將噪聲影響降到最小。PWM控制器使得ARM具備了強(qiáng)大的矩形波輸出能力,可以十分方便地輸出不同頻率、不同占空比的矩形波?;贏RM的嵌入式系統(tǒng)接口技術(shù)精品資料8.7.1基礎(chǔ)知識(shí)PWM是一種對(duì)模擬信號(hào)電平進(jìn)行數(shù)字編碼的方法。通過(guò)高分辨率計(jì)數(shù)器的使用(shǐyòng),方波的占空比被調(diào)制用來(lái)對(duì)一個(gè)具體模擬信號(hào)的電平進(jìn)行編碼。PWM信號(hào)仍然(réngrán)是數(shù)字的,因?yàn)樵诮o定的任何時(shí)刻,滿幅值的直流供電要么完全有(ON),要么完全無(wú)(OFF)。電壓或電流源是以一種通(ON)或斷(OFF)的重復(fù)脈沖序列被加到模擬負(fù)載上去的。通的時(shí)候即是直流供電被加到負(fù)載上的時(shí)候,斷的時(shí)候即是供電被斷開(kāi)的時(shí)候。只要帶寬足夠,任何模擬值都可以使用PWM進(jìn)行編碼。基于ARM的嵌入式系統(tǒng)接口技術(shù)精品資料PWM信號(hào)(xìnhào)占空比為10%的PWM輸出(shūchū)0.9V的模擬信號(hào)供電電壓為9V占空比為50%的PWM輸出4.5V的模擬信號(hào)占空比為70%的PWM輸出6.3V的模擬信號(hào)基于ARM的嵌入式系統(tǒng)接口技術(shù)精品資料接通時(shí)間(shíjiān)、周期、占空比和調(diào)制頻率以上(yǐshàng)頁(yè)例子為例,接通時(shí)間為燈泡點(diǎn)亮?xí)r間周期為一次通斷的時(shí)間占空比是接通時(shí)間與周期之比調(diào)制頻率為周期的倒數(shù)。要想取得調(diào)光燈(保持點(diǎn)亮)的效果,必須提高調(diào)制頻率。通常調(diào)制頻率為1kHz到200kHz之間?;贏RM的嵌入式系統(tǒng)接口技術(shù)精品資料8.7.2Timer部件(bùjiàn)的基本原理Timer定時(shí)器的基本功能(gōngnéng)原理和通用定時(shí)/計(jì)數(shù)器的原理是相同的,如圖所示,圖中是S3C2410處理器中五個(gè)Timer中的一個(gè)Timer的功能(gōngnéng)原理圖,其他四個(gè)基本原理與此相同。基于ARM的嵌入式系統(tǒng)接口技術(shù)精品資料8.7.2Timer部件(bùjiàn)的基本原理PCLK是Timer的信號(hào)源,我們通過(guò)設(shè)置每個(gè)Timer相應(yīng)的Prescaler和ClockDivider把PCLK轉(zhuǎn)換成輸入時(shí)鐘信號(hào)傳送給各個(gè)Timer的邏輯控制單元(ControlLogic),事實(shí)上每個(gè)Timer都有一個(gè)稱為輸入時(shí)鐘頻率(TimerinputclockFrequency)的參數(shù),這個(gè)頻率就是通過(guò)PCLK,Prescaler和ClockDivider確定下來(lái)(xiàlái)的,每個(gè)Timer的邏輯控制單元就是以這個(gè)頻率在工作?;贏RM的嵌入式系統(tǒng)接口技術(shù)精品資料8.7.2Timer部件(bùjiàn)的基本原理輸入時(shí)鐘頻率的公式:

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

預(yù)分頻系數(shù)的范圍=0~255

分割器值的取值范圍=2,4,8,16

定時(shí)器在一個(gè)工作周期(Timerinputclockcycle)內(nèi)的具體工作內(nèi)容主要有3個(gè)。分別是:

1.對(duì)一個(gè)數(shù)值進(jìn)行遞減(dìjiǎn)操作

2.把遞減(dìjiǎn)后的數(shù)值和另一個(gè)數(shù)值進(jìn)行比較操作

3.產(chǎn)生中斷或執(zhí)行DMA操作基于ARM的嵌入式系統(tǒng)接口技術(shù)精品資料8.7.3S3C2410的Timer部件(bùjiàn)S3C2410提供了5個(gè)16位的定時(shí)器Timer(Timer0~Timer4)Timer0~Timer3支持PulseWidthModulation——PWM(脈寬調(diào)制)。Timer4是一個(gè)內(nèi)部定時(shí)器(internaltimer),沒(méi)有輸出引腳(outputpins)。定時(shí)器0有Dead-zone發(fā)生器,可以(kěyǐ)保證一對(duì)反向信號(hào)不會(huì)同時(shí)改變狀態(tài),常用于大電流設(shè)備中?;贏RM的嵌入式系統(tǒng)接口技術(shù)精品資料8.7.3S3C2410的Timer部件(bùjiàn)定時(shí)器0和定時(shí)器1使用相同的分頻器,但他們的計(jì)數(shù)器以及(yǐjí)控制器是各自獨(dú)立的,定時(shí)器2/3/4情況相同?;贏RM的嵌入式系統(tǒng)接口技術(shù)精品資料8.7.4Timer部件(bùjiàn)的基本操作S3C2410定時(shí)器有關(guān)(yǒuguān)的寄存器定時(shí)器配置寄存器定時(shí)器初值計(jì)數(shù)器以及比較計(jì)數(shù)器定時(shí)器控制寄存器計(jì)數(shù)觀察寄存器(TCNTOn)基于ARM的嵌入式系統(tǒng)接口技術(shù)精品資料8.7.4Timer部件(bùjiàn)的基本操作在啟用Timer之前我們會(huì)對(duì)Timer進(jìn)行一系列初始化操作,然后啟動(dòng)定時(shí)器工作。初始化定時(shí)器就是設(shè)置定時(shí)器的預(yù)分頻系數(shù)、設(shè)置分割器值、將初始值寫到TCNTB和TCMPB寄存器、設(shè)置定時(shí)器手動(dòng)更新位。下面我們通過(guò)一個(gè)簡(jiǎn)單的例子,利用Timer0做定時(shí)器,了解(liǎojiě)Timer部件的操作步驟。基于ARM的嵌入式系統(tǒng)接口技術(shù)精品資料1.初始化控制(kòngzhì)定時(shí)器的寄存器符號(hào)位描述初始狀態(tài)reserved[31:24]保留0x00Deadzonelength[23:16]確定死區(qū)長(zhǎng)度,死區(qū)長(zhǎng)度的1個(gè)單位等于Timer0的定時(shí)間隔。0x00Prescaler1[15:8]確定Timer2、Timer3、Timer4的預(yù)分頻器值0x00Prescaler0[0:7]確定Timer0、Timer1的預(yù)分頻器值。0x00(1)定時(shí)器配置寄存器0(TCFG0)設(shè)置預(yù)分頻(fēnpín)系數(shù)如要設(shè)置Timer0的預(yù)分頻(fēnpín)系數(shù)為119:rTCFG0=119; //TCFG0寄存器的位[7:0]確定Timer0、Timer1的預(yù)分頻器值基于ARM的嵌入式系統(tǒng)接口技術(shù)精品資料1.初始化控制(kòngzhì)定時(shí)器的寄存器符號(hào)位描述初始狀態(tài)reserved[31:24]保留DMAmode[23:20]選擇產(chǎn)生DMA請(qǐng)求的定時(shí)器。0000=不選擇(所有采用中斷請(qǐng)求)0001=Timer0

0010=Timer10011=Timer2

0100=Timer30101

溫馨提示

  • 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)論