俺的TIMER捕获中断咋进不去(1114)

2019-03-25 20:32发布

本人也是刚接触1114,编写了段程序可是进入不了中断,特请教各位同道中人。
我是想用定时器捕获功能,如能赐教不胜感激。 调试中发现在捕获脚上输入脉冲信号,程序就进入DefualtVectorHandle();函数中。可是关闭了中断注册函数zyIsrSet(NVIC_TIMER32B0, (uint32)TIMER32_0_IRQ_Handler, PRIO_TWO);程序就能正常运行。 推断应该是中断了,可没进入(uint32)TIMER32_0_IRQ_Handler(void)中断; void TIMER32B0_Init(void)
{
    SYSAHBCLKCTRL |= (1 << 9);     /* 打开定时器模块 */
    IOCON_PIO1_5 |= 0x02;          /* 配置P1.5为CT32B0_CAP0输入引脚*/
    TMR32B0TCR = 0x02;             /*reset timer*/
    TMR32B0PR = 0;                /* 设置分频系数 */
    TMR32B0CCR = 1 << 1;           /* 设置CAP0下降沿捕获 */
    TMR32B0CCR = 1 << 0;           /* 设置CAP0上升沿捕获 */
    TMR32B0TC = 0;                 /*定时器清零*/
    zyIsrSet(NVIC_TIMER32B0, (uint32)TIMER32_0_IRQ_Handler, PRIO_TWO);
    //TMR32B0IR = 0xff;              /*reset all timer interrupts*/
    TMR32B0IR  = 1 << 4;
    TMR32B0CCR |= 1 << 2;          /*捕获装载产生中断*/
    TMR32B0TCR = 0x01;             /* 启动定时器*/
    //zyIsrSet(NVIC_TIMER32B0, (uint32)TIMER32_0_IRQ_Handler, PRIO_TWO);
} unsigned long TIMER32_0_IRQ_Handler (void)
{
 uint32 t;
  flag = 1;
 temp = TMR32B0CR0; 
 TMR32B0IR = 1<<4;
} 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
8条回答
anxiaoxiao
2019-03-27 06:50
楼主,您好,能分享一下经验吗?我用的是Atmega128也是进不了中断,不知道什么原因:
void time1_init(void)
{   
        TCCR1A=0x00;//普通模式,计数最大值为65535
        TCCR1B|=(1<<ICES1)|(1<<ICNC1);//上升沿捕捉,开启输入捕捉噪声抑制器,时钟8分频|(1<<CS10)|(1<<CS11)
        TIMSK|=(1<<TICIE1)|(1<<TOIE1);//T/C1 输入捕捉中断使能(1<<ICNC1),溢出中断使能
        TCNT1=0;//计数器初始化
        SREG=0x80; //打开全局中断
}

INTERRUPT(SIG_INPUT_CAPTURE1)//T/C1捕捉中断
{
TCNT1=0; // 清零计数寄存器,下一次仍从0开始计数
while(TCCR1B&(1<<ICES1)) //如果是上升沿ICP
{
  ICP_time_up=ICR1L;//读取ICP捕捉事件的发生时刻                                 
  TCCR1B&=~(1<<ICES1);//改为下降沿ICP使能

}
while(!(TCCR1B&(1<<ICES1)))
{
  ICP_time_down=ICR1L; //读取ICP捕捉事件的发生时刻                        
  TCCR1B|=(1<<ICES1);//改为上升沿ICP使能
  flag=1;//已经完成一次采集
}                          
}

一周热门 更多>