在线时间2186 小时
UID2073122
注册时间2016-1-12
NXP金币785
TA的每日心情 | 开心 2020-6-18 08:45 |
---|
签到天数: 812 天 [LV.10]以坛为家III
金牌会员
- 积分
- 6142
- 最后登录
- 2024-3-27
|
本帖最后由 原来的你 于 2016-11-10 23:57 编辑
本节我们讲解LPC824的看门狗,LPC824的看门狗有如下特性:
• 如果在可编程超时期限内未重新载入,则可在内部复位芯片。
• 可选的窗口化操作要求在最大和最小超时期限之间发生重新载入,两个时限都可设定。
• 可选警报中断可在看门狗超时之前的可编程时间生成。
• 带内部固定预分频器的可编程 24 位定时器。
• 时间周期可选,从 1,024 个看门狗时钟 (TWDCLK × 256 × 4) 到超过 6,700 万个看门狗
时钟 (TWDCLK × 224 × 4),取 4 个看门狗时钟的位数。
• “ 安全 ” 看门狗操作。一旦使能,则要求禁用软件复位或看门狗复位。
• 馈入序列不正确会导致看门狗即时事件 (如使能)。
• 由于对看门狗重载值的保护为选择性,因此只能在 “ 警报中断 ” 时间后更改该值。
• 指示看门狗复位的标志。
• 看门狗时钟 (WDCLK) 源是看门狗振荡器。
• 看门狗定时器可配置为在深度睡眠模式或掉电模式下运行。
• 调试模式。
基本配置:
配置 WWDT 使用的是下列寄存器:
• 对寄存器接口供电 ( WWDT PCLK 时钟):在 SYSAHBCLKCTRL 寄存器中,设置
表 35 中的位 17。
• 在 PDRUNCFG 寄存器 ( 表 54)中使能 WWDT 时钟源 (看门狗振荡器)。它是定时
器的基础时钟源。
• 要从 WWDT 中断唤醒,则在 STARTERP1 寄存器 ( 表 51)中使能用于唤醒的看门狗
中断。
看门狗简介:
看门狗定时器的作用是,如果微控制器进入错误状态,在可编程时间内将其复位或中断。看
门狗定时器使能时,如果用户程序未能在预定时间内馈入 (或重新载入)看门狗,则会生
成看门狗复位。
编程看门狗窗口时,早期的看门狗馈入也被视为看门狗事件。这可防止有故障的系统仍然馈
入看门狗的情况。例如,应用程序代码可能在包含看门狗馈入的中断服务中阻塞。这样设置
窗口可能会导致早期馈入,从而生成看门狗事件,允许系统恢复。
看门狗包括一个固定的 ( 4 分频)预换算器和一个 24 位计数器,后者在有时钟控制时递
减。计数器递减的最小起始值是 0xFF。设置低于 0xFF 的值将使 0xFF 被载入计数器。因
此,看门狗的最小间隔为 (TWDCLK × 256 × 4),最大间隔为 (TWDCLK × 224 × 4),两者都是
(TWDCLK × 4) 的倍数。使用看门狗时应当采用下列方式:
• 在 TC 寄存器中设置看门狗定时器恒定的重载值。
• 在 MOD 寄存器中设置看门狗定时器操作模式。
• 如果需要窗口化操作,在 WINDOW 寄存器中设置看门狗窗口时间的值。
• 如果需要警告中断,则在 WARNINT 寄存器中设置看门狗警告中断的值。
• 将 0xAA 写入 FEED 寄存器,然后写入 0x55,以使能看门狗。
• 在看门狗计数器达到零之前必须重新馈入看门狗,以防发生看门狗事件。如果窗口值经
过编程,则还必须在看门狗计数器超过该值后才馈入。
如果 “ 看门狗定时器 ” 配置为看门狗事件会导致复位且计数器会达到零,则 CPU 将被复位,
如同外部复位一样,从向量表中载入堆栈指针和程序计数器。看门狗超时标志 (WDTOF) 经
过检查后可确定看门狗是否导致了复位条件。 WDTOF 标志必须通过软件清零。
如果看门狗定时器配置为产生警告中断,则在计数器与寄存器定义的值匹配时将出现中断。
时钟和电源控制
看门狗定时器块使用两个时钟: PCLK 和 WDCLK。 PCLK 供 APB 访问看门狗寄存器使用,
由系统时钟生成 (参见图 3)。 WDCLK 用于看门狗定时器计数,由看门狗振荡器生成。
两个时钟域之间同步逻辑的工作方式如下:当 MOD 和 TC 寄存器通过 APB 操作更新时,
新的值将在 WDCLK 时钟域内逻辑的 3 个 WDCLK 周期内生效。
如果看门狗定时器根据 WDCLK 计数,同步逻辑将首先锁定 WDCLK 上计数器的值,然后
使其与 PCLK 同步,这样 CPU 就能对 WDTV 寄存器进行读操作。
注: 由于同步步骤,软件必须在馈入序列和 MOD 寄存器的 WDPROTECT 位使能时刻之间
添加三个 WDCLK 时钟周期的延迟。延迟长度取决于所选的看门狗时钟 WDCLK。
使用 WWDT 锁定特性
WWDT 支持多种锁定特性,这些特性使能后可确保 WWDT 始终运行:
• 禁用 WWDT 时钟源
• 更改 WWDT 重载值
禁用 WWDT 时钟源:
在睡眠模式、深度睡眠模式或掉电模式下,如果设置 WWDT MOD 寄存器中的位 5,则
WWDT 时钟源会被锁定,并且无法通过软件或硬件禁用。因此,用户在设置 MOD 寄存器
中的位 5 之前,必须确保每种电源模式的看门狗振荡器均使能。
在深度掉电模式下,任何时钟锁定机制均无效,因为此时时钟不工作。但是, PMU 中的额
外锁定位可设置,以防器件进入深度掉电模式 (参见图 61)。
更改 WWDT 重载值:
如果设置WWDT MOD寄存器中的位4,则只能在计数器低于WDWARNINT和WDWINDOW
值时才更改看门狗超时值 (TC)。
重载覆盖锁定机制只能通过任何类型的复位而禁用
表 51 “ 启动逻辑 1 中断唤醒使能寄存器 ( STARTERP1,地址 0x4004 8214)位说明
int main(void)
{
uint32_t wdtFreq;
SystemCoreClockUpdate();
Board_Init();
/* Freq = 0.6Mhz, divided by 64. WDT_OSC should be 9.375khz */
Chip_Clock_SetWDTOSC(WDTLFO_OSC_0_60, 64);//设置看门狗时钟源
/* Enable the power to the WDT */
Chip_SYSCTL_PowerUp(SYSCTL_SLPWAKE_WDTOSC_PD);//使能看门狗电源
/* The WDT divides the input frequency into it by 4 */
wdtFreq = Chip_Clock_GetWDTOSCRate() / 4;//看门狗分频
Board_LED_Set(0, false);
/* Initialize WWDT (also enables WWDT clock) */
Chip_WWDT_Init(LPC_WWDT);//初始化看门狗
/* Set watchdog feed time constant to approximately 2s
Set watchdog warning time to 512 ticks after feed time constant
Set watchdog window time to 3s */
Chip_WWDT_SetTimeOut(LPC_WWDT, wdtFreq * 2);//设置看门狗问够时间2s
Chip_WWDT_SetWarning(LPC_WWDT, 512);//设置看门狗警告时间
Chip_WWDT_SetWindow(LPC_WWDT, wdtFreq * 3);//设置看门狗窗口时间为3s
/* Configure WWDT to reset on timeout */
Chip_WWDT_SetOption(LPC_WWDT, WWDT_WDMOD_WDRESET);//配置看门狗超时复位
/* Clear watchdog warning and timeout interrupts */
Chip_WWDT_ClearStatusFlag(LPC_WWDT, WWDT_WDMOD_WDTOF | WWDT_WDMOD_WDINT);//清除看门狗警告和超时中断
/* Clear and enable watchdog interrupt */
NVIC_ClearPendingIRQ(WDT_IRQn);//清除WDT_IRQn
NVIC_EnableIRQ(WDT_IRQn);//使能WDT_IRQn
/* Start watchdog */
Chip_WWDT_Start(LPC_WWDT);//开启看门狗
while (1) {
__WFI();
}
}
|
|