智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1044|回复: 0
打印 上一主题 下一主题

用野火做外部下降沿捕捉

[复制链接]

3

主题

12

帖子

0

精华

注册会员

Rank: 2

积分
177
威望
105
贡献
40
兑换币
50
注册时间
2015-1-22
在线时间
16 小时
毕业学校
中山大学南方学院
跳转到指定楼层
1#
发表于 2015-2-2 13:35:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
3贡献
外部下降沿中断,将捕捉到的2个下降沿之间的时间计算出来
#include "common.h"
#include "include.h"
#include  "FTM.h"
#include  "PIT.h"
#include "uart.h"
volatile u32 pwmtest=0,a=0; //用来计数

void uart_init (UARTn,u32 baud);  

void main()
{ uart_init (UART1,19200);
  DisableInterrupts; //禁止总中断
  FTM_PWM_init(FTM2,CH0,100,50); //PTA10 100Hz
  pit_init(PIT0,62500); //1ms产生一次中断

  FTM_Input_init(FTM1,CH0,Falling); //初始化FTM输入捕捉模式,下降沿触发

  EnableInterrupts; //开总中断

}
void PIT0_IRQHandler(void)
{
  DisableInterrupts; //禁止总中断
   a++;
  PIT_Flag_Clear(PIT0); //清中断标志位
  EnableInterrupts; //开总中断
}
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); //禁止输入捕捉中断
      /* 用户任务 */
      printf("用时:%d us",a);
      a=0;
     pwmtest++; //计数+1
      if(pwmtest==1) //当捕捉第一次下降沿时
       {
       a=0;
       }
         if(pwmtest==2)//当捕捉第二次次下降沿时
  {
           
  printf("两低电平之间时间为:%d ms",a);
  a=0;
  
  
  }
      /*********************/
       FTM_IRQ_EN(FTM1,CHn); //开启输入捕捉中断
     
    }
    /* 这里添加 n=1 的模版,根据模版来添加 */
   CHn=1;
  if( s & (1<<CHn) )
  {
   FTM_CnSC_REG(FTM1_BASE_PTR,CHn) &= ~FTM_CnSC_CHIE_MASK; //禁止输入捕捉中断
      /* 用户任务 */
      
      
      /*********************/
   }
   
}


算出来的时间是16ms,请问我这代码有什么问题,求大神帮助!!!

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-27 03:09 , Processed in 0.041248 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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