智能车制作

标题: LPLD库输入捕获的问题,无法上升沿和下降沿触发测高电平 [打印本页]

作者: qq773678889    时间: 2016-4-8 15:54
标题: LPLD库输入捕获的问题,无法上升沿和下降沿触发测高电平
用LPLD库输入捕获,测高电平持续的时间,捕获方式为上升和下降沿中断。给一个测试信号,设置为上升沿触发或者下降沿触发都可以正常进入中断,测出信号的周期频率,但是设置为上升沿下降沿中断就不行了,一直捕获不到。程序如下
/*产生脉宽10us,周期50ms的脉宽*/
void pwm_init(void)
{
  ftm_init_struct.FTM_Ftmx = FTM0;        //使能FTM0通道
  ftm_init_struct.FTM_Mode = FTM_MODE_PWM;        //使能PWM模式
  ftm_init_struct.FTM_PwmFreq = 20;        //PWM频率20Hz  周期50ms
  LPLD_FTM_Init(ftm_init_struct);
  LPLD_FTM_PWM_Enable(FTM0, FTM_Ch0,2 ,PTC1 , ALIGN_LEFT);//输出周期50ms,占空比0.01% 高电平10us的脉冲信号,驱动信号

  //LPLD_FTM_PWM_Enable(FTM0, FTM_Ch1,5000 ,PTC2 , ALIGN_LEFT);//测试信号   
}

void ic_init(void)
{
  //配置FTM1模块的输入捕获参数
  ftm1_init_struct.FTM_Ftmx = FTM1;      //使能FTM1通道
  ftm1_init_struct.FTM_Mode = FTM_MODE_IC;       //使能输入捕获模式
  ftm1_init_struct.FTM_ClkDiv = FTM_CLK_DIV128;  //计数器频率为总线时钟的128分频 2.56us记一个数
  ftm1_init_struct.FTM_Isr = ic_isr;     //设置中断函数
  //初始化FTM1
  LPLD_FTM_Init(ftm1_init_struct);  
  LPLD_FTM_IC_Enable(FTM1, FTM_Ch0, PTB0, CAPTURE_RI);//使能输入捕获对应通道,上升沿下降沿捕获进入中断
  //使能FTM1中断
  LPLD_FTM_EnableIrq(ftm1_init_struct);
}

void uart_init(void)
{
  uart5_init_struct.UART_Uartx = UART5; //使用UART5
  uart5_init_struct.UART_BaudRate = 9600; //设置波特率9600
  uart5_init_struct.UART_RxPin = PTE9;  //接收引脚为PTE9
  uart5_init_struct.UART_TxPin = PTE8;  //发送引脚为PTE8
  //初始化UART
  LPLD_UART_Init(uart5_init_struct);
}
void ic_isr(void)
{

  //判断是否为FTM1的Ch0通道产生捕获中断
  if(LPLD_FTM_IsCHnF(FTM1, FTM_Ch0))
  {
    cnt=LPLD_FTM_GetChVal(FTM1, FTM_Ch0);  //获取FTM1的Ch0通道计数值
    LPLD_FTM_ClearCounter(FTM1);
    countFreq=g_bus_clock/LPLD_FTM_GetClkDiv(FTM1);//计数频率390625;
    Freq1=(g_bus_clock/LPLD_FTM_GetClkDiv(FTM1))/cnt;  //脉冲频率=(总线频率/输入捕获分频系数)/计数值
    printf("%d  %d\n",cnt,Freq1);
    //清空FTM1 COUNTER
   // LPLD_FTM_ClearCounter(FTM1);
    //清除输入中断标志
    LPLD_FTM_ClearCHnF(FTM1, FTM_Ch0);
  }
}


作者: qq773678889    时间: 2016-4-10 17:05
搞了好几天了,有人知道原因吗? 为啥上升下降沿触发实现不了




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