AT91RM9200平台的輔助時鐘研究

來源:互聯網
上載者:User
AT91RM9200平台的輔助時鐘研究
[日期:2008-11-20] 來源:單片機與嵌入式系統應用  作者:蘭州交通大學 白麗 任恩恩 [字型: ]

 

引 言
    在VxWorlks中,定時器機制的實現是建立在時鐘基礎之上的。可根據不同的要求選用不同的定時機制,如taskDelay()、WatchDog、輔助時鐘。前兩種定時都是基於系統時鐘的。
    taskDelay()是最簡單的延時方法。它的單位是tick,所以其延時精度並不高,但對於延時10 ms以上的系統足夠了。利用taskDelay(),可以將調用的任務從就緒態轉到睡眠態,但是不能用於中斷服務程式中。另外,可以通過調用taskDelay(0),將CPU交給系統中其他相同優先順序的任務。
    看門狗定時器作為系統時鐘中斷服務程式的一部分來維護。因此,與看門狗定時器相聯絡的函數運行在系統時鐘中斷級,延時單位為tick。如果應用程式需要多個看門狗函數,則可使用wdCreate()為每個需求產生獨立的看門狗ID,因為對於給定的看門狗ID,只有最近的wdStart()有效。利用看門狗定時器,調用的任務不會被阻塞,因為wdStart()調用是立即返回的。但它也一般只適用於延時10ms以上的系統。
    如果在實際時需要更高精度的定時(如1 ms),那麼採用輔助時鐘就是非常可取的一種方法。一般在VxWorks系統的BSP中,都沒有配置輔助時鐘,本文詳細介紹輔助時鐘的配置及使用方法,以便在實際中靈活運用。

1 AT91RM9200工業平台的時鐘和定時器
    本文的研究是基於AT91RM9200工業平台的,因此首先需要對此平台下的時鐘及定時器進行介紹。
    AT91RM9200提供了2個3通道16位定時器/計數器(TC)。3個通道雖然獨立,但操作相同,每個通道均為使用者可配置,包括3個外部時鐘輸入(XC0、XCl或XC2),5個內部時鐘輸入(TIMER_CLOCKl、TIMER_CLOCK2、TIMER CLOCK3、TIMER_CL0CK4、TIMER_CLOCK5),以及2個可由使用者配置的多功能輸入/輸出訊號。另外,每個通道可工作在兩種不同模式下,即捕獲模式和波形模式。其中,捕獲模式提供訊號測量,波形模式用來產生波形,可由TC通道模式寄存器的WAVE位編程設定。定時器/計數器框圖1所示。

    其中,如果選擇通道訊號時,XCO、XCl、XC2表示3個外部時鐘輸入;TIOA、TIOB表示作用於每個通道的2個多功能輸入/輸出訊號;INT表示中斷訊號輸出;SYNC表示同步輸入訊號。如果選擇塊訊號時,TCLKO、TCLKl、TCLK2表示3個外部時鐘輸入;TIOAO~TIOA2,表示通道0~2的TIOA訊號,TIOB0~TIOB2表示通道0~2的TI0B訊號。
    其中,5個內部時鐘輸入與主時鐘(MCK)、慢速時鐘(SLCK)及主時鐘分頻後時鐘相關,如表1所列。

2 在VxWorks中輔助時鐘的配置
   
在VxWorks作業系統中如果要使用輔助時鐘,必須經過一定的配置才能使用。首先,需要在Vxworks組件或config.h中進行定義:
    #define INCLUDE_AUX_CLK
    如果不定義,那麼輔助時鐘是無法使用的。另外,在sysLib.C的sysHwlnit2函數中需要進行輔助時鐘的初始化,即中斷串連配置:
(void)intConnect(AUX_TIMER_INT_VEC,sysAuxClkInt,O)
    輔助時鐘和系統時鐘的區別是:輔助時鐘必須由使用者提供ISR,但不允許在ISR中調用tickAnnounce(),否則會擾亂系統時鐘的機制。
    輔助時鐘的配置可以按照installDir/target/drv/tim—er/templateTimer.C中的函數模板來進行修改,在本文中使用的驅動程式是At91Rm9200timer.c,標頭檔為At91Rm9200timer.h。在此檔案中進行的修改需要根據所依賴的具體晶片來進行,即需要參考AT91RM9200晶片資料手冊。
    與輔助時鐘相關的函數有:sysAuxClkInt()、sysAux—ClkConnect()、sysAuxClkDisable()、sysAuxClkEnable()、sysAuxClkRateGet()和sysAuxClkRateSet()。其中,sysAuxClkRateGet()可以和sysAuxClkRateSet()視為一組。sysAuxClkRateGet()是通過sysAuxClkRateSet()函數設定的時鐘頻率進行讀取的,而sysAuxClkRateSet()函數中時鐘頻率的設定則受AUX_CLK_RATE_MIN和AUX_CLK_RATE_MAX的限制。這個最大值和最小值需要進行定義,定義的位置可能不同,有的放在eonfig.h中,有的放在bsp.h中,本文的最大值和最小值放在Inte—grator.h中定義。接下來需要重點討論的是sysAux-ClkInt()和sysAuxClkEnabel()這兩個函數。
    sysAuxClkInt()函數調用使用者定義的中斷處理函數,而使用者調用的中斷處理函數是由sysAuxClkConnect()函數來串連的。在調用中斷處理函數之前,一定要先進行清除中斷操作,如:
AMBA_TIMER_READ(AMBA_TIMER_T2SR(AMBA_TIMER_BASE),temp);
    不然,CPU將一直陷入中斷,不能做別的事情了。
    其他大量的工作都是放在sysAuxClkEnble()函數中進行的。根據AT91RM9200的具體情況,選擇5個內部時鐘的其中之一,在此選擇TIMER_CLOCK2;根據前面所提到的通道概念,選取第2個通道。必須和系統時鐘區分開,不能同時選擇一個內部時鐘和同一個通道。
    首先,需要判斷電源管理對輔助時鐘是否進行了配置,可以查看相關檔案。如果沒有進行配置,則需要如進行如下配置:
    AT9l_SYS→PMC_PCER=l<<AT9lC_ID_TCl;
    其次,必須先對AIC編程,再配置TC。
    然後,需要對具體的寄存器進行控制操作,首先需要選擇內部時鐘,2所示。

    對通道模式寄存器進行控制:
    AMBA_TIMER_WRITE(AMBA_TIMER_T2MR(AMBA_TIMER_BASE),TIMER_CLOCK2| TC_CPCTRG);
    通過TCCLKS位選擇第2個內部時鐘,並根據寫入RC寄存器的定時器值進行RC比較觸發使能。同時,需要對TC通道控制寄存器進行控制,寫入計數器時鐘使能命令和軟體觸發命令,如:

AMBA_TIMER_WRITE(AMBA_TIMER_T2CR(AMBA_TIMER_BASE),TC_CLKEN);
AMBA_TIMER_WRITE(AMBA_TIMER_T2CR(AMBA_TIMER_BASE),TC_SWTRG);
    另外,由於採用RC寄存器觸發使能,因此還需要對TC中斷使能寄存器進行控制,寫入RC比較中斷使能訊號,如:
AMBA_TIMER_WRITE(AMBA_TIMER_T2IER(AMBA_TIMER_BASE),TC_CPCS);

    最後,需要執行中斷使能操作,如:
AMBA_TIMER_INT_ENABLE(AUX_TIMER_INT_LVL);
    一切配置好後,重新編譯bootroFll和VxWorks鏡像,啟動VxWorks鏡像;然後編寫測試程式進行測試,驗證輔助時鐘是否配置成功。另外,可以通過邏輯分析儀查看輔助時鐘的中斷情況。輔助時鐘驅動後,在應用程式中可以用sysAuxClkRateSet()函數動態設定系統輔助時鐘每秒的中斷數;sysAuxClkConnect()函數為系統輔助時鐘中斷指定ISR,並且由sysAuxClkEnable()函數使能時鐘中斷,去調用指定的ISR。

結 語
    VxWorks提供系統輔助時鐘機制的主要目的,是使使用者在系統時鐘之外多一種定時資源選擇,並提供了管理手段。另外,VxWorks的某些輔助調試工具也可能要求使用系統輔助時鐘。
    輔助時鐘的使用是通過提高節拍率來實現的,而提高節拍率意味著時鐘中斷產生得更加頻繁,所以中斷處理常式也會更頻繁地執行。如此一來會給整個系統帶來如下好處:
    ①更高的時鐘中斷解析度(resolution)可提高時間驅動事件的解析度;
    ②提高了時間驅動事件的準確度(accuracy)。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.