智能车制作

标题: 关于中断的求助 [打印本页]

作者: sunshineabner    时间: 2014-9-28 23:16
标题: 关于中断的求助
理论上FTM的每个模块都可以单独触发相应通道引脚相关的中断的吧,可是 我的终端服务程序如果用在CHn = 0时可以触发中断,若再CHn=1 或者其他值都触发不了,求各位大神帮助,不知道是不是配置问题,找了两天原因都没找到,     求帮助呀,不甚感激


  1. void main()
  2. {
  3.     DisableInterrupts;            //禁止总中断

  4.     gpio_init(PORTD, 7, GPO, HIGH);               //初始化PTA9,输出高电平
  5.     LED_INIT();                                  //初始化LED, FTM1_IRQHandler 中断函数里闪烁LED0
  6.     FTM_Input_init(FTM0, CH1, Rising);           //初始化FTM输入捕捉模式,上升沿触发

  7.     EnableInterrupts;                                 //开总中断

  8.     while(1)
  9.     {
  10.         gpio_set(PORTD, 7, LOW);                //PTA9产生低电平

  11.         time_delay_ms(250);                     //延时一下

  12.         gpio_set(PORTD, 7, HIGH);               //PTA9产生高电平

  13.         time_delay_ms(250);                     //延时一下
  14.     }
  15. }
复制代码

  1. /*************************************************************************
  2. *                             野火嵌入式开发工作室
  3. *
  4. *  函数名称:FTM1_IRQHandler
  5. *  功能说明:FTM1输入捕捉中断服务函数
  6. *  参数说明:无
  7. *  函数返回:无
  8. *  修改时间:2012-2-25
  9. *  备    注:引脚号需要根据自己初始化来修改,参考现有的代码添加自己的功能
  10. *************************************************************************/
  11. void FTM0_IRQHandler()
  12. {
  13.     u8 s = FTM0_STATUS;             //读取捕捉和比较状态  All CHnF bits can be checked using only one read of STATUS.
  14.     u8 CHn;
  15.     FTM0_STATUS = 0x00;             //清中断标志位

  16.     CHn = 0;
  17.     if( s & (1 << CHn) )
  18.     {
  19.         FTM_IRQ_DIS(FTM0, CHn);     //禁止输入捕捉中断
  20.         /*     用户任务      
  21.         LED_turn(LED0);   
  22.         time_delay_ms(50);
  23.         LED_turn(LED1);
  24.         time_delay_ms(50);
  25.         LED_turn(LED2);
  26.         time_delay_ms(50);
  27.         LED_turn(LED3);
  28.         time_delay_ms(50);*/

  29.         /*********************/
  30.         //不建议在这里开启输入捕捉中断,而是在main函数里根据需要来开启
  31.         //通道 CH0、CH1、Ch2、Ch3 有滤波器
  32.         FTM_IRQ_EN(FTM0, CHn); //开启输入捕捉中断
  33.         //delayms(10);        //因为输入的信号跳变过程不稳定,容易触发多次输入捕捉,所以添加延时
  34.         //但考虑到中断不应该过长延时,所以开输入捕捉中断就放在main函数里,根据需要来开启
  35.     }

  36.     /* 这里添加 n=1 的模版,根据模版来添加 */
  37.     CHn = 1;
  38.     if( s & (1 << CHn) )
  39.     {
  40.         FTM_CnSC_REG(FTM0_BASE_PTR, CHn) &= ~FTM_CnSC_CHIE_MASK; //禁止输入捕捉中断
  41.         /*     用户任务       */
  42.         LED_turn(LED0);   
  43.         time_delay_ms(50);
  44.         LED_turn(LED1);
  45.         time_delay_ms(50);
  46.         LED_turn(LED2);
  47.         time_delay_ms(50);
  48.         LED_turn(LED3);
  49.         time_delay_ms(50);

  50.         /*********************/
  51.         //不建议在这里开启输入捕捉中断
  52.         //FTM_CnSC_REG(FTM1_BASE_PTR,n) |= FTM_CnSC_CHIE_MASK;  //开启输入捕捉中断
  53.     }

  54. }
复制代码



作者: zhou1994    时间: 2014-9-29 13:41
看你的宏定义引脚复用
作者: sunshineabner    时间: 2014-9-29 13:45
zhou1994 发表于 2014-9-29 13:41
看你的宏定义引脚复用

复用更改了





欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2