我目前正在尝试实现一个计时器中断来为看门狗复位提供服务。 我将看门狗设置为1.3107ms、并将计时器中断设置为1ms。 但是、当测试以确保 WD 重置 F2808时、我将计时器中断设置为>WD 值 1.31072ms、并且没有复位。 似乎我必须将计时器中断设置为比 WD 值大10倍的幅度、这样我就认为 WD 值 计算不正确。
为什么计时器中断需要比 WD 大10倍-我在计算中缺少什么? (我相信 OSCCLK 是100MHz 的 INCLK 值)
/* WDCR
*位字段说明
* 15-8保留
7 WDFLAG 看门狗复位状态标志位
* 6 WDDIS 看门狗禁用位1 =禁用
* 5-3 WDCHK 看门狗检查。 始终写入1、0、1、否则将发生复位
* 2-0 WDPS 看门狗预分频。
* 000 WDCLK = OSCCLK/512/1 (缺省值)
* 001 WDCLK = OSCCLK/512/1
* 010 WDCLK = OSCCLK/512/2
* 011 WDCLK = OSCCLK/512/4
* 100 WDCLK = OSCCLK/512/8
* 101 WDCLK = OSCCLK/512/16
* 110 WDCLK = OSCCLK/512/32
* 111 WDCLK = OSCCLK/512/64
*启用0x0028
* 0000 0000 00'10 1'000
* OSCCLK PS 100/(512*PS) 1 WD Clk WD Reset Timeout After 256 WD CLKS
* 100、000、000 、000 1 195312.5 0.00000512 0.00131072 <-如果没有 WDKEY 更新、预期复位时间
* 2 97656.25 0.00001024 0.00262144
* 4 48828.125 0.00002048 0.00524288
* 8 24414.063 0.00004096 0.01048576
* 16 12207.031 0.00008192 0.02097152
* 32 6103.5156 0.00016384 0.04194304
* 64 3051.7578 0.00032768 0.08388608
*
空 EnableDog (空)
{
EALLOW;
SysCtrlRegs.WDCR= 0x0028;//预分频(WDPS)为100M/512/2,因此 值应为 0.00131072
EDIS;
}
ConfigCpuTimer (&CpuTimer0、100、13200);// 13.2mSec to TRIP 安全装置????
空 ConfigCpuTimer (struct CPUTIME_VARS *定时器、浮点频率、浮点周期)
{
uint32温度;
//初始化计时器周期:
Timer->CPUFreqInMHz =频率;
Timer->PeriodInUSec =周期;
temp =(long)(Freq * period);
Timer->RegsAddr->PRD.All = temp;
//将预分频计数器设置为1分频(SYSCLKOUT):
Timer->RegsAddr->TPR.All = 0;
Timer->RegsAddr->TPRH。ALL = 0;
//初始化计时器控制寄存器:
timer->RegsAddr->TCR.bit.TSS = 1;// 1 =停止计时器,0 =启动/重新启动计时器
timer->RegsAddr->TCR.bit.TRB = 1;// 1 =重新加载计时器
Timer->RegsAddr->TCR.bit.Soft = 1;
Timer->RegsAddr->TCR.bit.FREE = 1;//计时器自由运行
Timer->RegsAddr->TCR.bit.tie = 1;// 0 =禁用/ 1 =启用计时器中断
//复位中断计数器:
Timer->InterruptCount = 0;
}