智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1184|回复: 0
打印 上一主题 下一主题

[采集类] 大神们,小弟的中断进不去,求解!

[复制链接]

1

主题

2

帖子

0

精华

高级会员

Rank: 4

积分
654
威望
311
贡献
189
兑换币
191
注册时间
2015-12-20
在线时间
77 小时
毕业学校
山东理工大学
跳转到指定楼层
1#
发表于 2015-12-30 21:47:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

#include "common.h"
#include "include.h"

//全局变量定义
volatile uint32 cnvtime = 0;                //输入捕捉值
//函数声明
void FTM0_INPUT_IRQHandler(void);        //FTM0中断服务函数
void PIT2_IRQHandler(void);              //PIT中断服务函数
/*!
*  @BRIEF      main函数
*  @note      测量频率
*/
void main()
{   
    uint32 cnvtime1=0;
    uint32 cnvtime2=0;

    ftm_input_init(FTM0, FTM_CH6, FTM_Falling,FTM_PS_2);     //初始化FTM输入捕捉模式,下降沿捕捉(FTM0_CH6 为 PTD6)
    lptmr_pulse_init(LPT0_ALT1, 0XFFFF, LPT_Rising);
    pit_init_ms(PIT2, 10);

    set_vector_handler(FTM0_VECTORn ,FTM0_INPUT_IRQHandler);    //设置FTM0的中断服务函数为 FTM0_INPUT_IRQHandler
    set_vector_handler(PIT2_VECTORn ,PIT2_IRQHandler);      //设置PIT1的中断服务函数为 PIT0_IRQHandler


    while(1)
    {
            lptmr_pulse_clean();
            enable_irq (PIT0_IRQn);
            pit_time_start(PIT2);
            cnvtime1=cnvtime/10;
            printf("\n捕捉到频率为:%d",cnvtime1);
            FTM_IRQ_EN(FTM0,FTM_CH6);
            //捕捉频率 = bus 时钟 / (分频系数) / cnvtime
            //分频系数 是 由 初始化时传递进去的分频因子FTM_PS_e 决定,分频系数 = 1<<FTM_PS_e
            //最大支持频率为 bus 时钟 四分之一
             cnvtime2=bus_clk_khz/(1<<FTM_PS_2)/cnvtime;
             printf("\n捕捉到频率为:%d",cnvtime2);

            cnvtime = 0;
            DELAY_MS(1000);      //这里 的延时 ,仅仅是 避免 过于频繁打印数据到串口
    }
}


void FTM0_INPUT_IRQHandler(void)
{
    static uint8 flag = 0;
    uint8 s = FTM0_STATUS;          //读取捕捉和比较状态  All CHnF bits can be checked using only one read of STATUS.
    uint8 CHn;

    FTM0_STATUS = 0x00;

    CHn = 6;
    if( s & (1 << CHn) )
    {
        /*     用户任务       */
        if(flag == 0)
        {
            //第一次进来,开始计时
            flag++;
            ftm_input_clean(FTM0);            //清 计数器计数值
        }
        else if(flag == 1)
        {
            //第二次测到整个周期的时间
            cnvtime = ftm_input_get(FTM0, FTM_CH6); //保存
            flag = 0;

            FTM_IRQ_DIS(FTM0,FTM_CH6);      //关闭FTM0_CH6中断  (避免频繁中断)
        }
        /*********************/
    }
}
void PIT2_IRQHandler(void)
{
    PIT_Flag_Clear(PIT2);                     //清中断标志位
    cnvtime=lptmr_pulse_get();
    pit_close(PIT2);                                       
}
算两路的频率

回复

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-6-17 22:21 , Processed in 0.042971 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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