中文字幕 另类精品,亚洲欧美一区二区蜜桃,日本在线精品视频免费,孩交精品乱子片免费

<sup id="3hn2b"></sup>

    1. <sub id="3hn2b"><ol id="3hn2b"></ol></sub><legend id="3hn2b"></legend>

      1. <xmp id="3hn2b"></xmp>

      2. 新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于AT91R40008微處理器的軟件定時器設(shè)計

        基于AT91R40008微處理器的軟件定時器設(shè)計

        作者:趙艷萍,粟秋碩 時間:2008-07-04 來源:電子元器件應(yīng)用 收藏

          0引言

        本文引用地址:http://www.antipu.com.cn/article/85288.htm

          當(dāng)前,系統(tǒng)的軟件代碼日趨復(fù)雜。然而,由于、定時器等硬件資源仍然相對有限。如何在不影響系統(tǒng)整體性能的情況下,為系統(tǒng)提供優(yōu)異的定時性能,使系統(tǒng)能夠高效運(yùn)行,已是一個值得關(guān)注的問題。

          1

          是一組定時器實(shí)體的集合,是一種針對不同定時服務(wù)進(jìn)行統(tǒng)一管理的多任務(wù)鏈表類型數(shù)據(jù)結(jié)構(gòu)。可使系統(tǒng)在某一確定時刻執(zhí)行指定操作。它以可編程定時/計數(shù)器或單穩(wěn)延時電路為基礎(chǔ)。利用硬件定時器產(chǎn)生的定時中斷來實(shí)現(xiàn)。雖然軟件定時器也需要占用CPU時間,但是相對于硬件定時器來說,它的資源多,定時時間長,使用靈活,實(shí)現(xiàn)起來簡單方便,因而在復(fù)雜系統(tǒng)或定時器工作方式比較復(fù)雜的應(yīng)用場合更能體現(xiàn)其價值。 對定時器的組織和管理常用的有多隊列式和單鏈表式。前者通過將定時器劃分成不同時長的隊列來減少每次參與計數(shù)的定時器個數(shù)。這種組織方式在空負(fù)載檢查時存在很多冗余操作,而真正有效的操作只占少部分。后者則通過將定時器采取先進(jìn)先出方式來組織定時器隊列,這種方式使用起來雖然比較簡單,但存在以下兩個問題:一是定時器隊列太長。找到所有到點(diǎn)定時器的時間開銷難以接受;二是在當(dāng)時鐘中斷發(fā)生時,需要對所有的定時器的時長域進(jìn)行減法操作,而這部分的時間性開銷很大。 本文采用的是單鏈表定時器隊列,但在定時器隊列組織方式上,根據(jù)各個定時器節(jié)點(diǎn)的定時值,對其按升序進(jìn)行排序,然后按照后一個定時器的值是前面所有定時器值加上本身值的規(guī)則對此節(jié)點(diǎn)重新賦定時值。以使所有的到點(diǎn)定時節(jié)點(diǎn)集中于隊列的前面。由于所有定時器節(jié)點(diǎn)的隱含值均遞減,故可形成一個相對時長定時隊列。這樣,在每次產(chǎn)生時鐘中斷時,只需修改第一個定時器節(jié)點(diǎn)的值即可,從而大大降低了時鐘中斷處理函數(shù)的工作量。當(dāng)需要添加新的定時器節(jié)點(diǎn)時,可在插入定時器進(jìn)入列表前,根據(jù)第一項來修改超時值。對于這樣的組織管理方式,由于第一個節(jié)點(diǎn)就是當(dāng)前定時器鏈表中定時時間最短的節(jié)點(diǎn),且對鏈表的到期操作只需要集中在第一個節(jié)點(diǎn)上,故能減少對定時器鏈表多余的冗余操作,也免去了查找定時節(jié)點(diǎn)的開銷。

          2 AT91R40008

          AT91R40008是美國ATMEL公司推出的一款基于ARM7TDMI的16/32位。該器件的定時器/計數(shù)器模塊含有三個完全相同的16位定時器/計數(shù)器通道。每個通道都能獨(dú)立編程來完成多種功能(如頻率測量、事件計數(shù)、時間間隔測量、脈沖產(chǎn)生、延遲和脈沖寬度調(diào)制等)。每個通道有三個外部時鐘輸入、5個內(nèi)部時鐘輸入和2個可由用戶配置的多功能I/O。此外,每個通道還可驅(qū)動一個內(nèi)部信號,以通過A-IC(先進(jìn)中斷控制器)產(chǎn)生處理器中斷。AT91R40008器件中的定時器/計數(shù)器模塊有兩個控制所有通道的全局寄存器。其中模塊控制器寄存器可以使三個通道由同一條指令同時啟動,而模塊模式寄存器則為每一個通道定義了外部時鐘輸入,并允許它們級聯(lián)。每一個定時器/計數(shù)器都可以獨(dú)立工作于兩種模式,分別是捕獲模式和波形模式。前者用于對信號的測量,后者則允許產(chǎn)生波形。通過TC通道模式寄存器的WAVE位可以控制定時器/計數(shù)器的工作模式。定時器的重新設(shè)定和啟動可由觸發(fā)條件決定。每個模式下通常有三種類型的內(nèi)部觸發(fā)和一個外部觸發(fā)。其內(nèi)部的三種觸發(fā)類型分別是:

          (1)軟件觸發(fā)

          每個通道有一個軟件觸發(fā),可通過設(shè)定TC通道控制寄存器的SWTRG來得到。

          (2)SYNC觸發(fā)

          每個通道有一個同步觸發(fā)。該信號被響應(yīng)和同一個軟件的一般效果觸發(fā)相同。所有通道的同步信號均可通過設(shè)定TC模塊控制寄存器的SYNC來同時響應(yīng)。

          (3)RC比較觸發(fā)

          如果CPCTRG在TC通道模式寄存器被置位,那么,RC將在每個通道中執(zhí)行,此時如果計數(shù)器與RC寄存器中的數(shù)值相匹配,則將得到一個RC比較觸發(fā)。

          事實(shí)上,定時器通道也能配置成一個外部觸發(fā)器。在捕獲模式中,外部觸發(fā)器信號能在TIOA和TIOB之間被選擇而執(zhí)行一個觸發(fā)。而在波形模式中,外部事件則可通過TIOB、XC0、XC1或XC2編程來執(zhí)行一個觸發(fā)。如果產(chǎn)生一個外部觸發(fā),那么,脈沖周期必須比系統(tǒng)時鐘周期更長才能保證該觸發(fā)被檢測到。

          3軟件定時器的實(shí)現(xiàn)

          由于AT91R40008中的三個定時器/計數(shù)器都是16位,所以每個計數(shù)器的值只能從0x0000增加到0xFFFF,在溢出中斷以后,這個值將重新從0x0000開始。該特性限制了定時器/計數(shù)器單次最長的定時時間。為此,本文采用改進(jìn)的單鏈表方式組織定時器鏈表,這樣,在定時器中斷上,硬件定時器不再周期性地產(chǎn)生中斷請求,而只在用戶預(yù)先指定的時刻產(chǎn)生,同時將下一次中斷發(fā)生時間動態(tài)寫入硬件定時器。

          軟件定時器的實(shí)現(xiàn)可通過各種函數(shù)來實(shí)現(xiàn),主要有定時器驅(qū)動函數(shù)、定時器的初始化函數(shù)、定時器任務(wù)函數(shù)、定時器的啟動和關(guān)閉函數(shù)、定時器的添加和刪除函數(shù)以及定時器中斷處理函數(shù)等。

          3.1定時器的驅(qū)動

          軟件定時器可通過一個16位定時器/計數(shù)器來提供定時中斷,然后關(guān)閉定時器/計數(shù)器相應(yīng)的中斷并設(shè)置相關(guān)參數(shù),然后打開相應(yīng)的中斷來完成。定時器驅(qū)動流程圖如圖1所示。

          3.2定時器初始化

          定時器初始化函數(shù)主要是初始化定時器單鏈表,給定時器單鏈表分配一塊內(nèi)存單元;該函數(shù)將設(shè)置一個頭結(jié)點(diǎn),這個頭結(jié)點(diǎn)包含定有時器鏈表中定時器單元個數(shù)、定時器單元句柄以及指向單鏈表隊列的頭指針。然后創(chuàng)建一個定時器任務(wù),以作為定時器到期時的執(zhí)行函數(shù)。

          3.3定時器的啟動和關(guān)閉

          定時器啟動函數(shù)可通過設(shè)置定時器寄存器TC_RC(TC寄存器)和TC_CCR(TC通道控制寄存器)來實(shí)現(xiàn),而定時器關(guān)閉函數(shù)則可通過TC_CCR(TC通道控制寄存器)和TC_SR(TC狀態(tài)寄存器)來執(zhí)行。

          3.4定時器的添加和刪除

          在定時器添加函數(shù)中,需要判斷新加的定時器所要插入的位置。插入時,如果鏈表為空,則直接插入第一個節(jié)點(diǎn)位置;否則,需要將新加的定時器值與鏈表中其余元素做一個比較,以找到新加的定時器在鏈表中的合適位置,同時相應(yīng)修改自身的定時值。其示意性代碼如下:

          3.5定時器中斷處理

          在定時器中斷處理函數(shù)中,首先要求得逝去的定時器ticks值。然后將這個值與定時器隊列的第一個定時器節(jié)點(diǎn)做比較,以判斷第一個定時器節(jié)點(diǎn)是否定時時間到。這個函數(shù)的示意性代碼如下:

          3.6定時器任務(wù)

          在定時器任務(wù)中設(shè)置有一個無限循環(huán)等待,可創(chuàng)建一個定時器等待消息隊列,以等待定時消息的到來。定時器消息到時,即執(zhí)行這個定時消息所對應(yīng)的任務(wù),同時釋放該函數(shù)定時器所占用的定時器單元節(jié)點(diǎn),然后開始下一輪循環(huán)。

          4軟件定時器應(yīng)用實(shí)例

          為了檢驗(yàn)上述算法的可行性和可靠性,筆者采用RC比較觸發(fā)方式來對定時器報文進(jìn)行了設(shè)計。其中時鐘信號選擇為MCK/1024,即MCK為50MHz,ticks為62500,也就是每1.28s產(chǎn)生一次定時器中斷,設(shè)置定時時間為5s。運(yùn)行該應(yīng)用程序后,用Sniffer抓包軟件抓獲的報文如圖2所示。

          由圖2可以看出,取平均值后,定時器任務(wù)間隔時間約為5.000 207s,完全可以達(dá)到設(shè)計要求,滿足設(shè)計需要。

          5 結(jié)束語

          本文介紹了一種在AT91微處理器上通過單鏈表實(shí)現(xiàn)的軟件定時器的設(shè)計方法。雖然創(chuàng)建時,該定時器的到期時間是亂序的,但啟動后的定時器則會嚴(yán)格按照到期時間的先后順序形成定時器單鏈表,并依次進(jìn)入定時中斷同時發(fā)出對應(yīng)消息。經(jīng)過測試。利用此定時器隊列管理機(jī)制,能夠簡單有效地滿足系統(tǒng)對定時器的需求,同時節(jié)省了嵌入式系統(tǒng)定時管理所需要的計算資源。

        linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

        存儲器相關(guān)文章:存儲器原理




        評論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉