计算机正常操作监控模块(Computer Operating Properly,COP)俗称为“看门狗”,是飞思卡尔单片机进行程序和系统监控的重要组成部分。
1.看门狗工作原理
看门狗(watchdog timer)其实质是一个定时器电路,逻辑上有一个称为“喂狗”(kicking the dog or service the dog)的输入端和一个连接到单片机复位的输出端组成。单片机正常工作的时候,每隔一段时间输出一个信号到喂狗端,给看门狗的定时器清零,如果超过规定的时间不“喂狗”(一般在程序跑飞时),看门狗的定时器就会溢出,强制产生一个复位信号给单片机强行使其复位。所以看门狗的作用就是防止程序发生死循环或者程序跑飞而引起的单片机死机。
看门狗有硬件和软件之分。硬件看门狗是利用了一个定时器硬件来监控主程序的运行,也就是说,在主程序的运行过程中要在这个定时时间到达之前对看门狗的定时器进行复位,如果出现死循环,那么定时时间到后就会使单片机复位。常用的硬件看门狗芯片如MAX813、5045、IMP813等。软件看门狗的技术原理和硬件看门狗差不多,只不过是用软件定时的方法实现,其利用单片机内部的定时器模块产生定时溢出中断,进而在中断服务程序中对单片机进行复位控制。
2.HCS08单片机的看门狗模块
HCS08单片机的看门狗模块是一个硬件结构,它从0开始对总线时钟BUSCLK脉冲进行加1计数,即对每一个BUSCLK脉冲,COP计数器加1,当COP计数器计满213个或218个BUSCLK脉冲,就会产生COP复位,使得MCU重新开始执行程序。如果在COP计数器计满213个或218个BUSCLK脉冲之前,通过指令周期性地清零COP计数器,那么就不会产生COP复位。也就是说,如果在用户程序中周期性地执行“喂狗”指令,并且执行周期小于213个或218个BUSCLK脉冲周期,那么用户程序正常运行且COP就不会复位。一旦由于外界干扰使得用户在COP计数器溢出前没有复位COP,模块就会产生一个系统复位信号使系统回到初始状态启动。在CodeWarrior程序代码模板中,我们经常会在for死循环中看到__RESET_WATCHDOG();这条语句,其实这就是一条“喂狗”指令语句,作用就是为了防止由于代码模板中的for死循环导致系统复位。
3.看门狗模块相关寄存器设置
当系统执行复位之后,可以通过SOPT寄存器的COPE位置“1”使能看门狗,详见表6-11。如果想在应用中禁止使用看门狗运行,可以通过清COPE位的方式来实现。写任意值到SRS寄存器可以复位COP计数器,该操作不会影响SRS的数据,相反地会向COP计数器发送一个复位信号。(www.xing528.com)
SOPT2寄存器的COPCLKS位可以用于选择COP定时器的时钟源,详见表6-12。时钟源选项有两个:总线时钟周期或内部的1kHz时钟源。每个时钟源都有相应的短时间和长时间溢出,由SOPT的COPT控制,表6-14总结了COPCLKS和COPT位的控制功能。COP看门狗默认操作是总线时钟源和相应的长溢出(218周期)。
表6-14 COP配置选项表
注:表中数据基于tRT=1 ms计算。
实际操作中即使应用程序使用COPE、COPCLKS和COPT的默认复位设置,一般在复位初始化时,用户仍应该向SOPT寄存器一次性写入的配置数据来锁存这些设置,这样即使应用程序一开始就跑飞系统的设置也不会被意外的改变。
我们可以通过对SOPT和SOPT2的操作设置COP计数器,但请注意中断服务程序中不能出现对SRS的写入操作(该操作会清零COP定时器),因为系统运行时即使主程序运行失败,ISR可能仍有可能会被周期性地执行。
在背景调试模式下,COP计数器的计数值不会增加。同样当用户选择总线时钟源,系统处于停止模式时,COP计数器也不会增加,但一旦单片机退出停止模式COP计数器就会重新开始计数。还有一种情况是当用户选择1kHz时钟源,系统进入停止模式时COP计数器将重新初始化为0,而单片机一旦退出停止模式COP计数器就开始计数。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。