程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> ARM7周期性間隔定時器簡介及實現(C語言)

ARM7周期性間隔定時器簡介及實現(C語言)

編輯:關於C語言

在嵌入式開發中,時常會遇到延時函數的調用,比如在協議的制定時需考慮到各個節點之間的數據交互沖突情況。對於51系列單片機由於每條指令執行所耗費的時間可知,因此精確延時較為容易實現。在ARM7系列的處理器中由於指令的執行采用流水線技術,加上應用層程序的編寫方面編譯器所解析的機器周期未知,因此難以實現精確延時。一般應用中往往使用定時器解決此類問題。ARM7處理器中除定時器模塊之外,還有周期性間隔定時器模塊。周期性間隔定時器一般為操作系統的調度程序提供時間間隔中斷,PIT的設計提供了程序時間管理上的精確度。圖示為周期性間隔定時器的方框圖。 PIT有一個可編程的溢出計數器,它具有溢出後自動復位的特性。PIT基於兩個計數器:一個20位的CPIV計數器及一個12位的PICNT計數器。兩個計數器的時鐘都是主時鐘的1/16。通過PIT_MR模式寄存器的PITIEN位設置中斷使能後,CPIV計數器從0開始計數,一直到模式寄存器PIT_MR的PIV域所定義的溢出數值為止。CPIV計數器溢出後立即復位為0,同時PICNT寄存器累加,狀態寄存器PIT_SR的PITS被置位從而觸發中斷。 通過讀取周期性間隔數值寄存器PIT_PIVR獲得CPIV和PICNT的數值後,溢出計數器(PICNT)復位,PITS清零,從而確認中斷。繼而使得周期性間隔定時器中斷模式繼續進行。周期性間隔定時器的使能與關閉通過寄存器PIT_MR的PITEN位實現。注意,只有在CPIV為0時對PITEN的操作才有效。 以下為使用周期性間隔定時器模塊產生定時中斷函數。 [html]  www.2cto.com void ClockHandler(void)  __irq   {        Display_Received++;       *AT91C_AIC_EOICR = *AT91C_PITC_PIVR;         //Acknowledge Interrupt      void PIT_Init(void)   {       *AT91C_PITC_PIMR = AT91C_PITC_PITIEN | AT91C_PITC_PITEN | 784741;<span style="white-space:pre"> </span>//PIT使能及定時周期配置        AT91F_AIC_ConfigureIt(AT91C_BASE_AIC,AT91C_ID_SYS,1,AT91C_AIC_SRCTYPE_INT_POSITIVE_EDGE,(void (*)())ClockHandler);//中斷觸發方式及函數入口地址        AT91F_AIC_EnableIt(AT91C_BASE_AIC, AT91C_ID_SYS);   //Enable Interrupt   }    

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved