智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 10242|回复: 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

使用道具 举报

12

主题

73

帖子

0

精华

高级会员

Rank: 4

积分
858
威望
459
贡献
237
兑换币
281
注册时间
2014-5-13
在线时间
81 小时
毕业学校
西安邮电大学
16#
发表于 2015-7-19 23:14:50 | 只看该作者
野火 发表于 2013-1-21 23:35
修改内容是 FTM_Input_init 函数下:

***,,怎么用pwm输入捕捉模块获取高电平时间,设置了上升沿和下降沿触发,
初始化输入捕获怎么去设置寄存器,怎样获取那个通道cnv的值? 不是在中断里标志位的那种,就直接获取cnv时间(我是测试超声波返回的高电平时间,cnv用于计算超声波距离)。

回复 支持 反对

使用道具 举报

12

主题

73

帖子

0

精华

高级会员

Rank: 4

积分
858
威望
459
贡献
237
兑换币
281
注册时间
2014-5-13
在线时间
81 小时
毕业学校
西安邮电大学
15#
发表于 2015-7-19 23:13:54 | 只看该作者
湖大-唐梓毅 发表于 2015-3-29 10:26
除此之外还有BUG啊!
FTM.c:
注意滴14行,明明是PTB18,却初始化了PTA18的引脚,这样FTM2怎么可能好用 ...

怎么用pwm输入捕捉模块获取高电平时间,设置了上升沿和下降沿触发,
初始化输入捕获怎么去设置寄存器,怎样获取那个通道cnv的值? 不是在中断里标志位的那种,就直接获取cnv时间(我是测试超声波返回的高电平时间,cnv用于计算超声波距离)。
回复 支持 反对

使用道具 举报

14

主题

59

帖子

0

精华

高级会员

Rank: 4

积分
706
威望
401
贡献
193
兑换币
243
注册时间
2014-1-28
在线时间
56 小时
毕业学校
兼善中学
14#
发表于 2015-5-9 11:02:25 | 只看该作者
野火 发表于 2013-1-21 23:35
修改内容是 FTM_Input_init 函数下:

*** 求助 为啥FTM2正交解码无法判定正反
回复 支持 反对

使用道具 举报

1

主题

17

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1257
威望
669
贡献
380
兑换币
322
注册时间
2012-6-29
在线时间
104 小时
毕业学校
广西大学
13#
发表于 2015-4-30 21:19:38 | 只看该作者
***,我两个FTM1的PTA9还是不能捕抓脉冲呢?怎么回事?
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

注册会员

Rank: 2

积分
64
威望
42
贡献
14
兑换币
15
注册时间
2014-2-19
在线时间
4 小时
毕业学校
湖南大学
12#
发表于 2015-3-29 10:26:00 | 只看该作者
野火 发表于 2013-1-21 23:35
修改内容是 FTM_Input_init 函数下:

除此之外还有BUG啊!
FTM.c:
  1. case FTM2:
  2.         SIM_SCGC3 |= SIM_SCGC3_FTM2_MASK;                           //使能FTM2时钟
  3.         switch(ch)
  4.         {
  5.         case CH0:
  6.             if(FTM2_CH0 == PTA10)
  7.             {
  8.                 SIM_SCGC5 |= SIM_SCGC5_PORTA_MASK;
  9.                 PORT_PCR_REG(PORTA_BASE_PTR, 10) = PORT_PCR_MUX(3);  // PTA10
  10.             }
  11.             else if(FTM2_CH0 == PTB18)
  12.             {
  13.                 SIM_SCGC5 |= SIM_SCGC5_PORTB_MASK;
  14.                 PORT_PCR_REG(PORTA_BASE_PTR, 18) = PORT_PCR_MUX(3);  // PTB18
  15.             }
  16.             else
  17.             {
  18.                 assert_failed(__FILE__, __LINE__);                   //设置管脚有误?
  19.             }
  20.             break;
复制代码
注意滴14行,明明是PTB18,却初始化了PTA18的引脚,这样FTM2怎么可能好用。。。一看就是复制粘贴是修改不用心
下面的PTB19也是一样!
回复 支持 反对

使用道具 举报

3

主题

40

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1181
威望
610
贡献
347
兑换币
385
注册时间
2014-4-2
在线时间
112 小时
毕业学校
湖北理工学院
11#
发表于 2014-9-13 17:15:08 | 只看该作者
野火 发表于 2013-1-21 23:34
非常抱歉,是个bug,给你带来麻烦
同时非常感谢你提出问题,以便我们发现bug,谢谢你的支持
请下载附件,替 ...

***,用FTM输出PWM信号时,那个频率我想设置成跟模块一样的 ,就是48MHZ,怎么弄啊,初始化函数里边无法设置很大的频率。最多就几十KHZ,谢谢你拉 ,***。
回复 支持 反对

使用道具 举报

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)做输入捕捉,两天没做出来。。。原来如此。。。
回复 支持 反对

使用道具 举报

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;  //开启输入捕捉中断    }
}
火哥,为什么进入捕获中断之后退不出来呢?

回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-29 11:54 , Processed in 0.294300 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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