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

TMS320F28388D: 关于配置epwm中断设置但无法进入中断的问题

Part Number:TMS320F28388DOther Parts Discussed in Thread:C2000WARE

大家好,

我想要使用28388配置epwm5并执行中断配置,我按照例程interrupt_ex4_epwm_realtime_interrupt进行配置,在debug发现无法进入中断,但在debug时候我停止调试然后点击restart后又能重新进入中断,如果烧写离线程序又无法进入中断,不知道我的代码配置是否有问题,麻烦各位帮忙解答一下,谢谢。

下面附上我的代码,我使用的是ccs12.0版本,c2000Ware是4.03版本

主函数:

void main(void)
{Device_init();//// Boot CPU2 core//
#ifDEBUG
#ifdef _FLASH// Send boot command to allow the CPU2 application to begin executionDevice_bootCPU2(BOOTMODE_BOOT_TO_FLASH_SECTOR0);Device_bootCM(BOOTMODE_BOOT_TO_FLASH_SECTOR0);
#else// Send boot command to allow the CPU2 application to begin executionDevice_bootCPU2(BOOTMODE_BOOT_TO_M0RAM);Device_bootCM(BOOTMODE_BOOT_TO_S0RAM);
#endif
#endif

//Device_initGPIO();// syscfg配置调用Board_init();//// Initialize PIE and clear PIE registers. Disables CPU interrupts.//Interrupt_initModule();//// Initialize the PIE vector table with pointers to the shell Interrupt// Service Routines (ISR).//Interrupt_initVectorTable();EPWM_init();INTERRUPT_init();//// Enable Global Interrupt (INTM) and realtime interrupt (DBGM)//EINT;ERTM;//// Loop Forever//for(;;){}
}

Epwm初始化函数:

void EPWM_init(){SysCtl_setEPWMClockDivider(SYSCTL_EPWMCLK_DIV_1);SysCtl_disablePeripheral(SYSCTL_PERIPH_CLK_TBCLKSYNC);EPWM_setClockPrescaler(EPWM5_BASE, EPWM_CLOCK_DIVIDER_1, EPWM_HSCLOCK_DIVIDER_1);EPWM_disablePhaseShiftLoad(EPWM5_BASE);EPWM_setPhaseShift(EPWM5_BASE, 0);EPWM_setEmulationMode(EPWM5_BASE, EPWM_EMULATION_STOP_AFTER_FULL_CYCLE);EPWM_setTimeBasePeriod(EPWM5_BASE, myEPWM5_TBPRD);EPWM_setTimeBaseCounterMode(EPWM5_BASE, EPWM_COUNTER_MODE_UP_DOWN);EPWM_setTimeBaseCounter(EPWM5_BASE, 0U);EPWM_setPeriodLoadMode(EPWM5_BASE, EPWM_PERIOD_DIRECT_LOAD);EPWM_setInterruptSource(EPWM5_BASE, EPWM_INT_TBCTR_ZERO_OR_PERIOD);EPWM_enableInterrupt(EPWM5_BASE);EPWM_setInterruptEventCount(EPWM5_BASE, 1);SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_TBCLKSYNC);

}

使能中断:

void INTERRUPT_init(){// Interrupt Setings for INT_myEPWM5Interrupt_register(INT_myEPWM5, &INT_myEPWM5_ISR);Interrupt_enable(INT_myEPWM5);
}

中断服务函数:

__interrupt void INT_myEPWM5_ISR(void)
{count ++;if(count >= 8000){GPIO_togglePin(DEVICE_GPIO_PIN_LED_3);count = 0;}EPWM_clearEventTriggerInterruptFlag(EPWM5_BASE);Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP3);
}

TFTMing:

经过排查,问题已经找到,是因为添加了

EPWM_setPeriodLoadMode(EPWM5_BASE, EPWM_PERIOD_DIRECT_LOAD);

这条语句导致的,如果注释掉该条语句能够成功进入中断,但是不明白为什么?为什么不能不用影子寄存器

,

Yale Li:

你有没有试过直接导入例程?你的工程是在例程的基础上修改的?还是自己创建工程然后从例程复制粘贴的?

,

TFTMing:

是自己创建的工程,一开始是自己从syscfg上配置的,发现无法进入中断,然后再对照例程来设置,发现例程没有下面这段代码

EPWM_setPeriodLoadMode(EPWM5_BASE, EPWM_PERIOD_DIRECT_LOAD);

我把上面这段去掉后就可以正常进入中断了,但还不清楚是什么原因

因为我需要200M的epwm时钟,只能自己配置。

,

Yale Li:

我还是建议你在例程的基础上修改,会避免很多不必要的麻烦。

需要200MHz的时钟,修改TBCTL[HSPCLKDIV ]以及PERCLKDIVSEL[EPWMCLKDIV]应该就可以了。

TFTMing 说:EPWM_setPeriodLoadMode(EPWM5_BASE, EPWM_PERIOD_DIRECT_LOAD);

这一句代码和中断并没有直接的关系,所以很难去定位问题出在哪里。

,

TFTMing:

我基本是按照例程上的来配置的,但我想改成不使用影子寄存器才配置了上面那句代码,然后就无法进入中断了。

,

Yale Li:

你能提供一下你的工程吗?

,

TFTMing:

可以,稍后我整理一下

,

Yale Li:

好的

,

TFTMing:

28388D_TEMP_CPU1.zip

你好,这是我配置epwm中断的工程,关于添加EPWM_setPeriodLoadMode(EPWM5_BASE, EPWM_PERIOD_DIRECT_LOAD);代码后无法进入中断的问题

,

Yale Li:

好的,我需要时间来看一下

赞(0)
未经允许不得转载:TI中文支持网 » TMS320F28388D: 关于配置epwm中断设置但无法进入中断的问题
分享到: 更多 (0)

© 2024 TI中文支持网   网站地图 鲁ICP备2022002796号-1