注册会员
积分 177
威望 105
贡献 40
兑换币 50
注册时间 2015-1-22
在线时间 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,请问我这代码有什么问题,求大神帮助!!!
我来回答