注册 登录
查看: 242|回复: 5

中断

[复制链接]
发表于 2014-11-8 17:10:01 | 显示全部楼层 |阅读模式
enable_irq ( FTM0_IRQn );
enable_irq( PIT0_IRQn );
一个程序里同时打开PIT和FTM的中断,用的上面的两个语句,可是为什么只有PIT 的中断打开了,ftm的优先级不是更高吗?
回复

使用道具 举报

发表于 2014-11-8 17:15:32 | 显示全部楼层
两个都会开的啊,没进入中断,那就说明没触发中断,或者你没配置好中断函数入口。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-8 17:28:23 | 显示全部楼层
我同时开两个就只有pit的可以,但是我要是单独开他们其中的一个又都是可以的
回复 支持 反对

使用道具 举报

发表于 2014-11-8 17:31:43 | 显示全部楼层
rurrect 发表于 2014-11-8 17:28
我同时开两个就只有pit的可以,但是我要是单独开他们其中的一个又都是可以的

直接上代码吧。你简单描述,都不知道是啥情况、
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-8 17:56:14 | 显示全部楼层
#include"common.h"
#include"include.h"

uint32 count=0;

void  FTM_handler();
void  pit_handler();

void main()
{
        FTM_Input_init(FTM0,FTM_CH7,FTM_Falling);
        FTM_PWM_init(FTM2,FTM_CH1,2000,50);
        port_init_NoALT(FTM0_CH7,PULLUP);
        pit_init_ms(PIT0,1000);

       
        set_vector_handler(FTM0_VECTORn,FTM_handler);
        set_vector_handler(PIT0_VECTORn,pit_handler);
       
        enable_irq(FTM0_IRQn);
        enable_irq(PIT0_IRQn);
       
        while(1)
        {
        }
}

void  FTM_handler()
{
        uint8 s = FTM0_STATUS;
        uint8 chn;
        FTM0_STATUS = 0x00;
        chn = 7;
        if(s & (1<<chn))
        {
                 count++;
        }
}

void pit_handler()
{
        PIT_Flag_Clear(PIT0);
        disable_irq(FTM0_IRQn);
        printf("%d\n",count);
}

回复 支持 反对

使用道具 举报

发表于 2014-11-8 21:42:38 | 显示全部楼层
rurrect 发表于 2014-11-8 17:56
#include"common.h"
#include"include.h"

count 试试加 volatile 来修饰看看。有可能是优化问题导致。
回复 支持 反对

使用道具 举报

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

本版积分规则

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