DSP之时钟与定时器之四看门狗定时器

时间:2021-08-19 20:38:09
1 工作方式      
         在数字信号处理器的工作过程中有时会发生一些异常情况,这可能是在软件执 行时发生错误,如堆栈溢出、内存溢出等软件编写时没有预料到的错误,也可 能是 DSP 在运行时受到外界干扰而使得程序运行不正常,在这些情况下将会发 生不可预测的错误。为了防止出现这种情况,使用看门狗定时器是一种很好的 解决方法。
          看门狗定时器实际上是一个定时器,该定时器需要处理器周期性的执行一 些特定操作,当处理器运行正常时,这些操作会正常执行,而当出现异常时这 些操作将被打断,看门狗定时器计数会计到 0 而发生超时,这时定时器将输出一 个低脉冲,这个输出可以触发中断或引起 DSP 复位(可以触发不可屏蔽中断或 看门狗定时器中断,如果看门狗定时器的输出连接到硬件复位端将引起 DSP 位)。
         看门狗定时器有一个16位计数器和一个16位预计数器,使得计数器动态范围达32位。复位状态后,看门狗定时器是关闭的,且允许软件在将其使能之前,对其进行配置。看门狗定时器正常工作后,当定时器计到0时,会触发看门狗定时器中断,并将WDFLAG位置1,之后计数器和预计数器将会被重新载入,而超时事件将会从看门狗定时器的输出端输出。看门狗定时器正常工作时会在计数状态、服务状态和超时状态之间转换,接着给出了看门狗定时器的状态转换过程。
          如果看门狗定时器被使能,不能通过软件直接禁止,但可以通过看门狗超 时事件或硬件复位禁止看门狗定时器。当软件陷入死循环或发生软件错误时, 看门狗定时器会产生超时事件,强迫 DSP 进行异常处理。
        看门狗的时钟是直接来自时钟产生器,因此即使处理器处于休眠状态中仍 将继续计数。
2 寄存器
          看门狗定时器主要有 4 个寄存器 —— 即看门狗计数寄存器( WDTIM )、看门狗周期寄存器( WDPRD )、看门狗控制寄存器 WDTCR )和看门狗控制寄存器 2 WDTCR2 )。
          看门狗计数寄存器和看门狗周期寄存器都是 16 位寄存器,它 们协同工作完成计数功能。
          看门狗周期寄存器 WDPRD 存放计数的初始值,当计数寄存器 的值减到 0 后,将把周期寄存器中的数载入到计数寄存器中。当控 制寄存器中的 PSC 位减到 0 之前或看门狗计数器被复位时,计数寄 存器将进行减 1 计数。
3 配置看门狗定时器
   初始化和使能看门狗定时器的步骤:
   1.将主计数器周期PRD装入看门狗周期寄存器WDPRD
   2.设置看门狗定时器控制寄存器WDTCR的模式bit(WDOUT,SOFT和FREE),以及TDDR里的预定标控制值
   3.往看门狗定时器的控制寄存器2(WDTCR2)中的WDKEY写入关键值5C6H,使看门狗定时器进入预激活状态
   4.写关键值A7EH到WDKEY中,置位WDEN,将预定标模式bit(PREMD)的值写到WDTCR2中。这第二个值完成了关键值序列,表示一个实际的服务序列,WDEN = 1使能看门狗定时器,
3 看门狗定时器的应用
应用看门狗定时器的芯片支持函数首先要包含 csl_wdtim.h 头文件,接下来定义看门狗定时器的配置结构:
WDTIM_Config MyConfig = {
0x0060, /* Counter */
0x1000, /* Period */
0x0000, /* Control */
0x1000 /* Secondary control */
};
配置看门狗定时器需要调用看门狗配置函数:
WDTIM_config(&MyConfig);
在配置好看门狗定时器后调用开始函数,该函数的作用是将看门狗定时器控制寄存器 2 WDEN 位置成 1
WDTIM_start();
在运行看门狗开始函数后,看门狗开始递减计数,在计数器减到 0 之前需要周期性地向 WDKEY 字段写入 A5C5h A7Eh ,否则看门狗定时器将会发生超时事件从而触发中断或复位,该操作可以通过调用 WDTIM_service() 函数来完成。
WDTIM_service();