This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

335调试遇到问题



写了个函数:

定义变量等;

main()

{

程序初始化,中断向量一堆;

 PWM_ComplPairDB_CNF(1, 2000);
  PWM_1ch_CNF(4, 2000);

EALLOW;
    PieVectTable.EPWM1_INT = &DATA1_ISR;      
    PieCtrlRegs.PIEIER3.bit.INTx1 = 1;      
    EPwm4Regs.CMPB =10;
    EPwm1Regs.ETSEL.bit.INTSEL = ET_CTRU_CMPB; 
    EPwm1Regs.ETSEL.bit.INTEN = 1;             
    EPwm1Regs.ETPS.bit.INTPRD = ET_1ST;        

 PieVectTable.EPWM4_INT = &DATA2_ISR;  
    PieCtrlRegs.PIEIER3.bit.INTx4 = 1;     
    EPwm4Regs.CMPB =150;                       
    EPwm4Regs.ETSEL.bit.INTSEL = ET_CTRU_CMPB; 
    EPwm4Regs.ETSEL.bit.INTEN = 1;             
    EPwm4Regs.ETPS.bit.INTPRD = ET_1ST;        
 EDIS;     

 IER |= M_INT3;                          
   
    EINT;                                   
    ERTM;                                   

 EALLOW;
 SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;// PWM1 和PWM4 同步
 EDIS;

 for(;;) 
 {

  无中断普通函数();

}

interrupt void DATA1(void)
{
程序;//大约耗费50
}

interrupt void DATA2(void)
{
程序;//时钟大约耗费2000
}

从PWM1和PWM4开始计数后,应该计数到10的时候应该跳转到interrupt void DATA1(void)中的,计算到200后应该跳转到interrupt void DATA1(void)中的,

可是,在interrupt void DATA1(void)中设置了一个断点后,程序有的时候能跳进来,有时候又跳不进来。不知道怎么搞的

在实施模式下,发现从检测到EPWM.的计算器为10到跳进interrupt void DATA1(void),竟然用了160多个时钟周期。不知道怎么搞的又

谢谢帮忙!

 

  • 第一个问题,不清楚楼主是怎么测试的,不过,在C2000芯片中只要符合附件中的图片的要求,就会进入中断,进不了中断总是其中有一个一个原因不满足。

    关于第二个问题,不会要160个时钟周期,估计是楼主在PWM中用了free run,或者碰到更高优先的中断导致没能及时进入这个中断。

     

    搜狗截图_2012-08.zip
  • 我只设了两个中断,这个我可以肯定。我进入中断的方法就是,首先下载程序,然后指针跳转到main函数的第一行,然后在

    中断函数中,设置一个中断点,在点run,有的时候就可以进入,有的时候进入不了。

    不知道,你是怎么进入中断的方法?请告知,谢谢!

    单步运行进不了中断吧。在我的程序里我设置PWM1的CMPB是10个周期时进入中断,我单步运行到10个,11个周期时,还是进不了中断。

    谢谢你帮忙解答!

  • 关于“设置一个中断点,在点run,有的时候就可以进入,有的时候进入不了。”

    我也是这样操作的,在进不了的时候,楼主按照上面的图片,确认一下是哪一个条件不符合要求,一直查到PWM中的中断位是否置位。

    非实时的单步进不了中断,上个帖子中的谈到的是PWM的soft free位置位,导致结果不正确,当然这只是猜一下。