高级会员
- 积分
- 654
- 威望
- 311
- 贡献
- 189
- 兑换币
- 191
- 注册时间
- 2015-12-20
- 在线时间
- 77 小时
- 毕业学校
- 山东理工大学
|
#include "common.h"
#include "include.h"
//全局变量定义
volatile uint32 cnvtime = 0; //输入捕捉值
//函数声明
void FTM0_INPUT_IRQHandler(void); //FTM0中断服务函数
void PIT2_IRQHandler(void); //PIT中断服务函数
/*!
* @BRIEF main函数
* @note 测量频率
*/
void main()
{
uint32 cnvtime1=0;
uint32 cnvtime2=0;
ftm_input_init(FTM0, FTM_CH6, FTM_Falling,FTM_PS_2); //初始化FTM输入捕捉模式,下降沿捕捉(FTM0_CH6 为 PTD6)
lptmr_pulse_init(LPT0_ALT1, 0XFFFF, LPT_Rising);
pit_init_ms(PIT2, 10);
set_vector_handler(FTM0_VECTORn ,FTM0_INPUT_IRQHandler); //设置FTM0的中断服务函数为 FTM0_INPUT_IRQHandler
set_vector_handler(PIT2_VECTORn ,PIT2_IRQHandler); //设置PIT1的中断服务函数为 PIT0_IRQHandler
while(1)
{
lptmr_pulse_clean();
enable_irq (PIT0_IRQn);
pit_time_start(PIT2);
cnvtime1=cnvtime/10;
printf("\n捕捉到频率为:%d",cnvtime1);
FTM_IRQ_EN(FTM0,FTM_CH6);
//捕捉频率 = bus 时钟 / (分频系数) / cnvtime
//分频系数 是 由 初始化时传递进去的分频因子FTM_PS_e 决定,分频系数 = 1<<FTM_PS_e
//最大支持频率为 bus 时钟 四分之一
cnvtime2=bus_clk_khz/(1<<FTM_PS_2)/cnvtime;
printf("\n捕捉到频率为:%d",cnvtime2);
cnvtime = 0;
DELAY_MS(1000); //这里 的延时 ,仅仅是 避免 过于频繁打印数据到串口
}
}
void FTM0_INPUT_IRQHandler(void)
{
static uint8 flag = 0;
uint8 s = FTM0_STATUS; //读取捕捉和比较状态 All CHnF bits can be checked using only one read of STATUS.
uint8 CHn;
FTM0_STATUS = 0x00;
CHn = 6;
if( s & (1 << CHn) )
{
/* 用户任务 */
if(flag == 0)
{
//第一次进来,开始计时
flag++;
ftm_input_clean(FTM0); //清 计数器计数值
}
else if(flag == 1)
{
//第二次测到整个周期的时间
cnvtime = ftm_input_get(FTM0, FTM_CH6); //保存
flag = 0;
FTM_IRQ_DIS(FTM0,FTM_CH6); //关闭FTM0_CH6中断 (避免频繁中断)
}
/*********************/
}
}
void PIT2_IRQHandler(void)
{
PIT_Flag_Clear(PIT2); //清中断标志位
cnvtime=lptmr_pulse_get();
pit_close(PIT2);
}
算两路的频率
|
|