深入理解ARM体系架构(S3C6410)---S3C6410看门狗源码实例
S3C6410看门狗定时器的功能:
本文引用地址:https://www.eepw.com.cn/article/201611/317826.htmThe S3C6410XRISC microprocessor watchdog timer is used to resume the controller operation wheneverit is disturbed by malfunctions such as noise and system errors. The watchdogtimer generates the reset signal.
It can be usedas a normal 16-bit interval timer to request interrupt service.Advantagein using WDT instead of PWM timer is that WDT generates the reset signal.
FEATURES
The WatchdogTimer includes the following features:
• Normal interval timer mode with interruptrequest.
• Internal reset signal is activated when thetimer count value reaches 0 (time-out).
• Level-triggered Interrupt mechanism.
看门狗模块包括一个8位预分频器,一个分频器,一个16bit计数器。它的8位预分频器把PCLK分频后,再被分频得到4种频率,16分频,32分频,64分频,128分频。WatchDog可以选择工作于哪种频率下。S3C2440用3个寄存器对WatchDog进行操作:
看门狗定时器计数寄存器(WTCNT)
Figure 34-1shows the functional block diagram of the watchdog timer. The watchdog timeruses only PCLK as its source clock. The PCLK frequency is prescaled to generatethe corresponding watchdog timer clock, and the resulting frequency is dividedagain.
The prescalervalue and the frequency division factor are specified in the watchdog timercontrol (WTCON)register. Valid prescaler values range from 0 to 28-1. Thefrequency division factor can be selected as 16, 32, 64,or 128.
Use thefollowing equation to calculate the watchdog timer clock frequency and theduration of each timer clock cycle:
t_watchdog = 1/( PCLK / (Prescaler value + 1) / Division_factor )
注意:
1、Once the watchdog timer is enabled, the value ofwatchdog timer data (WTDAT) register cannot be automatically reloaded into thetimer counter (WTCNT). For this reason, an initial value must be written to thewatchdog timer count (WTCNT) register, before the watchdog timer starts.
2、When the S3C6410 is in debug mode using EmbeddedICE, the watchdog timer must not operate.The watchdog timer can determinewhether or not it is currently in the debug mode from the CPU coresignal(DBGACK signal). Once the DBGACK signal is asserted, the reset output ofthe watchdog timer is not activated as the watchdog timer is expired.
看门狗寄存器映射:
1、WATCHDOG TIMER CONTROL(WTCON) REGISTER
WTCON允许用户使能看门狗定时器,从不同四个源选择时钟,使能中断,使能看门狗定时器输出。S3C6410看门狗定时器用于系统故障后复位。如果不希望复位,则使能定时器无效。
The WTCONregister allows the user to enable/disable the watchdog timer, select the clocksignal from 4 different sources, enable/disable interrupts, and enable/disablethe watchdog timer output.
The Watchdogtimer is used to resume the S3C6410 restart on mal-function after its power on.At this time,disable the interrupt generation and enable the Watchdog timeroutput for reset signal.
If controllerrestart is not desired and if the user wants to use the normal timer only,which is provided by the Watchdog timer, enable the interrupt generation anddisable the Watchdog timer output for reset signal.

注意:Initial state of ‘Reset enable/disable’ is 1(reset enable). If user do notdisable this bit, S3C6410 will be rebooted in about 5.63sec (In the case ofPCLK is 12MHz). So at boot loader, this bit should be disabled before undercontrol of Operating System, or Firmware.
2、WATCHDOG TIMER DATA (WTDAT) REGISTER
WTDAT用于确定超时期限。WTDAT的内容在最初的定时器操作时不能自动加载到定时器计数其中。但使用0x8000将驱使第一次超时,在这种情况下,WTDAT的值将自动载入WTCNT。
The WTDATregister is used to specify the time-out duration. The content of WTDAT cannotbe automatically loaded into the timer counter at initial watchdog timeroperation. However, using 0x8000 (initial value of WTCNT)will drive the firsttime-out. Then, the value of WTDAT will be automatically reloaded into WTCNT.

3、WATCHDOG TIMER COUNT(WTCNT) REGISTER
The WTCNT register contains the current count values for the watchdogtimer during normal operation.
注意:The content of the WTDAT register cannot be automatically loaded into thetimer count register when the watchdog timer is enabled initially, so the WTCNTregister must be set to an initial value before enabling it.
定义寄存器:
- //watchdog
- #define
WTCON (*(volatile unsigned *)(0x7E004000)) - #define
WTDAT (*(volatile unsigned *)(0x7E004004)) - #define
WTCNT (*(volatile unsigned *)(0x7E004008))
初始化函数:
- void
init_watchdog() - {
WTDAT = 0xff; WTCNT = 0x8000; WTCON = 0XC021;//Prescaler value为6,16分频 - }
在mian函数中调用:
- init_watchdog();
- while(1);
评论