飛思卡爾MC9S12G系列內部看門狗

最近幾天在研究飛思卡爾watchdog的問題,發現網上沒有很詳細的資料,就想把自己知道的東西記錄一下,防止自己忘記,也供別人參考。

  1. 什麼是watchdog?
    watchdog就是一個計數器,這個計數器有一個限值,開啓watchdog功能後,當計數器從0自增到該限值或從該限值自減到0,就認爲此計數器超時了(稱爲計時器溢出),這時就產生一個復位信號,重啓系統。
    從watchdog的含義來看,其應該包含兩個條件:1)一個自增或自減的計數器;2)爲防止計數器溢出,將計數器重置的操作(稱爲餵狗)。
  2. 飛思卡爾MC9S12G的watchdog
    和MC9S12G watchdog相關的寄存器主要包括CPMUCLKS、CPMUCOP和CPMUARMCOP這三個。
    1)CPMUCLKS寄存器涉及到時鐘的選擇;這和watchdog的超時時間相關;
    2)CPMUCOP寄存器當然是watchdog相關的寄存器了;
    3)CPMUARMCOP寄存器主要和餵狗操作相關。在圖1 這裏插入圖片描述
    圖1 watchDog的時鐘源
    如圖1所示,不同寄存器取值對應不同的時鐘源,不同時鐘源的主頻不一樣,計算watchdog超時時間就不一樣,要計算watchdog超時時間,首先根據這個表格確定其時鐘源。這些參數取值都在寄存器CPMUCLKS中;
    在這裏插入圖片描述
    圖2 CPMUCOP寄存器
    1)WCOP決定了watchdog的工作模式,0是正常工作模式,1是窗口工作模式;這兩種模式的區別是正常工作模式內,在計時器超時之前重置計時器就可以;但在窗口工作模式,必須要某個特定時間段內重置計時器,否則就會導致立即reset。
    2)RSBCK決定了watchdog在調試環境下是否還有效,0表示有效,在調試時仍然運行(這就會導致調試出錯,因爲watchdog在不停的重啓系統),1表示無效,在調試時watchdog不工作;
    3)CR[2:0]記錄的是看門狗的時鐘分頻,其值和所選的時鐘頻率相關,具體取值見下圖:
    在這裏插入圖片描述
    在這裏插入圖片描述
    圖3 COP的時鐘分頻
    CPMUARMCOP寄存器主要是和餵狗操作相關,通過先將該寄存器值賦爲0x55,再賦值爲0xAA,便實現了計數器的重置操作。
  3. 飛思卡爾MC9S12G watchdog超時時間的計算方法
    超時時間的計算公式如下:
    fwdt = fwdtclc/CR[2:0]
    舉例:
    實際clcok配置如下:
    在這裏插入圖片描述
    例一:
    在這裏插入圖片描述
    PCE=0,COPOSCSEL0 = 1,對應圖1,滿足條件的兩項對應的Clock Source都是OSCCLK,即爲晶振時鐘,對應clock frequence爲16.0MHz;CR[2:0]取值爲100,對應值爲2^20,則fwdt = 16Mhz/1024/1024 = 16*1000000/1024/1024=15.2587hz;對應的超時時間爲T=1/fwdt = 1000ms/15.2587 = 65.536ms;
    例二:
    在這裏插入圖片描述
    PCE=0,COPOSCSEL1 = 1,對應圖1,得到其時鐘爲ACLK,其頻率固定爲10KHz,CR[2:0]爲010,對應分頻值爲2^9=512,那麼fwdt=10Khz/512=10000hz/512=19.53hz,對應的超時時間爲T = 1/fwdt=1000ms/19.53=51.2ms
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章