首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

ARM7 周期性間隔定時器 (PIT) 驅動開發全解析

     編輯:關於C語言

硬體架構概覽

ARM7 核心(如 AT91SAM7 系列)內建 PIT,獨立於標準 Timer,專為操作系統調度提供精確時間基準。關鍵寄存器:

寄存器功能關鍵位域
PIT_MR (Mode)模式控制PITEN(使能)、PITIEN(中斷使能)、PIV[19:0](溢出值)
PIT_SR (Status)狀態標誌PITS(溢出標誌)
PIT_PIVR (Value)當前計數值CPIV[19:0]、PICNT[11:0]

工作原理

  1. 時鐘源:主時鐘 / 16
  2. CPIV 從 0 遞增至 PIV,溢出即歸零並觸發中斷(PITS=1)
  3. PICNT 累計溢出次數,讀取 PIVR 自動清零 PITS 和 PICNT
  4. 只有 CPIV=0 時修改 PITEN 有效

驅動代碼實現(AT91SAM7 為例)

void ClockHandler(void) __irq {
    Display_Received++;
    *AT91C_AIC_EOICR = *AT91C_PITC_PIVR;  // 確認中斷:讀 PIVR 清標誌
}

void PIT_Init(void) {
    /* 784741 對應特定頻率下的周期值,需根據主頻計算 */
    *AT91C_PITC_PIMR = AT91C_PITC_PITIEN | AT91C_PITC_PITEN | 784741;
    
    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);
}

工程注意事項

  • 中斷延遲:ISR 內僅做最小處理(讀 PIVR、置標誌),耗時操作拋給任務隊列
  • 頻率計算:PIV = (MCLK/16) / 目標頻率 - 1,驗證無溢出
  • 嵌套中斷:PIT 優先級通常設為系統級最高,防止調度抖動
  • 低功耗:睡眠模式下 PIT 可保持運行作為喚醒源
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved