|
理论上FTM的每个模块都可以单独触发相应通道引脚相关的中断的吧,可是 我的终端服务程序如果用在CHn = 0时可以触发中断,若再CHn=1 或者其他值都触发不了,求各位大神帮助,不知道是不是配置问题,找了两天原因都没找到, 求帮助呀,不甚感激
- void main()
- {
- DisableInterrupts; //禁止总中断
- gpio_init(PORTD, 7, GPO, HIGH); //初始化PTA9,输出高电平
- LED_INIT(); //初始化LED, FTM1_IRQHandler 中断函数里闪烁LED0
- FTM_Input_init(FTM0, CH1, Rising); //初始化FTM输入捕捉模式,上升沿触发
- EnableInterrupts; //开总中断
- while(1)
- {
- gpio_set(PORTD, 7, LOW); //PTA9产生低电平
- time_delay_ms(250); //延时一下
- gpio_set(PORTD, 7, HIGH); //PTA9产生高电平
- time_delay_ms(250); //延时一下
- }
- }
复制代码
- /*************************************************************************
- * 野火嵌入式开发工作室
- *
- * 函数名称:FTM1_IRQHandler
- * 功能说明:FTM1输入捕捉中断服务函数
- * 参数说明:无
- * 函数返回:无
- * 修改时间:2012-2-25
- * 备 注:引脚号需要根据自己初始化来修改,参考现有的代码添加自己的功能
- *************************************************************************/
- void FTM0_IRQHandler()
- {
- u8 s = FTM0_STATUS; //读取捕捉和比较状态 All CHnF bits can be checked using only one read of STATUS.
- u8 CHn;
- FTM0_STATUS = 0x00; //清中断标志位
- CHn = 0;
- if( s & (1 << CHn) )
- {
- FTM_IRQ_DIS(FTM0, CHn); //禁止输入捕捉中断
- /* 用户任务
- LED_turn(LED0);
- time_delay_ms(50);
- LED_turn(LED1);
- time_delay_ms(50);
- LED_turn(LED2);
- time_delay_ms(50);
- LED_turn(LED3);
- time_delay_ms(50);*/
- /*********************/
- //不建议在这里开启输入捕捉中断,而是在main函数里根据需要来开启
- //通道 CH0、CH1、Ch2、Ch3 有滤波器
- FTM_IRQ_EN(FTM0, CHn); //开启输入捕捉中断
- //delayms(10); //因为输入的信号跳变过程不稳定,容易触发多次输入捕捉,所以添加延时
- //但考虑到中断不应该过长延时,所以开输入捕捉中断就放在main函数里,根据需要来开启
- }
- /* 这里添加 n=1 的模版,根据模版来添加 */
- CHn = 1;
- if( s & (1 << CHn) )
- {
- FTM_CnSC_REG(FTM0_BASE_PTR, CHn) &= ~FTM_CnSC_CHIE_MASK; //禁止输入捕捉中断
- /* 用户任务 */
- LED_turn(LED0);
- time_delay_ms(50);
- LED_turn(LED1);
- time_delay_ms(50);
- LED_turn(LED2);
- time_delay_ms(50);
- LED_turn(LED3);
- time_delay_ms(50);
- /*********************/
- //不建议在这里开启输入捕捉中断
- //FTM_CnSC_REG(FTM1_BASE_PTR,n) |= FTM_CnSC_CHIE_MASK; //开启输入捕捉中断
- }
- }
复制代码
|
|