智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 10246|回复: 15
打印 上一主题 下一主题

野火FTM 输入捕捉中断测试求解

  [复制链接]

14

主题

99

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1242
威望
760
贡献
412
兑换币
156
注册时间
2011-11-10
在线时间
35 小时
跳转到指定楼层
1#
发表于 2013-1-21 21:05:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
FTM1_CH0~PA8,当选PA9输出PWM,PA8捕获时正常,
FTM1_CH1~PA9,当选PA8输出PWM,PA9捕获时无现象,

按理说FTM1的两个通道都可以作为输出或捕获,不明白为什么把捕获和输入的通道换了之后就不好使了?
以下是程序:
/*************************************************************************
*  函数名称:main
*************************************************************************/

void  main(void)
{
  DisableInterrupts;                                   //禁止总中断
  
  gpio_init(PORTA,8,GPO,HIGH);                 //PA8产生PWM波
  
  gpio_init(PORTA,14,GPO,HIGH);                //初始化LED
   
  FTM_Input_init(FTM1,CH1,Falling);            //TIM1_CH1捕获PWM波
  
  EnableInterrupts;
  
  while(1)
  {
     
     gpio_set(PORTA,8,LOW);
     time_delay_ms(250);
     
     gpio_set(PORTA,8,HIGH);
     time_delay_ms(250);
  }
}


/*************************************************************************
*  函数名称:FTM1_IRQHandler
*  功能说明:FTM1输入捕获中断服务函数
*************************************************************************/
void FTM1_IRQHandler(void)
{
    u8 sign=FTM1_STATUS;       //读取中断标志
    FTM1_STATUS=0x00;          //清除中断标志
   
    u8 CHn=1;
   
    if(sign&(1<<CHn))
    {
      FTM_IRQ_DIS(FTM1,CHn);   //禁止输入捕捉中断
      
      gpio_turn(PORTA,14);
      
      FTM_IRQ_EN(FTM1,CHn);    //开启输入捕捉中断
    }
}

14

主题

53

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
470
QQ
威望
266
贡献
112
兑换币
155
注册时间
2012-12-12
在线时间
46 小时
推荐
发表于 2013-6-30 16:31:13 | 只看该作者
楼主,你这程序要知道脉冲计数到底是多少值的话看什么呀?
回复 支持 1 反对 0

使用道具 举报

22

主题

1613

帖子

1

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6784
QQ
威望
2910
贡献
1540
兑换币
1579
注册时间
2012-3-17
在线时间
1167 小时
2#
发表于 2013-1-21 23:34:00 | 只看该作者
非常抱歉,是个bug,给你带来麻烦
同时非常感谢你提出问题,以便我们发现bug,谢谢你的支持
请下载附件,替换工程的src\drivers\FTM\FTM.c

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

22

主题

1613

帖子

1

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6784
QQ
威望
2910
贡献
1540
兑换币
1579
注册时间
2012-3-17
在线时间
1167 小时
3#
发表于 2013-1-21 23:35:32 | 只看该作者
修改内容是 FTM_Input_init 函数下:
  1.     /******************* 设置为输入捕捉功能 *******************/
  2.     switch(cfg)
  3.     {
  4.     case Rising:    //上升沿触发
  5.         FTM_CnSC_REG(FTMx[ftmn], ch) |=  ( FTM_CnSC_ELSA_MASK  | FTM_CnSC_CHIE_MASK );                   //置1
  6.         FTM_CnSC_REG(FTMx[ftmn], ch) &= ~( FTM_CnSC_ELSB_MASK  | FTM_CnSC_MSB_MASK | FTM_CnSC_MSA_MASK); //清0
  7.         break;

  8.     case Falling:   //下降沿触发
  9.         FTM_CnSC_REG(FTMx[ftmn], ch) |= (FTM_CnSC_ELSB_MASK  | FTM_CnSC_CHIE_MASK );                    //置1
  10.         FTM_CnSC_REG(FTMx[ftmn], ch) &= ~( FTM_CnSC_ELSA_MASK | FTM_CnSC_MSB_MASK | FTM_CnSC_MSA_MASK); //清0
  11.         break;

  12.     case Rising_or_Falling: //上升沿、下降沿都触发
  13.         FTM_CnSC_REG(FTMx[ftmn], ch) |=  ( FTM_CnSC_ELSB_MASK | FTM_CnSC_ELSA_MASK  | FTM_CnSC_CHIE_MASK ); //置1
  14.         FTM_CnSC_REG(FTMx[ftmn], ch) &= ~( FTM_CnSC_MSB_MASK  | FTM_CnSC_MSA_MASK); //清0
  15.         break;
  16.     }
复制代码
回复 支持 反对

使用道具 举报

4

主题

124

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2502
威望
1256
贡献
814
兑换币
683
注册时间
2012-6-4
在线时间
216 小时
毕业学校
长春理工
4#
发表于 2013-1-22 00:06:10 | 只看该作者
哎呦,豪哥牛叉
回复 支持 反对

使用道具 举报

14

主题

99

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1242
威望
760
贡献
412
兑换币
156
注册时间
2011-11-10
在线时间
35 小时
5#
 楼主| 发表于 2013-1-22 10:25:26 | 只看该作者
多谢火哥,问题解决了
回复 支持 反对

使用道具 举报

17

主题

671

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6187
QQ
威望
3024
贡献
1755
兑换币
1315
注册时间
2012-2-4
在线时间
704 小时
6#
发表于 2013-1-22 10:36:36 | 只看该作者
回复 支持 反对

使用道具 举报

1

主题

24

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1505

优秀会员奖章

威望
775
贡献
472
兑换币
211
注册时间
2011-11-25
在线时间
129 小时
7#
发表于 2013-3-13 19:50:48 | 只看该作者
野火 发表于 2013-1-21 23:35
修改内容是 FTM_Input_init 函数下:

火哥,K60的PWM捕获的允许最大频率是多少?
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
206
威望
136
贡献
48
兑换币
9
注册时间
2012-9-4
在线时间
11 小时
毕业学校
江西理工大学
9#
发表于 2013-8-6 20:09:08 | 只看该作者
野火 发表于 2013-1-21 23:35
修改内容是 FTM_Input_init 函数下:

void main()
{
    DisableInterrupts;            //禁止总中断

   // gpio_init(PORTA,9,GPO,HIGH);                  //初始化PTA9,输出高电平
    LED_INIT();                                  //初始化LED, FTM1_IRQHandler 中断函数里闪烁LED0
    FTM_Input_init(FTM1,CH0,Rising);             //初始化FTM输入捕捉模式,上升沿触发

    EnableInterrupts;                                 //开总中断

    while(1)
    {   
      /*  gpio_set(PORTA,9,LOW);                  //PTA9产生低电平

        time_delay_ms(250);                     //延时一下

        gpio_set(PORTA,9,HIGH);                 //PTA9产生高电平

        time_delay_ms(250);                     //延时一下*/
    }
}
void FTM1_IRQHandler(){    u8 s = FTM1_STATUS;             //读取捕捉和比较状态  All CHnF bits can be checked using only one read of STATUS.    u8 CHn;    FTM1_STATUS = 0x00;             //清中断标志位
    CHn = 0;    if( s & (1 << CHn) )    {        FTM_IRQ_DIS(FTM1, CHn);     //禁止输入捕捉中断        /*     用户任务       */        pwmtest++;                             //计数+1

        /*********************/        //不建议在这里开启输入捕捉中断,而是在main函数里根据需要来开启        //通道 CH0、CH1、Ch2、Ch3 有滤波器        FTM_IRQ_EN(FTM1, CHn); //开启输入捕捉中断        //delayms(10);        //因为输入的信号跳变过程不稳定,容易触发多次输入捕捉,所以添加延时        //但考虑到中断不应该过长延时,所以开输入捕捉中断就放在main函数里,根据需要来开启    }
    /* 这里添加 n=1 的模版,根据模版来添加 */    CHn = 1;    if( s & (1 << CHn) )    {        FTM_CnSC_REG(FTM1_BASE_PTR, CHn) &= ~FTM_CnSC_CHIE_MASK; //禁止输入捕捉中断        /*     用户任务       */

        /*********************/        //不建议在这里开启输入捕捉中断        //FTM_CnSC_REG(FTM1_BASE_PTR,n) |= FTM_CnSC_CHIE_MASK;  //开启输入捕捉中断    }
}
火哥,为什么进入捕获中断之后退不出来呢?

回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

高级会员

Rank: 4

积分
546
威望
274
贡献
158
兑换币
166
注册时间
2013-11-2
在线时间
57 小时
毕业学校
南京理工大学
10#
发表于 2014-4-7 02:12:28 | 只看该作者
野火 发表于 2013-1-21 23:34
非常抱歉,是个bug,给你带来麻烦
同时非常感谢你提出问题,以便我们发现bug,谢谢你的支持
请下载附件,替 ...

艾玛,0改成了ch,我也用PTA9(PTM1,CH1)做输入捕捉,两天没做出来。。。原来如此。。。
回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-31 04:28 , Processed in 0.062744 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表