打印

dsp2812测速 进不了中断

[复制链接]
2209|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
licuimei521|  楼主 | 2013-9-21 18:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
licuimei521|  楼主 | 2013-9-21 19:14 | 只看该作者
void main(void)
{
        InitSysCtrl();                                        //初始化系统
        DINT;                                                                //关中断
        IER = 0x0000;
        IFR = 0x0000;
        InitPieCtrl();                                        //初始化PIE
        InitPieVectTable();                                //初始化PIE中断矢量表
        InitPeripherals();                                //初始化外设
        InitGpio();                                                //初始化GPIO
        InitEv();
        EALLOW;
        PieVectTable.CAPINT6 = & CAPINT6_ISR;
        EDIS;

        IER|= M_INT5;//cpu中断打开第五组CAP6  T4PINT                          
        EINT;                                                   // Enable INTM
        ERTM;                                                        // Enable DBGM       
        EvaRegs.T1CON.bit.TENABLE=1;//打开定时器1
        EvbRegs.T4CON.bit.TENABLE=1;//打开定时器4
        EvbRegs.CAPCONB.bit.CAP6EN=1;//使能CAP6
               
        while(1)
        {                       
               
        }
}

使用特权

评论回复
板凳
licuimei521|  楼主 | 2013-9-21 19:15 | 只看该作者
interrupt void CAPINT6_ISR(void)   // EV-B
{

                        if(EvbRegs.CAPFIFOB.bit.CAP6FIFO==2)
                                {
                                if(count2>=16)
              {  
              Freq=0;
               }
                                        p=EvbRegs.CAPFIFOB.bit.CAP6FIFO;
                                        Cap6Dat1 = EvbRegs.CAP6FIFO;
                                        Cap6Dat2 = EvbRegs.CAP6FIFO;
                                        if(Cap6Dat2>Cap6Dat1)
                                                temp = Cap6Dat2- Cap6Dat1;
                                        if(Cap6Dat2<=Cap6Dat1)
                                                temp = count2*65535+Cap6Dat2 - Cap6Dat1;
                                        Freq = 18750000*15/(float)(256*temp);
                                        Freq = (unsigned long int )Freq;
                                        display(Freq);
                                        T4PCount=0;
                                        count2=0;
                                }

        EvbRegs.EVBIFRC.bit.CAP6INT=1;//CAP6中断标志复位                
        EvbRegs.EVBIMRC.bit.CAP6INT=1;//CAP6中断使能
        PieCtrl.PIEACK.bit.ACK5=1;//响应第五组中断CAP6
}

/******    T4PINT   ***********/
interrupt void T4PINT_ISR(void)    // EV-B
{

        T4PCount++;
        count2++;
        EvbRegs.EVBIFRB.bit.T4PINT=1;
        EvbRegs.EVBIMRB.bit.T4PINT=1;
        PieCtrl.PIEACK.bit.ACK5=1;//响应第五组中断CAP6        T4PINT
}


使用特权

评论回复
地板
zhangmangui| | 2013-9-21 23:42 | 只看该作者
你用的是变M/T法测速吗   你的意思是可以进入T4的中断  进不去cap6的中断是吧
我建议你先只测试cap中断吧   是不是自己做的板子cap引脚不能被改变
我觉得最大的可能就是这个原因   这几个中断之间是不会有冲突的  
T4中断进入之后  在中断中开启cap中断  你最好屏蔽了T4中断  只开cap中断
试试

使用特权

评论回复
5
wang168506| | 2013-9-23 16:44 | 只看该作者
:(

使用特权

评论回复
6
licuimei521|  楼主 | 2013-9-25 10:53 | 只看该作者
zhangmangui 发表于 2013-9-21 23:42
你用的是变M/T法测速吗   你的意思是可以进入T4的中断  进不去cap6的中断是吧
我建议你先只测试cap中断吧  ...

我改程序了 用T4周期中断算t  cap6计脉冲数  这样就可以了

使用特权

评论回复
7
zhangmangui| | 2013-9-25 10:56 | 只看该作者
licuimei521 发表于 2013-9-25 10:53
我改程序了 用T4周期中断算t  cap6计脉冲数  这样就可以了

OK   周期中断   在高低速时会有误差  

使用特权

评论回复
8
小晴空| | 2016-6-8 14:54 | 只看该作者
licuimei521 发表于 2013-9-25 10:53
我改程序了 用T4周期中断算t  cap6计脉冲数  这样就可以了

能发一下程序看看吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

33

帖子

0

粉丝