高级会员
- 积分
- 572
- 威望
- 291
- 贡献
- 169
- 兑换币
- 178
- 注册时间
- 2015-3-10
- 在线时间
- 56 小时
- 毕业学校
- NIT
|
用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);
}
}
|
|