智能车制作

标题: 用野火做外部下降沿捕捉 [打印本页]

作者: Shenmegui    时间: 2015-2-2 13:35
标题: 用野火做外部下降沿捕捉
外部下降沿中断,将捕捉到的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,请问我这代码有什么问题,求大神帮助!!!




欢迎光临 智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2