打印

看门狗怎么配置?

[复制链接]
1375|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
djz1992|  楼主 | 2016-4-25 10:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
看门狗该怎么配置?以下是函数库的案例,启用了看门狗,设置了初值,并没有使能中断,不用中断也可以?还是这个案例只是一部分     
if(WatchdogLockState(WATCHDOG0_BASE) == true)
    {
    WatchdogUnlock(WATCHDOG0_BASE);
    }
    ROM_WatchdogReloadSet(WATCHDOG0_BASE, ROM_SysCtlClockGet());
    ROM_WatchdogResetEnable(WATCHDOG0_BASE);
    ROM_WatchdogEnable(WATCHDOG0_BASE);

以下是launchpad的看门狗案例的部分代码,如果按键则g_bFeedWatchdog=false;
怎么看都像是按键后不让看门狗中断标志位清零,触发看门狗复位系统。
    ROM_IntMasterEnable();
    ROM_IntEnable(INT_WATCHDOG);
    ROM_WatchdogReloadSet(WATCHDOG0_BASE, ROM_SysCtlClockGet());
    ROM_WatchdogResetEnable(WATCHDOG0_BASE);
    ROM_WatchdogEnable(WATCHDOG0_BASE);
。。。。。。。
WatchdogIntHandler(void)
{
    if(!g_bFeedWatchdog)
    {
        return;
    }
    ROM_WatchdogIntClear(WATCHDOG0_BASE);
}

我修改成以下代码,但是发现中断有错误,每次运行到启用中断就都会进static void FaultISR(void);这个函数
问题有二:
1.中断是否必需启用?为什么一直会错误,是不是跟别的中断冲突?startup里已经注册
2.启用看门狗,设置初值后是否就不需要什么喂狗了,自动溢出后进入中断,然后清零即可?
3.中断内是否只要对中断标志位清零即可?
    ROM_IntMasterEnable();
    ROM_IntEnable(INT_WATCHDOG);
    ROM_WatchdogIntEnable(WATCHDOG0_BASE);//这句是我加的,原代码没有,这一句式无关紧要的吗?
    ROM_WatchdogReloadSet(WATCHDOG0_BASE, ROM_SysCtlClockGet());
    ROM_WatchdogResetEnable(WATCHDOG0_BASE);
    ROM_WatchdogEnable(WATCHDOG0_BASE);
WatchdogIntHandler(void)
{
    ROM_WatchdogIntClear(WATCHDOG0_BASE);
}


相关帖子

沙发
dirtwillfly| | 2016-4-25 13:33 | 只看该作者
没详细研究过tiva的看门狗。一般mcu的看门狗可以配置成多种模式,每种模式设置和使用的区别可能会比较大

使用特权

评论回复
板凳
djz1992|  楼主 | 2016-4-25 14:11 | 只看该作者
dirtwillfly 发表于 2016-4-25 13:33
没详细研究过tiva的看门狗。一般mcu的看门狗可以配置成多种模式,每种模式设置和使用的区别可能会比较大 ...

已经搞明白了,TI的案例里少了一句最基本的ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_WDOG0);看了许久才发现,看来还是对基本配置流程不够熟悉。

使用特权

评论回复
评分
参与人数 1威望 +10 收起 理由
dirtwillfly + 10 赞一个!
地板
dirtwillfly| | 2016-4-25 14:17 | 只看该作者
djz1992 发表于 2016-4-25 14:11
已经搞明白了,TI的案例里少了一句最基本的ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_WDOG0);看了许久才 ...

厉害,你越来越熟悉这个mcu了,赞一个

使用特权

评论回复
5
djz1992|  楼主 | 2016-4-25 14:22 | 只看该作者
本帖最后由 djz1992 于 2016-5-6 09:25 编辑
dirtwillfly 发表于 2016-4-25 13:33
没详细研究过tiva的看门狗。一般mcu的看门狗可以配置成多种模式,每种模式设置和使用的区别可能会比较大 ...

我一直有个疑问,我一直不太理解第二句使能和第三句使能的作用。是不是这样的1。开总中断
2.开外设中断
3.开该外设多种部分或模式中使用到的相应的中断

1.ROM_IntMasterEnable();
2.ROM_IntEnable(INT_WATCHDOG);
   //3.ROM_WatchdogEnable(WATCHDOG0_BASE);//有没有效果都一样,其他中断的该句是否也无关紧要?


1.ROM_IntMasterEnable();
2.ROM_IntEnable(INT_TIMER0A);//TIMEOUT标志位触发中断
3.ROM_TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT); //使能TIMER0A中断
ROM_IntPrioritySet(INT_TIMER0A,1);//设置中断优先级



1.ROM_IntMasterEnable();
2.ROM_IntEnable(INT_ADC0SS0); //使能ADC采样序列中断
3.ROM_ADCIntEnable(ADC0_BASE,0);
ROM_IntPrioritySet(INT_ADC0SS0,0);


@xyz549040622 帮忙看下,大神

使用特权

评论回复
6
xyz549040622| | 2016-5-6 15:32 | 只看该作者
关于这个问题,你要理解,库的本质是操作寄存器,库只是为了方便用户,做最大的兼容,因此会出现这种情况,你看着库的参数只操作了这个功能,别的功能不使能也是可以用的。就比如你以为3是多余的,其实,说不定在2中,已经把3的寄存器初始化过一次了。看字面意思,2的左右是使能看门狗中断,3的作用是使能看门狗这个功能。最好都加上,要记住,库不是万能的,本质还是寄存器,所以碰到情况的时候,需要检查相应的寄存器是否变化了。另外,个人感觉,调试的时候不要加ROM_这个函数,因为这样的话,会进不去仿真的。

使用特权

评论回复
7
djz1992|  楼主 | 2016-5-6 16:51 | 只看该作者
xyz549040622 发表于 2016-5-6 15:32
关于这个问题,你要理解,库的本质是操作寄存器,库只是为了方便用户,做最大的兼容,因此会出现这种情况, ...

有道理,经常进不去仿真,用ROM形式是不是省RAM?

使用特权

评论回复
8
xyz549040622| | 2016-5-6 19:29 | 只看该作者
djz1992 发表于 2016-5-6 16:51
有道理,经常进不去仿真,用ROM形式是不是省RAM?

省RAM是其次的,关键是速度快,但是这样也有缺点,某些需要反应时间的场合,需要加入判断的,有时候会出现没有初始化完毕,就操作的情况。

使用特权

评论回复
9
cemaj| | 2016-5-6 23:05 | 只看该作者
djz1992 发表于 2016-4-25 14:11
已经搞明白了,TI的案例里少了一句最基本的ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_WDOG0);看了许久才 ...

原来是这样子呢,一般没用过这个

使用特权

评论回复
10
cemaj| | 2016-5-6 23:08 | 只看该作者
定时器也是用systick

使用特权

评论回复
11
Soraka| | 2016-5-8 15:01 | 只看该作者
2的作用应该是使能看门狗中断,3是使能看门狗功能

使用特权

评论回复
12
Garen2| | 2016-5-8 16:06 | 只看该作者
调试的时候不要加ROM_这个函数,因为这样的话,会进不去仿真的。

跟着版主又学习了

使用特权

评论回复
13
pmp| | 2016-5-8 22:43 | 只看该作者
看门狗不是复位就行吗

使用特权

评论回复
14
pmp| | 2016-5-8 22:45 | 只看该作者
看门狗还有就是中断,其他的不知道了。

使用特权

评论回复
15
djz1992|  楼主 | 2016-5-9 08:42 | 只看该作者
xyz549040622 发表于 2016-5-6 19:29
省RAM是其次的,关键是速度快,但是这样也有缺点,某些需要反应时间的场合,需要加入判断的,有时候会出 ...

是这样啊,学习了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:人生苦短,冬日苦长,正是青葱,却无骄阳

115

主题

620

帖子

5

粉丝