閱讀791 返回首頁    go 阿裏雲 go 技術社區[雲棲]


【轉載】DSP看門狗定時器

1 工作方式      
         在數字信號處理器的工作過程中有時會發生一些異常情況,這可能是在軟件執行時發生錯誤,如堆棧溢出、內存溢出等軟件編寫時沒有預料到的錯誤,也可能是DSP在運行時受到外界幹擾而使得程序運行不正常,在這些情況下將會發生不可預測的錯誤。為了防止出現這種情況,使用看門狗定時器是一種很好的解決方法。
        看門狗定時器實際上是一個定時器,該定時器需要處理器周期性的執行一些特定操作,當處理器運行正常時,這些操作會正常執行,而當出現異常時這些操作將被打斷,看門狗定時器計數會計到0而發生超時,這時定時器將輸出一個低脈衝,這個輸出可以觸發中斷或引起DSP複位(可以觸發不可屏蔽中斷或看門狗定時器中斷,如果看門狗定時器的輸出連接到硬件複位端將引起DSP複位)。
         看門狗定時器有一個16位計數器和一個16位預計數器,使得計數器動態範圍達到32位。複位狀態後,看門狗定時器是關閉的,且允許軟件在將其使能之前,對其進行配置。看門狗定時器正常工作後,當定時器計到0時,會觸發看門狗定時器中斷,並將WDFLAG位置1,之後計數器和預計數器將會被重新載入,而超時事件將會從看門狗定時器的輸出端輸出。看門狗定時器正常工作時會在計數狀態、服務狀態和超時狀態之間轉換,接著給出了看門狗定時器的狀態轉換過程。
        如果看門狗定時器被使能,不能通過軟件直接禁止,但可以通過看門狗超時事件或硬件複位禁止看門狗定時器。當軟件陷入死循環或發生軟件錯誤時,看門狗定時器會產生超時事件,強迫DSP進行異常處理。
       看門狗的時鍾是直接來自時鍾產生器,因此即使處理器處於休眠狀態中仍將繼續計數。
2 寄存器
          看門狗定時器主要有4個寄存器——即看門狗計數寄存器(WDTIM)、看門狗周期寄存器(WDPRD)、看門狗控製寄存器(WDTCR)和看門狗控製寄存器2(WDTCR2)。
        看門狗計數寄存器和看門狗周期寄存器都是16位寄存器,它們協同工作完成計數功能。
        看門狗周期寄存器WDPRD存放計數的初始值,當計數寄存器的值減到0後,將把周期寄存器中的數載入到計數寄存器中。當控製寄存器中的PSC位減到0之前或看門狗計數器被複位時,計數寄存器將進行減1計數。
3 配置看門狗定時器
   初始化和使能看門狗定時器的步驟:
   1.將主計數器周期PRD裝入看門狗周期寄存器WDPRD
   2.設置看門狗定時器控製寄存器WDTCR的模式bit(WDOUT,SOFT和FREE),以及TDDR裏的預定標控製值
   3.往看門狗定時器的控製寄存器2(WDTCR2)中的WDKEY寫入關鍵值5C6H,使看門狗定時器進入預激活狀態
   4.寫關鍵值A7EH到WDKEY中,置位WDEN,將預定標模式bit(PREMD)的值寫到WDTCR2中。這第二個值完成了關鍵值序列,表示一個實際的服務序列,WDEN = 1使能看門狗定時器,
3 看門狗定時器的應用
應用看門狗定時器的芯片支持函數首先要包含csl_wdtim.h頭文件,接下來定義看門狗定時器的配置結構:
WDTIM_Config MyConfig = {
0x0060, /* Counter */
0x1000, /* Period */
0x0000, /* Control */
0x1000 /* Secondary control */
};
配置看門狗定時器需要調用看門狗配置函數:
WDTIM_config(&MyConfig);
在配置好看門狗定時器後調用開始函數,該函數的作用是將看門狗定時器控製寄存器2的WDEN位置成1:
WDTIM_start();
在運行看門狗開始函數後,看門狗開始遞減計數,在計數器減到0之前需要周期性地向WDKEY字段寫入A5C5h和A7Eh,否則看門狗定時器將會發生超時事件從而觸發中斷或複位,該操作可以通過調用WDTIM_service()函數來完成。
WDTIM_service();

最後更新:2017-04-03 12:53:45

  上一篇:go jvm dcl 待補充
  下一篇:go 調度子係統2_核心調度器