智能车制作
标题:
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