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**** 2041660 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 生成中断、但这似乎不会发生。 有人能指出我可能做错了什么事的正确方向吗? 谢谢!

要创建信号并启用中断、我基本上要执行以下操作:

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

请注意、我启用几乎所有中断以尝试使某些情况发生。 我希望 有周期中断。

在 sysbios .cfg 文件中:

Fullscreen
1
2
3
4
5
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);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

我还希望能够在中断发生后停止中断、因此 ECAP1_Handler 在本质上是:

Fullscreen
1
2
3
4
5
6
ECAP_disableInterrupt(ECAP1, 0xFE);
ECAP_clearInterrupt(ECAP1, 0xFE);
ECAP_clearGlobalInterrupt(ECAP1);
ECAP_disableTimeStampCapture(ECAP1);
ECAP_stopCounter(ECAP1);
ECAP_resetCounters(ECAP1);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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

    您好、Wesley:

    首先、您是否了解过我们的 ecap_ex2_capture_pwm? 这显示了在捕捉模式期间从 eCAP 生成中断的情况、但可以采用相同的方法在发生周期事件时生成中断。

    您是否在 PIE 中启用了 eCAP 中断并注册了如下所示的中断函数?  

    使用 syscfg 时即生成代码:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    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));
    //
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    此致!

    马瑞安

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

    您好、Ryan、

    在查看我的逻辑后,我张贴了它和你的回复,我意识到我的问题是"hwiParams.enableInt = false ;"在我的 sysbios .cfg 文件。

    将其设置为 true 后、我现在看到了我预期会看到的结果。 感谢您的帮助!

    此致、

    -韦斯

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

    您好、Wesley:

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

    此致!

    马瑞安