在线时间6 小时
UID3064558
注册时间2014-11-19
NXP金币0
该用户从未签到
注册会员

- 积分
- 67
- 最后登录
- 2015-4-2
|
采用FTM1 CH0 CH1 ,FTM2 CH0 CH1 ,测量四路脉冲高电平时间,不知为什么经常采集错误,PIT中断是2.5ms,如下是我的代码,
- 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, 1); //禁止输入捕捉中断
- if(GPIO_Get(PORTB, 0)==1)
- {
- Rise[0]=PIT_CVAL_REG(PIT_BASE_PTR,PIT0); //说明发生上升沿中断,记录此时的时刻 Rise[0]
-
- }
- else
- {
- Drop[0]=PIT_CVAL_REG(PIT_BASE_PTR,PIT0); //说明发生下升沿中断,记录此时的时刻 Drop[0]
- if(Rise[0]>Drop[0])
- Rc_Data.YAW =(Rise[0] - Drop[0])/50 ; // |Rise[0] - Drop[0]|差值的绝对值等于高电平的时间
- else
- Rc_Data.YAW = (125000- Drop[0]+ Rise[0])/50; // 计时器从125000开始递减计数,共2.5ms ,捕捉的通道频率为400K
- // Rc_Data.YAW = FTM1_CNT ;
- // FTM_IRQ_EN(FTM1, 1); //开启输入捕捉中断
- }
- }
- CHn = 1;
- if( s & (1 << CHn) )
- {
- //
- if(GPIO_Get(PORTB, 1)==1)
- {
- Rise[1]=PIT_CVAL_REG(PIT_BASE_PTR,PIT0); //说明发生上升沿中断,记录此时的时刻 Rise[1]
- FTM1_CNT=0;
- }
- else
- {
- Drop[1]=PIT_CVAL_REG(PIT_BASE_PTR,PIT0); //说明发生上升沿中断,记录此时的时刻 Rise[1]
- if(Rise[1]>Drop[1])
- Rc_Data.THROTTLE =(Rise[1] - Drop[1])/50 ; // |Rise[1] - Drop[1]|差值的绝对值等于高电平的时间
- else
- Rc_Data.THROTTLE= (125000- Drop[1]+ Rise[1])/50; // 计时器从125000开始递减计数,共2.5ms ,捕捉的通道频率为400KZ
- // Rc_Data.THROTTLE= FTM1_CNT ;
- // FTM_IRQ_EN(FTM1, 0); //开启输入捕捉中断
- }
- }
- }
- /*************************************************************************
- * 湖北工业大学力创实验室
- *
- * 函数名称:FTM2_IRQHandler
- * 功能说明:FTM1输入捕捉中断服务函数
- * 参数说明:无
- * 函数返回:无
- * 修改时间:2015-1-12
- * 备 注:引脚号需要根据自己初始化来修改,参考现有的代码添加自己的功能
- *************************************************************************/
- void FTM2_IRQHandler()
- {
- u8 s = FTM2_STATUS; //读取捕捉和比较状态 All CHnF bits can be checked using only one read of STATUS.
- u8 CHn;
- FTM2_STATUS = 0x00; //清中断标志位
- CHn = 0;
- if( s & (1 << CHn) )
- {
- if(GPIO_Get(PORTB, 18)==1)
- {
- Rise[2]=PIT_CVAL_REG(PIT_BASE_PTR,PIT0); //说明发生上升沿中断,记录此时的时刻 Rise[2]
- }
- else
- {
- Drop[2]=PIT_CVAL_REG(PIT_BASE_PTR,PIT0); //说明发生上升沿中断,记录此时的时刻 Rise[2]
- if(Rise[2]>Drop[2])
- Rc_Data.PITCH =(Rise[2] - Drop[2])/50 ; // |Rise[2] - Drop[2]|差值的绝对值等于高电平的时间
- else
- Rc_Data.PITCH = (125000- Drop[2]+ Rise[2])/50; // 计时器从125000开始递减计数,共2.5ms ,捕捉的通道频率为400KZ
- }
- }
- CHn = 1;
- if( s & (1 << CHn) )
- {
- if(GPIO_Get(PORTB, 19)==1)
- {
- Rise[3]=PIT_CVAL_REG(PIT_BASE_PTR,PIT0); //说明发生上升沿中断,记录此时的时刻 Rise[3]
- }
- else
- {
- Drop[3]=PIT_CVAL_REG(PIT_BASE_PTR,PIT0); //说明发生上升沿中断,记录此时的时刻 Rise[3]
- if(Rise[3]>Drop[3])
- Rc_Data.ROLL =(Rise[3] - Drop[3])/50 ; // |Rise[3] - Drop[3]|差值的绝对值等于高电平的时间
- else
- Rc_Data.ROLL = (125000- Drop[3]+ Rise[3])/50; // 计时器从125000开始递减计数,共2.5ms ,捕捉的通道频率为400KZ
- }
- }
- }
复制代码 不知哪位能有比较好的方法,能够同时测量四路脉冲高电平时间啊
|
|