TI中文支持网
TI专业的中文技术问题搜集分享网站

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多个时钟周期。不知道怎么搞的又?

谢谢帮忙!

 

Forrest:

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

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

 

写了个函数:

定义变量等;

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多个时钟周期。不知道怎么搞的又?

谢谢帮忙!

 

Troublemaker:

回复 Forrest:

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

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

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

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

谢谢你帮忙解答!

写了个函数:

定义变量等;

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多个时钟周期。不知道怎么搞的又?

谢谢帮忙!

 

Troublemaker:

谢谢!

写了个函数:

定义变量等;

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多个时钟周期。不知道怎么搞的又?

谢谢帮忙!

 

Forrest:

回复 Troublemaker:

不客气。

赞(0)
未经允许不得转载:TI中文支持网 » 335调试遇到问题
分享到: 更多 (0)