本帖最后由 jie581 于 2012-10-17 13:16 编辑
请教一下:我在debug模式下输入捕获可以进入中断,但烧写进去后就进不了中断了,不管烧写的debug版本还是release版本。我用一个IO口模拟方波信号然后让其输入捕获。
void timer2_init(void) ////Tmer2作为捕获定时器
{
T2CON = 0;
TMR2=0;
T2CONbits.TON = 1; //TON:定时器开控制位,1 = 启动定时器
//没有分频1:1
}
void in_capture_init(void)
{
int i;
//捕获端口
TRISBbits.TRISB5=1;
IC8CON=0;
IC8CONbits.ICM=0x011; //每个上升沿都捕获
IC8CONbits.ICI=0x00; //每次捕获1个后中断
IC8CONbits.ICTMR=0x1; //TMR2作为捕获定时器
IPC4bits.IC8IP=7; //IC8的中断优先级;
IFS1bits.IC8IF=0; //
IEC1bits.IC8IE=1; //IC1IE:输入捕捉通道1 中断允许位;
}
void __attribute__((__interrupt__,auto_psv)) _IC8Interrupt(void)
{
int i;
ic8_num++;
if(ic8_num==65535)
{
ic8_num=0;
}
CaptureValue[0] = IC8BUF;//获取捕捉值
IFS1bits.IC8IF=0; //中断标志位清零
}
int main (void)
{
int i;
ioport_init(); //I/O初始化
timer2_init();
in_capture_init();
while(1)
{
TRISGbits.TRISG1=0; //RG1 AS YXCS0 OUT,设置为输出
if(frequency_flag==1)
{
LATG|=0x0002; //输出高电平
frequency_flag=0;
}else{
LATG&=0x0000; //输出低电平
frequency_flag=1;
}
for(i=0;i<5000;i++)
{
__asm__ volatile ("nop");
}
}
} |