這裡使用了adm706晶元,wdi餵狗引腳與cpugpio3相連。
wdo看門狗超時復位訊號輸出引腳,與/mr手動復位輸入相連,也就是會產生乙個reset訊號。
原理圖如下所示:
首先需要在include/configs/***.h檔案中,新增乙個巨集定義:
#defineconfig_hw_watchdog
啟動hw_watchdog功能。
因為在include/watchdog.h中有watchdog巨集定義如下:
#ifdefconfig_hw_watchdog
#if defined(__assembly__)
#define watchdog_reset blhw_watchdog_reset
#else
extern voidhw_watchdog_reset(void);
#define watchdog_resethw_watchdog_reset
#endif /* __assembly__ */
#else
/** maybe a software watchdog?
*/#if defined(config_watchdog)
#if defined(__assembly__)
#define watchdog_resetbl watchdog_reset
#else
extern voidwatchdog_reset(void);
#define watchdog_resetwatchdog_reset
#endif
#else
/** no hardware or softwarewatchdog.
*/#if defined(__assembly__)
#define watchdog_reset/**** do_not_del_this_comment*/
#else
#definewatchdog_reset() {}
#endif /* __assembly__ */
#endif /* config_watchdog &&!__assembly__ */
#endif/* config_hw_watchdog */
在定義了config_hw_watchdog巨集之後,系統就會使用hw_watchdog_reset()函式,二者個函式就定義在arch/powerpc/cpu/mpc85xx/cpu.c檔案中,這裡使用的是powerpc的p2020晶元,也就是mpc85xx系列晶元。
新增watchdog功能**實現如下:
#ifdefconfig_hw_watchdog
#definegpio_reg_base 0xffe0f000
#definegpio_reg_gpdir (gpio_reg_base + 0x00)
#definegpio_reg_gpodr (gpio_reg_base + 0x04)
#definegpio_reg_gpdat (gpio_reg_base + 0x08)
#definegpio_3_offset 0x10000000
void
watchdog_adm_reset(void)
void
hw_watchdog_reset(void)
#endif
uboot中基本是到處都使用了乙個watchdog_reset巨集,基本上每執行一段時間就會呼叫這個巨集來餵狗,這樣實現的乙個看門狗偽狗功能。
這個驅動很簡單,就是新增乙個定時器,每隔一段時間就餵狗一次。
**如下:
/** driver for gpio-controlled adm706 hardware watchdogs.**/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#definegpio_reg_base 0xffe0f000
#definegpio_reg_gpdir (gpio_mem + 0x00)
#definegpio_reg_gpodr (gpio_mem + 0x04)
#definegpio_reg_gpdat (gpio_mem + 0x08)
#definegpio_3_offset 0x10000000
staticvoid *gpio_mem;
void
watchdog_adm_reset(void)
staticstruct adm_wdt_device;
staticvoid adm_wdt_trigger(unsigned long unused)
staticvoid adm_wdt_start(void)
staticint __init adm_wdt_init(void)
arch_initcall(adm_wdt_init);
staticvoid __exit adm_wdt_exit(void)
module_exit(adm_wdt_exit);
module_author("xiaohaixu");
module_description("driverfor gpio controlled adm706 watchdogs");
module_license("gpl");
module_alias_miscdev(watchdog_minor);
module_alias("adm706gpio-controlled watchdog");
PowerPC簡單了解
powerpc相對於arm優勢 powerpc晶元憑藉其出色的效能和高度整合和技術先進特性在網路通訊應用,工業控制應用,家用數位化,網路儲存領域,軍工領域,電力系統控制等都具有非常廣泛的應用 由於powerpc相對arm器件來說 稍貴,另外arm開 發工具盜版到處都是,所以在中國目前來說powerp...
PowerPC組合語言
在了解指令集本身之前,有兩項關於組合語言的關鍵內容需要理解,也就是記憶體模型和獲取 執行週期。記憶體模型非常簡單。記憶體只儲存一種東西 固定範圍內的數字,也稱為位元組 在大多數計算機上,這是乙個 0 到 255 之間的數字 每個儲存單元都使用乙個有序位址定位。設想乙個龐大的空間,其中有許多信箱。每個...
PowerPC開發資源
1 developerworks power architecture 專區是了解有關 power 和 powerpc 晶元及其相關技術的最佳資源。2 powerpc體系結構學習筆記 3 powerpc 體系結構開發者指南 介紹powerpc比較經典的入門級別文章,雖然文章不長,但內容還是比較豐富的...