写了个函数:
定义变量等;
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:
不客气。