Thread 中讨论的其他器件:SYSBIOS
我们的团队正在尝试利用 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);