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

MCF52259 PIT 定時器中斷配置完整指南

     編輯:C++ 入門

背景

在 CodeWarrior 建立 MCF52259 專案後,系統會生成 exceptions.c,其中包含**中斷向量表**(共 256 條目)。前 64 個保留給處理器復位與異常,64~255 供用戶配置。中斷分 7 級優先級(7 最高,1 最低)。

中斷配置三步驟

  1. 使能相應中斷源
  2. 配置中斷優先級與級別
  3. 將中斷服務程式(ISR)加入向量表

PIT 定時周期公式

Timeout = 2^PRE * (PMR + 1) / (fsys / 2)

  • PRE:預分頻器(PCSR[PRE])
  • PMR:模數計數器值
  • fsys:系統頻率

範例:配置 1ms 中斷(系統頻率 128 MHz)

/***********************************************
 * 配置 1ms 中斷 系統頻率 128MHz
 * ((2^2) * 16000) / (128000000/2) = 0.001s
 ***********************************************/
void PIT_Init(void) {
    // 1. 設定 PIT0 控制/狀態暨模數寄存器
    MCF_PIT_PCSR(0) = MCF_PIT_PCSR_PRE(2)      // PRE = 2 (分頻 4)
                    | MCF_PIT_PCSR_PIE         // 啟用中斷
                    | MCF_PIT_PCSR_RLD         // 重新載入模式
                    | MCF_PIT_PCSR_OVW         // 允許覆寫
                    | MCF_PIT_PCSR_PIF;        // 清除中斷旗標
    MCF_PIT_PMR(0) = (uint16)(16000 - 1);      // 模數值

    // 2. 向量表索引 = 中斷源號 + 64
    // PIT0 中斷源號 = 55 → 向量表位置 119
    // 修改 exceptions.c 中的向量表:
    // asm_exception_handler, /* 117 */
    // asm_exception_handler, /* 118 */
    // PIT0_handler,          /* 119 PIT0 ISR */
    // asm_exception_handler, /* 120 */
    // asm_exception_handler, /* 121 */

    // 3. 使能中斷控制器
    MCF_INTC0_IMRL &= ~MCF_INTC_IMRL_MASKALL;  // 先全關
    MCF_INTC0_IMRH &= ~MCF_INTC_IMRH_INT_MASK55; // 使能源 55

    // 4. 設定優先級 6、級別 2
    MCF_INTC0_ICR55 = MCF_INTC_ICR_IP(6) + MCF_INTC_ICR_IL(2);

    // 5. 啟動 PIT0
    MCF_PIT_PCSR(0) |= MCF_PIT_PCSR_EN;
}

關鍵點解析

步驟說明
向量表位置用戶中斷源號 + 64。PIT0 源號 55 → 索引 119。
IMR 暫存器IMRL 控制 0~63,IMRH 控制 64~127。寫 0 使能,寫 1 屏蔽。
ICR 暫存器每個中斷源一個 ICRn,設定 IP(優先級 1~7)與 IL(級別 0~7)。
ISR 命名須與向量表中的函數名一致(如 PIT0_handler)。

常見坑點

  • 忘記在 exceptions.c 修改向量表,導致 ISR 不被呼叫。
  • PRE、PMR 計算錯誤,中斷頻率不準。
  • 優先級/級別設定衝突,造成中斷嵌套異常。
  • 未清除 PIF 旗標,進入 ISR 後立即再次觸發。

總結

MCF52259 中斷配置核心在於:**算對時序參數、改對向量表索引、設對 ICR 優先級、開對 IMR 使能位**。按步驟操作,配合 datasheet 查閱暫存器定義,即可穩定實現精確定時中斷。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved