用ICD3和ICD2调试模式下,输入捕捉能正常运行,程序烧入芯片后输入捕捉就不发生捕捉事件,也不产生中断了,配置程序如下:
TRISBbits.TRISB4=1;
//输入捕捉控制设定
IC7CONbits.ICSIDL = 0;
IC7CONbits.ICTMR = 1; //TIMER2
IC7CONbits.ICI = 0; //每次捕捉中断一次
IC7CONbits.ICM = 0; //上升沿捕捉模式
IFS1bits.IC7IF = 0;
IEC1bits.IC7IE = 0;
//使用定时器2(不复用)
TMR2 = 0; // 清除定时器2
PR2 = 0xFFFF; // 设定周期
T2CONbits.TCKPS = 0b00; //频率1:1
IFS0bits.T2IF = 0; //清除定时器2中断标志
IEC0bits.T2IE = 0; //禁止定时器2中断
int temp;
//相关变量初始化
pinCaptureStages = FirstStages; //测量过程初始化
memset(&pinMeasures, 0, sizeof(PIN_MEASURES)); //清除上次的测量数据
//清除IC7缓存
while(IC7CONbits.ICBNE)
temp = IC7BUF;
//IC捕捉设置
IC7CONbits.ICM = 0b11; //上升沿捕捉模式
//启动相关中断
T2CONbits.TON = 1; //启动定时器
IFS1bits.IC7IF = 0;
IEC1bits.IC7IE = 1; //启动输入捕捉
一直找不到原因,用编程器调试,又能产生中断,而烧入芯片后又不能产生中断也不发生捕捉事件,初始化如下,调试下可以,不知道烧入芯片后要不要改下面的配置
//初始化器件工作速度
_FOSC(CSW_FSCM_OFF&FRC_PLL8); //内部快速振荡器,MIPS=14.74(7.37*8/4)
_FWDT(WDT_OFF&WDTPSA_1&WDTPSB_2); //关闭看门狗(软件开启,周期4ms)
_FBORPOR(MCLR_ON&PWRT_16); //使用 MCLR reset 引脚
//上电延时64ms复位,
//欠压复位
_FGS(CODE_PROT_OFF); //禁止代码保护 |