本帖最后由 lishong 于 2011-3-18 18:09 编辑
测试程序结构如下:
extern void Timer1_Handler(void);
volatile uint32 timCntB;
void Timer1Init (void)
{
T1TCR = 0x00;
T1IR = 0xffffffff;
T1CTCR= 0x00;
T1TC = 0;
T1PR = 0;
T1MCR = 0x03;
T1MR0 = Fpclk;//每秒中断一次
VICIntSelect = 0;
VICVectAddr0 = (uint32)Timer1_Handler;
VICVectCntl0 = 0x05;
VICIntEnable |= 1 << 5;
T1TCR = 0x03;
T1TCR = 0x01;
}
void Timer1_Exception(void)
{
VICIntEnClr = 1 << 5;
VICVectAddr = 0; //interrupt close 通知中断控制器中断结束
if(timCntB == 0)
{
timCntB = 1;
led1On();//led1亮
}
else
{
timCntB = 0;
led1Off();//led1灭
}
T1IR = 0x01;
VICIntEnable = 1 << 5;
}
void main()
{
timCntB = 0;
Timer1Init ();
while(1)
{
if(timCntB == 0)
{
led2On();//led2亮
}
else if(timCntB == 1)
{
led2Off();//led2灭
}
}
}
现在出现的现象是:led2能正常亮/灭;而led1不能.
根据这个现象可以肯定的是每秒一次中断是正常的,但在中断处理程序里面,变量timCntB 的标志修改了,但led1没有正常工作.请问是什么原因导致这个问题的呢?
另:
ledxOn()和ledxOff()如下结构定义
#define ledXOn() {FIO1MASK = 0xffffffff & (~P1X);FIO1CLR |= P1X;}
#define ledXOff() {FIO1MASK = 0xffffffff & (~P1X);FIO1SET |=
P1X;}
我试过把两个灯在程序里互换了位置,结果也是在中断中的灯不能正常亮/灭.所以,不是灯和等的控制问题. |