6811|8

4

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

俺的TIMER捕获中断咋进不去(1114) [复制链接]

本人也是刚接触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;


}

此帖出自NXP MCU论坛

最新回复

楼主,您好,能分享一下经验吗?我用的是Atmega128也是进不了中断,不知道什么原因: void time1_init(void) {            TCCR1A=0x00;//普通模式,计数最大值为65535         TCCR1B|=(1  详情 回复 发表于 2012-3-22 13:59
点赞 关注
 

回复
举报

60

帖子

2

TA的资源

一粒金砂(中级)

沙发
 

回复 楼主 brave_guarder 的帖子

你的函数是周立功的吧?
问题写的太模糊!再细点!
此帖出自NXP MCU论坛
 
 
 

回复

60

帖子

2

TA的资源

一粒金砂(中级)

板凳
 

回复 楼主 brave_guarder 的帖子

用定时器捕获功能,不必用中断也可以,如下所示:
//初始化
void TIM32B0_CAP0(void)
{
                     SYSCON->SYSAHBCLKCTRL |= (1<<9);        //使能TIM32B0时钟
        IOCON->PIO1_5 &= ~0x07;
        IOCON->PIO1_5 |= 0x02;              //把P1.5脚设置为CAP0
        TMR32B0->CTCR  = 0x01;        //选择外来信号的上升沿作为TC递增,CAP0捕获
        TMR32B0->TC    = 0x00;        //TC清零
        TMR32B0->TCR   = 0x01;        //启动定时器
}
执行完这个函数,就可以读TC的值了,只要有一个脉冲经过P1.5脚,TC值就会加1,
这个函数已经试验过,放心使用!
此帖出自NXP MCU论坛
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

4
 

richgood ,首先谢谢你的回复。

这段代码的意图是,在P1.5脚输入脉冲,在下降沿的时刻,TIMER32B0CAP0进行捕获,然后进入中断并读取TC的值。

读取值这个没问题,可问题是进入不了中断。

如有详解请赐教

此帖出自NXP MCU论坛
 
 
 

回复

60

帖子

2

TA的资源

一粒金砂(中级)

5
 

回复 4楼 brave_guarder 的帖子

"调试中发现在捕获脚上输入脉冲信号,程序就进入DefualtVectorHandle();函数中"
DefualtVectorHandle();是个什么函数?为什么会进去?
此帖出自NXP MCU论坛
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

6
 
调试通了!翻了个“经验主义”,手册、例程还是要想看的。
谢谢楼上的各位同学的支持与回复
此帖出自NXP MCU论坛
 
 
 

回复

7228

帖子

192

TA的资源

五彩晶圆(高级)

7
 
loushang楼上的同学是高手 我也来学习
此帖出自NXP MCU论坛
 
 
 

回复

7228

帖子

192

TA的资源

五彩晶圆(高级)

8
 

回复 板凳 richgood 的帖子

您好 我有个疑问,P1.5 ZLG用的是按钮 可是 按钮连低电平的话 怎么会出现脉冲呢? P1.5设置的是CAP,开始能给1?
此帖出自NXP MCU论坛
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(中级)

9
 

回复 6楼 brave_guarder 的帖子

楼主,您好,能分享一下经验吗?我用的是Atmega128也是进不了中断,不知道什么原因:
void time1_init(void)
{   
        TCCR1A=0x00;//普通模式,计数最大值为65535
        TCCR1B|=(1<         TIMSK|=(1<         TCNT1=0;//计数器初始化
        SREG=0x80; //打开全局中断
}

INTERRUPT(SIG_INPUT_CAPTURE1)//T/C1捕捉中断
{
TCNT1=0; // 清零计数寄存器,下一次仍从0开始计数
while(TCCR1B&(1< {
  ICP_time_up=ICR1L;//读取ICP捕捉事件的发生时刻                                 
  TCCR1B&=~(1<
}
while(!(TCCR1B&(1< {
  ICP_time_down=ICR1L; //读取ICP捕捉事件的发生时刻                        
  TCCR1B|=(1<   flag=1;//已经完成一次采集
}                          
}
此帖出自NXP MCU论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表