搜索
bottom↓
回复: 8

我在用k60做东西时,中断出现了一些错误,求组啊(已解决)

[复制链接]

出0入0汤圆

发表于 2014-5-1 11:42:06 | 显示全部楼层 |阅读模式
本帖最后由 FSL_TICS_ZJJ 于 2014-5-7 11:12 编辑

我用的是也厚的库。我在程序里加入了一个按键中断,在按键中断里使能里定时中断,但是,按下按键后要经过一段时间,定时中断才开启,这个延时让我恒苦恼。
还有就是我的按建中断只能执行一次,需要关机后才
  1. void main()
  2. {

  3.      FTM_QUAD_Init(FTM1);                        //FTM1 正交解码初始化
  4.    
  5.     pit_init_ms(PIT0, 1);                                 //初始化PIT0,定时时间为: 1000ms  
  6.   
  7.     port_init(PTC0, ALT1 | IRQ_FALLING | PULLDOWN );          //干簧管初始化 PTC0 管脚,复用功能为GPIO ,下降沿触发中断,上拉电阻
  8.     port_init(PTC5, ALT1 | IRQ_FALLING | PULLDOWN );          //光电管  初始化  PTC5 管脚,复用功能为GPIO ,下降沿触发中断,上拉电阻
  9.     port_init(PTC6, ALT1 | IRQ_FALLING | PULLDOWN );          //光电管  初始化  PTC6 管脚,复用功能为GPIO ,下降沿触发中断,上拉电阻
  10.      port_init(PTC7, ALT1 | IRQ_FALLING | PULLDOWN );          //光电管  初始化  PTC7 管脚,复用功能为GPIO ,下降沿触发中断,上拉电
  11.     port_init(PTC14, ALT1 | IRQ_FALLING | PULLUP );          //启动初始化 PTC14管脚,复用功能为GPIO ,下降沿触发中断,上拉电阻
  12.     port_init(PTC15, ALT1 | IRQ_FALLING | PULLUP );          //停车初始化 PTC115 管脚,复用功能为GPIO ,下降沿触发中断,上拉电
  13.     set_vector_handler(PIT0_VECTORn ,PIT0_IRQHandler);      //设置PIT0的中断复位函数为 PIT0_IRQHandler   
  14.     set_vector_handler(PORTC_VECTORn ,PORTC_IRQHandler);    //设置PORTE的中断复位函数为 PORTE_IRQHandler
  15.     set_irq_priority(PORTC_IRQn,0);
  16.     set_irq_priority(PIT0_IRQn,1);
  17.     enable_irq (PORTC_IRQn);                                //使能PORTE中断

  18.     while(1)
  19.     {
  20.       
  21.     }
  22. }
  23. /******************************************************/
  24. /******************************************************/
  25. /******************************************************/
  26. /******************************************************/
  27. /******************************************************/
  28. /******************************************************/
  29. /******************************************************/
  30. /****************************************************/
  31. void PIT0_IRQHandler(void)
  32. {  
  33.   int16 val1;
  34.   PIT_Flag_Clear(PIT0);       //清中断标志位
  35.   
  36.   val1 = FTM_QUAD_get(FTM1);          //获取FTM 正交解码 的脉冲数(负数表示反方向)
  37.   FTM_QUAD_clean(FTM1);
  38.   System_Feed_Speed=abs(val1);//(int16)(0.15*val1);
  39. AD_GetValue();  
  40. Cal_PostitionA();
  41.   if(Cal_PostitionA()==0)
  42.   {
  43.   duoji_PID();          //舵机PID
  44.   //Moto_PID();
  45.   }
  46.   if(Cal_PostitionA()==1)
  47.   {
  48.    if(AD_ZY[0]>AD_ZY[1])
  49.    {
  50.     FTM_PWM_Duty(S3010_FTM, S3010_CH,165+20);
  51.    }
  52.    if(AD_ZY[0]<AD_ZY[1])
  53.    {
  54.     FTM_PWM_Duty(S3010_FTM, S3010_CH,165-30);
  55.    }
  56.   }
  57. }
  58. /*****************************************************/
  59. /*******************启动和停车中断***********************************/
  60. /*!
  61. *  @brief      PORTD端口中断服务函数
  62. *  @since      v5.0
  63. */
  64. void PORTC_IRQHandler(void)
  65. {

  66.     PORT_FUNC(C,14,qidong_handler);            //启动
  67.    
  68. /
  69. void qidong_handler(void)
  70. {
  71.       
  72.         DELAY_MS(2000);
  73.         enable_irq (PIT0_IRQn);      //使能PIT0中断
  74.         FTM_PWM_Duty(MOTOR_FTM, MOTOR1_PWM,70);
  75.         FTM_PWM_Duty(MOTOR_FTM, MOTOR2_PWM,70);  
  76. }
复制代码
能执行下一次。求组啊

出0入0汤圆

发表于 2014-5-1 12:43:32 | 显示全部楼层
因为你在按键中断里加了个大延时:DELAY_MS(2000);

出0入0汤圆

 楼主| 发表于 2014-5-1 12:58:59 | 显示全部楼层
山外メ雲ジ 发表于 2014-5-1 12:43
因为你在按键中断里加了个大延时:DELAY_MS(2000);

那个延时是我们要求加上的,我的意思是在2s的延时后,他还无法执行定时中断

出0入0汤圆

发表于 2014-5-1 16:41:10 | 显示全部楼层
先简化一下代码吧,太多无关的代码,排除法来确定原因。
看你初始化pit0为1ms,然后再在中断里使能,这个时候按理应该是马上执行pit0中断的。

出0入0汤圆

 楼主| 发表于 2014-5-1 17:51:17 | 显示全部楼层
山外メ雲ジ 发表于 2014-5-1 16:41
先简化一下代码吧,太多无关的代码,排除法来确定原因。
看你初始化pit0为1ms,然后再在中断里使能,这个时 ...

好的,我试一下

出0入0汤圆

发表于 2014-5-4 11:32:05 | 显示全部楼层
楼主问题解决了没有?
如果没解决,欢迎继续提问。
如果已经解决了,还请帮忙在你的标题上加上(已解决),方便我们查看未结帖。

出75入4汤圆

发表于 2014-5-4 11:51:06 | 显示全部楼层
在中断里面不要加大延时,利用时间片。尽量避免delay这种。

出0入0汤圆

发表于 2014-5-4 12:05:05 | 显示全部楼层
在中断里硬等2秒中,结果就是MCU什么都不做(不需要监测其他的吗),干等2秒钟?是故意这么设计的?还是无意为之?
建议采用状态机来做

出0入0汤圆

发表于 2014-5-4 12:50:45 | 显示全部楼层
定义个变量作计数用,单独用一个定时器来做为1ms或10ms定时节拍,变量递减为0后启用定时中断。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-2 20:57

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表