本帖最后由 yueyinji1989 于 2012-10-24 12:38 编辑
你们好,我在学习看门狗中断的时候遇到这样个问题。
上电后,不断喂狗,LED6闪烁,当我按下KEY键后,停止喂狗,LED6停止闪烁了,进入中断,我在中断那里设置了LED7,进入中断就亮的,可是一直都不亮,怀疑是进不去中断。IRQ中断已经允许了。请问是什么问题呢?谢谢!
代码中蓝色,看门狗中断,并设置LED7亮;
红色,喂狗,LED6闪烁,LED7灭,等待中断。
源代码
————————————————
/**功能:****************************************************************************
* 文件名:WDT_INT.C
* 功能:循环喂狗,正常时LED6点亮,按下KEY1键就停止喂狗,是看门溢出产生中断
蜂鸣器报警,LED7亮
* 说明:
****************************************************************************/
#include "Config.h"
#include "Target.h"
#include <intrinsics.h>
#define LED7 (1 << 7) // P0.7控制LED7
#define LED6 (1 << 6) // P0.6控制LED6,低电平点亮
#define KEY1 (1 << 16) // P0.16连接KEY1
#define WDT 0 // WDT中断号
/*
********************************************************************************************************
** 函数名称 : WDT_Int()
** 功能描述 : WDT中断服务函数。
** 入口参数 :无
** 出口参数 :无
*******************************************************************************************************
*/
void WDT_Int(void)
{
uint32 i;
IO0CLR = LED7; // LED报警
for (i=0; i<0x7fFFf; i++);
IO0SET = LED7;
WDMOD = 0x00; // 清除看门狗超时位WDTOF
VICIntEnClear = 1 << WDT; // 看门狗溢出中断只能通过禁止VIC的方式返回
VICVectAddr = 0x00;
}
/****************************************************************************
* 名称:main()
* 功能:循环喂狗,如果按下KEY1键就停止喂狗,看门狗溢出产生中断
****************************************************************************/
int main(void)
{ uint32 i, j;
TargetResetInit();//仿真时目标板不需要初始化,此语句需要屏蔽
PINSEL0=0X0;
PINSEL1=0X0;
IO0DIR =0XC0;
IO0SET = LED7;
IO0SET=LED6;
/* 中断初始化 */
VICIntSelect = 0x00000000; // 连接所有中断到向量中断
VICVectCntl0 = 0x20 | WDT; // 分配WDT中断到slot0
VICVectAddr0 = (int)WDT_Int; // 中断服务程序地址
WDMOD = 0x00; // 清除看门狗超时位WDTOF
VICIntEnable = (1 << WDT); // 中断使能
/* 初始化看门狗 */
WDTC = 0x6006; // 设定看门狗超时值
WDMOD = 0x01; // 看门狗中断使能
WDFEED = 0xAA; // 第一次喂狗启动WDT
WDFEED = 0x55;
__enable_irq();
while (1)
{ /* 周期性喂狗,如果KEY1按下,就停止喂狗 */
while((IO0PIN & KEY1) == 0);
for(j = 0; j < 0xff; j++)
{ /* 循环喂狗 */
for(i = 0; i < 0x0FFF; i++);
WDFEED = 0xAA;
WDFEED = 0x55;
}
/* 闪烁LED6 */
if((IO0SET & LED6) == 0) IO0SET = LED6;
else IO0CLR = LED6;
IO0SET= LED7; //关掉LED7
}
} |