单片机程序中为什么要禁止看门狗 20
在F2407A的C语言编程中,都有类似的初始化语句,voidSystemInit(){asm("SETCINTM");/*关闭总中断*/asm("CLRCSXM");/*...
在F2407A的C语言编程中,都有类似的初始化语句,
void SystemInit()
{
asm(" SETC INTM "); /* 关闭总中断 */
asm(" CLRC SXM "); /* 禁止符号位扩展 */
asm(" CLRC CNF "); /* B0块映射为 on-chip DARAM*/
asm(" CLRC OVM "); /* 累加器结果正常溢出*/
*SCSR1=0x81FE; //CPU CLOCK = 10*4=40M
/* 打开ADC,EVA,EVB,CAN和SCI的时钟*/
*WDCR=0x006F; //Disable on-chip WD,看门狗时钟64分频
KickDog(); //Initial WD
*IFR=0xFFFF; //清除中断标志
*IMR=0x0006; //Open Int2, Int3
}
在这里面有*WDCR=0x006F;这样的一句,这是把内部的看门狗禁止了。那么在2407的应用系统中,一般需要这个看门狗功能,现在把它禁止了看门狗还有用么?为什么要禁止它呢?
难道说正常的2407工作时都是看门狗禁止吗,那要它还有什么用?是不是在那个地方再把它打开?但是在程序中找不到呀?
请各位解释一下,非常谢谢! 展开
void SystemInit()
{
asm(" SETC INTM "); /* 关闭总中断 */
asm(" CLRC SXM "); /* 禁止符号位扩展 */
asm(" CLRC CNF "); /* B0块映射为 on-chip DARAM*/
asm(" CLRC OVM "); /* 累加器结果正常溢出*/
*SCSR1=0x81FE; //CPU CLOCK = 10*4=40M
/* 打开ADC,EVA,EVB,CAN和SCI的时钟*/
*WDCR=0x006F; //Disable on-chip WD,看门狗时钟64分频
KickDog(); //Initial WD
*IFR=0xFFFF; //清除中断标志
*IMR=0x0006; //Open Int2, Int3
}
在这里面有*WDCR=0x006F;这样的一句,这是把内部的看门狗禁止了。那么在2407的应用系统中,一般需要这个看门狗功能,现在把它禁止了看门狗还有用么?为什么要禁止它呢?
难道说正常的2407工作时都是看门狗禁止吗,那要它还有什么用?是不是在那个地方再把它打开?但是在程序中找不到呀?
请各位解释一下,非常谢谢! 展开
3个回答
展开全部
你要先明白看门狗的用途
看门狗其实就是一个定时器
这个定时器溢出是会产生一个中断响应
中断服务就是跳会程序开头,即复位
看门狗常用在程序很容易跑飞的情况下(如等待超时,意外进入死循环等)
启动看门狗后要定时在程序中把看门狗的计数值清0,就是防止它进入中断然后复,这种常称为喂狗
如果在一般简单的程序中是不太可能会跑飞的话多数会关闭看门狗,因为引入了看门狗就多了定时计数值处理的一些代码,增加了程序的复杂性
但是看样子楼主的原因并非以上几个方面, 关闭看门狗的目的是让他先暂停再设置,而之后打开,就是那个kickdog()
在程序中的应用,会表现在为计数器的值赋0,可能你没有留意
再者,正如楼上所说,你用的不纯粹是单片机,而是DSP
DSP具体和单片机有什么区别, 你可以暂时理解为专门为乘法和存储优化使其速度加快以适用于通信领域的单片机
看门狗其实就是一个定时器
这个定时器溢出是会产生一个中断响应
中断服务就是跳会程序开头,即复位
看门狗常用在程序很容易跑飞的情况下(如等待超时,意外进入死循环等)
启动看门狗后要定时在程序中把看门狗的计数值清0,就是防止它进入中断然后复,这种常称为喂狗
如果在一般简单的程序中是不太可能会跑飞的话多数会关闭看门狗,因为引入了看门狗就多了定时计数值处理的一些代码,增加了程序的复杂性
但是看样子楼主的原因并非以上几个方面, 关闭看门狗的目的是让他先暂停再设置,而之后打开,就是那个kickdog()
在程序中的应用,会表现在为计数器的值赋0,可能你没有留意
再者,正如楼上所说,你用的不纯粹是单片机,而是DSP
DSP具体和单片机有什么区别, 你可以暂时理解为专门为乘法和存储优化使其速度加快以适用于通信领域的单片机
展开全部
这个并不是单片机,是德州仪器的DSP芯片TMS320F2407。
这是设置看门狗的时候,必须先关闭它才能设置,否则在开启状态下设置狗可能会出现问题。一般单片机和DSP、还有ARM芯片里设置内部功能的时候,都是先关闭这个功能,再设置,设置完后再打开。就像这个函数的开头,它把中断关闭了,但后面又打开了,就是这个道理
你看看下面这个KickDog();里面是不是把看门狗又开了。
这是设置看门狗的时候,必须先关闭它才能设置,否则在开启状态下设置狗可能会出现问题。一般单片机和DSP、还有ARM芯片里设置内部功能的时候,都是先关闭这个功能,再设置,设置完后再打开。就像这个函数的开头,它把中断关闭了,但后面又打开了,就是这个道理
你看看下面这个KickDog();里面是不是把看门狗又开了。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可能用的外部看门狗。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询