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

初冬雪 2012-07-12 12:24:22
#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);
}
}
...全文
68 点赞 收藏 4
写回复
4 条回复
初冬雪 2012年07月31日
更换了24XX.H问题解决了。散分吧。
回复 点赞
色郎中 2012年07月18日
这样看来,
1 你是不断地重新配置了IO口了,才出现了你所谓的,中断不被终止。
是你初始化有问题了


[Quote=引用 2 楼 的回复:]

奇怪的是将IRQ定时器中断初始化放入主函数的while(1)循环体内不断重复才可以保持中断不被终止。问题依然没解决掉。
[/Quote]
回复 点赞
初冬雪 2012年07月17日
奇怪的是将IRQ定时器中断初始化放入主函数的while(1)循环体内不断重复才可以保持中断不被终止。问题依然没解决掉。
回复 点赞
woshi_ziyu 2012年07月12日
这个和IRQ中断不会有什么关系吧 还是仔细查一下吧
回复 点赞
发动态
发帖子
单片机/工控
创建于2007-09-28

1.0w+

社区成员

2.8w+

社区内容

硬件/嵌入开发 单片机/工控
社区公告
暂无公告