飞翔科技电子爱好者论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3037|回复: 8

进不去pit中断

[复制链接]

1

主题

7

帖子

33

积分

新手上路

Rank: 1

积分
33
发表于 2017-3-12 14:58:49 | 显示全部楼层 |阅读模式
PID的测速你们是怎么弄的,为什么我用PIT和输入捕捉测脉冲数的时候进不去pit中断?
回复

使用道具 举报

1

主题

7

帖子

33

积分

新手上路

Rank: 1

积分
33
 楼主| 发表于 2017-3-12 15:02:57 | 显示全部楼层
/*****************************************************************************/
/*                               主函数                                      */
/*****************************************************************************/
#include "include.h"

volatile u32 CurrentVelocity = 0;     //用来计数 10ms脉冲数目  在isr.c中清零
U8 LED_state=LED_ON;
void main()
{
    DisableInterrupts;                 //禁止总中断
   
    Init_UART(UART4, 9600); //初始化串口
   
    Init_LED();   //初始化LED
    FTM_PORT_init(2,0);
    FTM_Input_init(2,0,Rising);   
    FTM_Enable_int(2,0);             //使能FTM2的Channel0的输入捕捉功能,使能中断
   
    PIT_init(0,480000);              //设置PIT的0通道计数周期为10ms
    PIT_Enable_int(0);            //使能0通道中断
   
    FTM_PORT_init(0,2);
    FTM_PWM_init(0, 2, 10000,200);   //初始化FTM0_CH2输出频率为10KHZ,占空比为0的PWM

    EnableInterrupts;
   for(;;)
    {
    }
}

/**********************************************************************************
* 文件名         : isr.c
* 描述           : 中断处理
**********************************************************************************/

#include "include.h"
#include "isr.h"
extern volatile u32 CurrentVelocity;         //用来计数
extern U8 LED_state;
void PIT0_isr()
{
   if((PIT_TFLG(0)&PIT_TFLG_TIF_MASK)!=0)
   {
   PIT_TFLG(0)|=PIT_TFLG_TIF_MASK;       //清标志
  // DisableInterrupts;            //禁止总中断
   control_LED(LED1,LED_ON);
  // printf("\n接收到 %d 个脉冲", CurrentVelocity);    //使用 printf 来发送
   //CurrentVelocity = 0;                //清计数
  // EnableInterrupts;                         //开总中断
   }
}

/*****************************************************************************/
//                       FTM2输入捕捉中断函数                                 
/*****************************************************************************/
void FTM2_isr(void)
{
    U8 FLAG = FTM2_STATUS;   //读取中断标志位
    FTM2_STATUS = 0x00;      //清除中断标志
    if((FLAG&FTM_STATUS_CH0F_MASK)!=0)  //通道0捕捉中断
    {
       FTM_Disable_int(2, 0);;  // 禁止FTM的中断功能函数  
       CurrentVelocity++;                 //计数+1
       control_LED(LED2,LED_ON);
       FTM_Enable_int(2,0);//使能FTM的中断功能函数
      }
}
















回复 支持 反对

使用道具 举报

1

主题

7

帖子

33

积分

新手上路

Rank: 1

积分
33
 楼主| 发表于 2017-3-12 15:07:35 | 显示全部楼层
这是程序,求解啊
回复 支持 反对

使用道具 举报

28

主题

137

帖子

1625

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1625
发表于 2017-3-12 21:11:11 | 显示全部楼层
光盘里的演示代码都是测试通过的,没有问题的。你可以试一下光盘里的原始代码,如果还有问题,可能是硬件哪里有问题。
回复 支持 反对

使用道具 举报

1

主题

7

帖子

33

积分

新手上路

Rank: 1

积分
33
 楼主| 发表于 2017-3-13 14:46:58 | 显示全部楼层
admin 发表于 2017-3-12 21:11
光盘里的演示代码都是测试通过的,没有问题的。你可以试一下光盘里的原始代码,如果还有问题,可能是硬件哪 ...

我也试过演示代码,每个都行,那也说明那些硬件没问题才对啊。演示代码中也没有见到有两个中断的。
回复 支持 反对

使用道具 举报

7

主题

330

帖子

1338

积分

超级版主

Rank: 8Rank: 8

积分
1338
发表于 2017-3-14 19:56:05 | 显示全部楼层
可以看看实验指导手册的中断部分的说明,可能是中断函数没有声明,或者中断向量没有设置。
回复 支持 反对

使用道具 举报

1

主题

7

帖子

33

积分

新手上路

Rank: 1

积分
33
 楼主| 发表于 2017-3-15 14:08:30 | 显示全部楼层
bigmarshal 发表于 2017-3-14 19:56
可以看看实验指导手册的中断部分的说明,可能是中断函数没有声明,或者中断向量没有设置。

中断应该是下面这样设置吧:
#define VECTOR_080      FTM2_isr        // 0x0000_0140 80    64     FTM2              Single interrupt vector for all sources
#define VECTOR_081      default_isr     // 0x0000_0144 81    65     CMT
#define VECTOR_082      default_isr     // 0x0000_0148 82    66     RTC Timer interrupt
#define VECTOR_083      default_isr     // 0x0000_014C 83    67
#define VECTOR_084      PIT0_isr     // 0x0000_0150 84    68     PIT Channel 0
函数声明也有啊,在isr.h里:
#ifndef __ISR_H__
#define __ISR_H__
#include "K60_datatype.h"
void PIT0_isr(); //PIT0 定时中断服务函数
void FTM2_isr(); //FTM2 输入捕捉中断
#endif /* __ISR_H__ */

回复 支持 反对

使用道具 举报

7

主题

330

帖子

1338

积分

超级版主

Rank: 8Rank: 8

积分
1338
发表于 2017-3-15 15:26:04 | 显示全部楼层
lhh 发表于 2017-3-15 14:08
中断应该是下面这样设置吧:
#define VECTOR_080      FTM2_isr        // 0x0000_0140 80    64     FT ...

貌似是没问题
回复 支持 反对

使用道具 举报

0

主题

1

帖子

4

积分

新手上路

Rank: 1

积分
4
发表于 2018-11-23 21:08:58 | 显示全部楼层
在isr.c下找到一个Vectors.h文件,你设置了中断的函数需要在这里申明。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|飞翔科技电子爱好者论坛  

GMT+8, 2019-4-20 16:32 , Processed in 0.362513 second(s), 24 queries .

Powered by Discuz X3.2

© 2001-2011 Comsenz 源码论坛

返回顶部