<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

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

基于A(yíng)T91R40008微處理器的軟件定時(shí)器設計

作者:趙艷萍,粟秋碩 時(shí)間:2008-07-04 來(lái)源:電子元器件應用 收藏

  0引言

本文引用地址:http://dyxdggzs.com/article/85288.htm

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

  1

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

  2 AT91R40008

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

  (1)軟件觸發(fā)

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

  (2)SYNC觸發(fā)

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

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

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

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

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

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

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

  3.1定時(shí)器的驅動(dòng)

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

  3.2定時(shí)器初始化

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

  3.3定時(shí)器的啟動(dòng)和關(guān)閉

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

  3.4定時(shí)器的添加和刪除

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

  3.5定時(shí)器中斷處理

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

  3.6定時(shí)器任務(wù)

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

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

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

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

  5 結束語(yǔ)

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

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)

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




評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>