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.

[参考译文] TMS320F280049C:如何从 ECAP APWM 信号生成中断

Guru**** 2522770 points
Other Parts Discussed in Thread: SYSBIOS

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1280298/tms320f280049c-how-to-generate-an-interrupt-off-the-ecap-apwm-signal

器件型号:TMS320F280049C
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);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、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:

    很高兴看到您期待看到的内容。

    此致!

    马瑞安