早教吧作业答案频道 -->其他-->
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,程序刚运行很快就会复位了?请问是这样的吗?不是这样的话该这么理解这个程序?
#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,程序刚运行很快就会复位了?请问是这样的吗?不是这样的话该这么理解这个程序?
▼优质解答
答案和解析
这是什么呢
看了 lm3s看门狗的问题,求高手...的网友还看了以下:
c语言中while do-while for 1.使用while和do-while循环式,循环变量 2020-05-13 …
he told me to rest for a while.'__for a while.'he 2020-05-16 …
C语言 while 的用法//已知6≤a≤30,15≤b≤36,求满足2a+5b=126的全部整数 2020-05-17 …
编写一个控制台程序,分别用for、while、do-while语句实现n! 2020-05-17 …
请大神告诉这个程序应该怎么编写啊(关于九九乘法表的)?有最简单的循环语句编写while、do-wh 2020-05-17 …
15道题目,求一个参考答案1.C语言中"%"运算符的运算对象必须是整型.(2分)1.TrueFal 2020-06-08 …
一、要使循环体至少执行一次,应使用循环.A)For…NextB)While…EndWhileC)D 2020-06-15 …
请问高高低模式高低高模式低低低模式这三个人口增长模式的金字塔图分别是怎样的,如何区别高高低和高低高 2020-06-17 …
求救!好心人输入一个正整数,将其各位数相加,一直加到只剩一位数为止如123456789-->main 2020-11-04 …
在高速公路上,有时会发生“追尾”的事故:后面的汽车撞上前面的汽车.我国高速公路的最高车速限制值为12 2020-12-19 …