早教吧 育儿知识 作业答案 考试题库 百科 知识分享

lm3s看门狗的问题,求高手解答.#defineKEY1GPIOPIN2#defineLED3GPIOPIN6#defineLED4GPIOPIN5voidGPIOPortEISR(void){while(1);}voiddelay(unsignedlongulTime){while(--ulTime!=0);}voidWatchdogT

题目详情
lm3s看门狗的问题,求高手解答.
#define KEY1 GPIO_PIN_2
#define LED3 GPIO_PIN_6
#define LED4 GPIO_PIN_5
void GPIO_Port_E_ISR (void)
{
while(1);
}
void delay (unsigned long ulTime)
{
while (--ulTime != 0);
}

void Watchdog_Timer_ISR (void)
{
while(1){
GPIOPinWrite(GPIO_PORTC_BASE,LED4,~GPIOPinRead(GPIO_PORTC_BASE,LED4)); /* 反转LED4 */
delay(100000);
}
}
int main(void)
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_WDOG); /* 使能看门狗定时器 */
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); /* 使能GPIO B*/
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC); /* 使能GPIO C口 */
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE); /* 使能GPIO E口*/
GPIOPadConfigSet(GPIO_PORTE_BASE, KEY1, GPIO_STRENGTH_2MA,
GPIO_PIN_TYPE_STD_WPU);
GPIODirModeSet(GPIO_PORTE_BASE, KEY1, GPIO_DIR_MODE_IN); /* 设置连接KEY1的PE2为输入 */
GPIOPadConfigSet(GPIO_PORTB_BASE, LED3, GPIO_STRENGTH_2MA,
GPIO_PIN_TYPE_STD_WPU);
GPIODirModeSet (GPIO_PORTB_BASE, LED3, GPIO_DIR_MODE_OUT); /* 设置连接LED3的PB6为输出 */
GPIOPadConfigSet(GPIO_PORTC_BASE, LED4, GPIO_STRENGTH_2MA,
GPIO_PIN_TYPE_STD_WPU);
GPIODirModeSet(GPIO_PORTC_BASE, LED4, GPIO_DIR_MODE_OUT); /* 设置连接LED4的PC5为输出 */
IntPrioritySet(INT_WATCHDOG,0x00); /* 设置看门狗中断优先级为高 */
IntPrioritySet(INT_GPIOE,0x40); /* 设置GPIO E口的中断优先级为低*/
GPIOIntTypeSet(GPIO_PORTE_BASE, KEY1, GPIO_FALLING_EDGE); /* 设置KEY1中断触发方式为下降沿触 发*/
GPIOPinIntEnable(GPIO_PORTE_BASE, KEY1); /* 使能KEY1中断 */
IntEnable(INT_GPIOE); /* 使能GPIO E口中断 */
IntEnable(INT_WATCHDOG); /* 使能看门狗中断 */
WatchdogReloadSet(WATCHDOG_BASE, 6000000); /* 设置看门狗定时器的重载值 */
WatchdogResetEnable(WATCHDOG_BASE); /* 使能看门狗定时器的复位功能 */
WatchdogEnable(WATCHDOG_BASE); /* 使能看门狗定时器的中断 */
WatchdogLock(WATCHDOG_BASE); /* 使能看门狗定时器的锁定机制 */
while (1){
GPIOPinWrite(GPIO_PORTB_BASE, LED3, ~GPIOPinRead(GPIO_PORTB_BASE, LED3));/* 反转LED3 */
delay(500000);
WatchdogIntClear(WATCHDOG_BASE); /* 清除看门狗的中断标志、"喂狗"*/
}
}
以上是周立功easyARM8962的看门狗实验例程.我想问的是,在没有按下KEY1的时候,看门狗也会计数到0,应该会产生第一次超时,并且进入中断,而在这里看门狗的中断服务程序Watchdog_Timer_ISR 是个LED4不断闪烁的死循环啊,第一次超时就回不去主程序清中断了,那么很快就会第二次超时,并复位.那这样的话,没按下KEY1,程序刚运行很快就会复位了?请问是这样的吗?不是这样的话该这么理解这个程序?
▼优质解答
答案和解析
这是什么呢