#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口了,才出现了你所谓的,中断不被终止。
是你初始化有问题了