watchdog 的執行基於 1 個 32bit 減法計數器,計數初值由暫存器 wdg_load 載入。 在 watchdog 時鐘使能情況下,計數值在每個計數時鐘的上公升沿減 1。當計數值遞減到 0,watchdog 將產生乙個中斷。然後在下乙個計數時鐘上公升沿,計數器又從暫存器 wdg_load 中重新載入計數初值,開始遞減計數。
如果計數器的計數值第二次計數遞減到 0 時,cpu 還沒有清除 watchdog 中斷,則 watchdog 將發出復位訊號 wdg_rstn,計數器停止計數。所以 watchdog 的計數時間最大值為 1431s。
#ifndef __bbt_watchdog_h
#define __bbt_watchdog_h
#include
#include
#include
void
hi_watchdog_init
(void);
void
hi_feed_dog
(void);
inthi_dog_set_heartbeat
(int t)
;#endif
#define dog_unlock_data 0x1acce551
#define dog_base 0x20040000
#define wdg_load (dog_base + 0x0000)
#define wdg_value (dog_base + 0x0004)
#define wdg_control (dog_base + 0x0008)
#define wdg_intclr (dog_base + 0x000c)
#define wdg_ris (dog_base + 0x0010)
#define wdg_mis (dog_base + 0x0014)
#define wdg_lock (dog_base + 0x0c00)
#define sc_ctrl (0x20050000 + 0x0)
#define dog_clk (3*1000*1000)
//watchdog 計數時鐘為 3mhz
static
inline
void
hi_dog_set_timeout
(uint32_t nr)
;static
inline
void
hi_dog_feed
(void);
inthi_dog_set_heartbeat
(int t)
else
if( t>cnt )
cur_margin = t;
hi_dog_set_timeout
(t);
hi_dog_feed()
;return ret;
}static
void
hi_dog_start
(void
)static
inline
void
hi_dog_stop
(void
)#if 0
static
void
watchdog_deamon
(void
)//守護執行緒
}static
void
hi_watchdog_run
(void
)#endif
void
hi_watchdog_init
(void
)void
hi_feed_dog
(void
)
HI3518linux 搭建開發環境
hi3518linux的開發環境搭建在海思的官方文件裡說的也比較詳細,就是各個部分的說明比較分散。由此在這裡做乙個記錄 筆記。一 編譯u boot kernel rootfs 1.1 搭建編譯環境 安裝交叉編譯工具鏈 1.1.1 解壓海思demo壓縮檔案 在linux環境下 tar zxf hi35...
hi3518e開發環境搭建
4.3.更新mtd utils 5.編譯 5.2.清除 sudo apt update sudo apt upgrade y sudo apt install y bzip2 lib32z1 dev lib32stdc 6 lrzsz make u boot tools wget uuid dev ...
關於hi3518啟動後做了什麼
有一段時間沒有碰開發板,忘記了之前自己設定啟動的地方。一開機就要延時個5秒,然後掛載到虛擬機器上。現在要重新修改一下掛載的位址,但是忘記了在 找了 有印象修改的目錄都在 etc init.d 裡面 進去目錄底下只有這幾個檔案s00devss01udevs80networks90hibernaterc...