综述:
弹性定时器模块( FTM )是一个支持输入捕捉,出比较和产生PWM信号来控制电动机和源管理应用的 2-8通道定时器。FTM 时钟参考是一个可以作为无符号或有符号的 16 位计数器。
相关函数:
初始化
FTM_PWM_init(ftmn模块号, CHn ch通道号, u32 freq频率(Hz), u32 duty占空比)
设置通道占空比
void FTM_PWM_Duty(FTMn ftmn, CHn ch, u32 duty)
设置FTM的频率
void FTM_PWM_freq(FTMn ftmn, u32 freq)
输入捕捉初始化函数
void FTM_Input_init(FTMn ftmn, CHn ch, Input_cfg cfg)
例程:
/*************************************************************************
* 野火嵌入式开发工作室
* FTM 输入捕捉中断测试
*
* 实验说明:野火 FTM 输入捕捉中断实验,用LED显示是否进入了中断。
*
* 实验操作:这里用 FTM1_CH0 输入捕捉 ,即 PTA8 管脚。
* PTA9 产生方波 ,把 PTA9 和 PTA8 短接 ,
* 即PTA9产生的上升沿来触发 FTM1_CH0 中断
*
* 实验效果:LED0闪烁
*
* 实验目的:测试 FTM1_CH0 输入捕捉功能
*
* 修改时间:2012-2-29 已测试
*
* 备 注:FTM.h 里有各个FTM通道所对应管脚的表格,方便查看
*
*************************************************************************/
void main()
{
DisableInterrupts; //禁止总中断
gpio_init(PORTA, 9, GPO, HIGH); //初始化PTA9,输出高电平
LED_INIT(); //初始化LED, FTM1_IRQHandler 中断函数里闪烁LED0
FTM_Input_init(FTM1, CH0, Rising); //初始化FTM输入捕捉模式,上升沿触发
EnableInterrupts; //开总中断
while(1)
{
gpio_set(PORTA, 9, LOW); //PTA9产生低电平
time_delay_ms(250); //延时一下
gpio_set(PORTA, 9, HIGH); //PTA9产生高电平
time_delay_ms(250); //延时一下
}
}
/*************************************************************************
* 野火嵌入式开发工作室
*
* 函数名称:FTM1_IRQHandler
* 功能说明:FTM1输入捕捉中断服务函数
* 参数说明:无
* 函数返回:无
* 修改时间:2012-2-25
* 备 注:引脚号需要根据自己初始化来修改,参考现有的代码添加自己的功能
*************************************************************************/
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); //禁止输入捕捉中断
/* 用户任务 */
LED_turn(LED0); //翻转LED0
/*********************/
//不建议在这里开启输入捕捉中断,而是在main函数里根据需要来开启
//通道 CH0、CH1、Ch2、Ch3 有滤波器
FTM_IRQ_EN(FTM1, CHn); //开启输入捕捉中断
//delayms(10); //因为输入的信号跳变过程不稳定,容易触发多次输入捕捉,所以添加延时
//但考虑到中断不应该过长延时,所以开输入捕捉中断就放在main函数里,根据需要来开启
}
/* 这里添加 n=1 的模版,根据模版来添加 */
CHn = 1;
if( s & (1 << CHn) )
{
FTM_CnSC_REG(FTM1_BASE_PTR, CHn) &= ~FTM_CnSC_CHIE_MASK; //禁止输入捕捉中断
/* 用户任务 */
/*********************/
//不建议在这里开启输入捕捉中断
//FTM_CnSC_REG(FTM1_BASE_PTR,n) |= FTM_CnSC_CHIE_MASK; //开启输入捕捉中断
}
}
|