| 
 
| 综述: 弹性定时器模块( 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;  //开启输入捕捉中断
 }
 
 }
 
 
 | 
 |