看门狗该怎么配置?以下是函数库的案例,启用了看门狗,设置了初值,并没有使能中断,不用中断也可以?还是这个案例只是一部分
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);
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
已经搞明白了,TI的案例里少了一句最基本的ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_WDOG0);看了许久才发现,看来还是对基本配置流程不够熟悉。
我一直有个疑问,我一直不太理解第二句使能和第三句使能的作用。是不是这样的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 帮忙看下,大神
有道理,经常进不去仿真,用ROM形式是不是省RAM?
一周热门 更多>