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.
我们的团队正在尝试利用 ECAP 的 APWM 模式来充当计时器。 为此、我已设置此模块来创建 APWM 信号。 我可以在示波器上看到该信号。 也就是说、我想通过 APWM 生成中断、但这似乎不会发生。 有人能指出我可能做错了什么事的正确方向吗? 谢谢!
要创建信号并启用中断、我基本上要执行以下操作:
SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_ECAP1); GPIO_setDirectionMode(GPIO59, GPIO_DIR_MODE_OUT); GPIO_setPinConfig(GPIO_59_OUTPUTXBAR2); GPIO_writePin(GPIO59, PIN_LOW); ECAP_enableAPWMMode(ECAP1); ECAP_setAPWMPeriod(ECAP1, 100); ECAP_setAPWMCompare(ECAP1, 50); ECAP_setPhaseShiftCount(ECAP1, 0U); ECAP_setAPWMPolarity(ECAP1, ECAP_APWM_ACTIVE_HIGH); ECAP_disableLoadCounter(ECAP1); ECAP_setSyncOutMode(ECAP1, ECAP_SYNC_OUT_SYNCI); XBAR_setOutputLatchMode(XBAR_OUTPUT2, false); XBAR_invertOutputSignal(XBAR_OUTPUT2, false); XBAR_setOutputMuxConfig(XBAR_OUTPUT2, XBAR_OUT_MUX00_ECAP1_OUT); XBAR_enableOutputMux(XBAR_OUTPUT2, XBAR_OUT_MUX00_ECAP1_OUT); ECAP_startCounter(ECAP1); ECAP_enableInterrupt(ECAP1, ECAP_ISR_SOURCE_COUNTER_PERIOD | ECAP_ISR_SOURCE_CAPTURE_EVENT_1 | ECAP_ISR_SOURCE_COUNTER_OVERFLOW | ECAP_ISR_SOURCE_COUNTER_COMPARE);
请注意、我启用几乎所有中断以尝试使某些情况发生。 我希望 有周期中断。
在 sysbios .cfg 文件中:
var hwiParams = new Hwi.Params(); hwiParams.instance.name = "ECAP1_ISR"; hwiParams.enableInt = false; hwiParams.enableAck = true; Program.global.ECAP1_ISR = Hwi.create(56, "&ECAP1_Handler", hwiParams);
我还希望能够在中断发生后停止中断、因此 ECAP1_Handler 在本质上是:
ECAP_disableInterrupt(ECAP1, 0xFE); ECAP_clearInterrupt(ECAP1, 0xFE); ECAP_clearGlobalInterrupt(ECAP1); ECAP_disableTimeStampCapture(ECAP1); ECAP_stopCounter(ECAP1); ECAP_resetCounters(ECAP1);
您好、Wesley:
首先、您是否了解过我们的 ecap_ex2_capture_pwm? 这显示了在捕捉模式期间从 eCAP 生成中断的情况、但可以采用相同的方法在发生周期事件时生成中断。
您是否在 PIE 中启用了 eCAP 中断并注册了如下所示的中断函数?
使用 syscfg 时即生成代码:
void myECAP0_init(){ // // Disable ,clear all capture flags and interrupts // ECAP_disableInterrupt(myECAP0_BASE, (ECAP_ISR_SOURCE_CAPTURE_EVENT_1 | ECAP_ISR_SOURCE_CAPTURE_EVENT_2 | ECAP_ISR_SOURCE_CAPTURE_EVENT_3 | ECAP_ISR_SOURCE_CAPTURE_EVENT_4 | ECAP_ISR_SOURCE_COUNTER_OVERFLOW | ECAP_ISR_SOURCE_COUNTER_PERIOD | ECAP_ISR_SOURCE_COUNTER_COMPARE)); ECAP_clearInterrupt(myECAP0_BASE, (ECAP_ISR_SOURCE_CAPTURE_EVENT_1 | ECAP_ISR_SOURCE_CAPTURE_EVENT_2 | ECAP_ISR_SOURCE_CAPTURE_EVENT_3 | ECAP_ISR_SOURCE_CAPTURE_EVENT_4 | ECAP_ISR_SOURCE_COUNTER_OVERFLOW | ECAP_ISR_SOURCE_COUNTER_PERIOD | ECAP_ISR_SOURCE_COUNTER_COMPARE)); // // ... // // // Starts Time stamp counter for myECAP0. // ECAP_startCounter(myECAP0_BASE); // // Enables time stamp capture for myECAP0. // ECAP_enableTimeStampCapture(myECAP0_BASE); // // Re-arms the eCAP module for myECAP0. // ECAP_reArm(myECAP0_BASE); // // Enables interrupt source for myECAP0. // ECAP_enableInterrupt(myECAP0_BASE,(ECAP_ISR_SOURCE_COUNTER_PERIOD)); } //***************************************************************************** // // INTERRUPT Configurations // //***************************************************************************** void INTERRUPT_init(){ // Interrupt Setings for INT_myECAP0 Interrupt_register(INT_ECAP1, &ECAP1_Handler); Interrupt_enable(INT_ECAP1); }
此致!
马瑞安
您好、Ryan、
在查看我的逻辑后,我张贴了它和你的回复,我意识到我的问题是"hwiParams.enableInt = false ;"在我的 sysbios .cfg 文件。
将其设置为 true 后、我现在看到了我预期会看到的结果。 感谢您的帮助!
此致、
-韦斯
您好、Wesley:
很高兴看到您期待看到的内容。
此致!
马瑞安