首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

LPC2478的定时器中断有关问题,每当BEEP或LED7或LED8为低电平时,IRQ中断将被停止,请教为什么

2012-09-08 
LPC2478的定时器中断问题,每当BEEP或LED7或LED8为低电平时,IRQ中断将被停止,请问为什么?#defineLED7(16)

LPC2478的定时器中断问题,每当BEEP或LED7或LED8为低电平时,IRQ中断将被停止,请问为什么?
#define LED7 (1<<6) //P2.6
#define LED8 (1<<7) //P2.7
#define BEEP (1 << 5) // P2.5控制蜂鸣器
#define MkCLK (1<<26) //VD5026时钟产生信号:P2.22 输出11.17KHZ时可确保VD5026编码工作

void __irq IRQ_Timer0(void)
{if ((FIO2SET & MkCLK) == 0)
{
FIO2SET = MkCLK;
}
else
{
FIO2CLR = MkCLK;
}
T0IR = 0x01;// 清除中断标志
VICVectAddr = 0x00;// 通知VIC中断处理结束
}
void TimerIni()
{
 PINSEL5=PINSEL5&0xFFCFFFFF;
 PINSEL4=PINSEL4&0xFFFFFFFF;
 FIO2DIR=MkCLK;
 FIO2SET=MkCLK;
 
/* 定时器0初始化 */
T0TC = 0;// 定时器设置为0
T0PR = 0;// 时钟不分频
T0MCR = 0x03;// 设置T0MR0匹配后复位T0TC,并产生中断标志
T0MR0 = Fpclk /(2*11170);// 0.5秒钟定时
T0TCR = 0x01;// 启动定时器


  /* 打开IRQ中断 */
IRQEnable();// IRQ中断使能

/* 设置定时器0中断IRQ */
VICIntSelect = 0x00;// 所有中断通道设置为IRQ中断
VICVectPri4 = 00;// 设置定时器0中断最高优先级
VICVectAddr4 = (uint32)IRQ_Timer0;// 设置中断服务程序地址
VICIntEnable = 1 << 0x04;// 使能定时器0中断
  
}

//蜂鸣器 N=鸣叫次数
void Beep(int N)
{int i;
 PINSEL4=PINSEL4&0xFFFFF3FF;
 PINSEL5=PINSEL5&0xFFFFFFFF;
 FIO2DIR=BEEP;//设置P2.5为输出特性

 FIO2SET=BEEP;

 for(i=0;i<N;i++)
 {
  FIO2CLR=BEEP;
  Delay(100);
  FIO2SET=BEEP;
  Delay(100);
  }
}

//LD7 LD8指示灯点亮控制
void LED7LED8blink(int N)//b=交替闪烁次数
{
 int i;
 PINSEL4=PINSEL4 & 0xFFFF0FFF;
 FIO2DIR=LED7|LED8;//设置P2.6\7为输出特性
 FIO2SET=LED7;
 FIO2SET=LED8;
 for(i=0;i<N;i++)
 {
  FIO2CLR=LED7;
  Delay(50);
  FIO2SET=LED7;
  Delay(50);
  FIO2CLR=LED8;
  Delay(50);
  FIO2SET=LED8;
  Delay(50);
 }
}

[解决办法]
这个和IRQ中断不会有什么关系吧 还是仔细查一下吧
[解决办法]
这样看来,
1 你是不断地重新配置了IO口了,才出现了你所谓的,中断不被终止。
是你初始化有问题了
 

探讨

奇怪的是将IRQ定时器中断初始化放入主函数的while(1)循环体内不断重复才可以保持中断不被终止。问题依然没解决掉。

热点排行