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.

[参考译文] AM2431:以太网中断优先级

Guru**** 2513185 points
Other Parts Discussed in Thread: AM2431, SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1410155/am2431-ethernet-interrupt-priority

器件型号:AM2431
主题中讨论的其他器件: SysConfig

工具与软件:

大家好、TI 专家!

我使用的系统是 AM2431、FreeRTOS 为系统、并根据该enet_layer2_cpsw示例修改了我的程序。 我当前遇到了以下问题:我采用与示例相同的设置、接收以太网数据包会触发中断。 在回调函数中、我释放一个信标、以允许以太网任务接收数据包。 到目前为止一切都运行正常、但我有另一个线程、在该线程中、我设置了一个硬件计时器、该计时器会定期触发中断。 在中断触发期间、我需要控制 GPIO 以发送控制信号。 但我注意到、有时我的硬件计时器无法在指定时间工作、有时会出现延迟。 我怀疑当以太网线程的中断被触发时、更高优先级的以太网中断会优先于这个过程。

我看到的讨论表明可禁用以太网中断、相反、可设置一个硬件计时器以每毫秒释放一次信标、从而允许以太网线程定期检查数据包。 在此设置下、我的其他硬件计时器的延迟问题消失、但我更喜欢使用原始控制方法。 我想知道是否有办法可以将 GPIO 控制中断的优先级设置为高于以太网中断的优先级、以避免占先。 我尝试按如下方式设置硬件计时器的优先级:

HwiP_Params_init(&hwiPrms);
hwiPrms.intNum      = INTR;
hwiPrms.callback = &AepwmIntrISR;
hwiPrms.isPulse     = INTR_IS_PULSE;
hwiPrms.priority    = 0x01;
status              = HwiP_construct(&EpwmHwiObject, &hwiPrms);
DebugP_assert(status == SystemP_SUCCESS);

我将优先级从0x01设置为0x30、但它不起作用、仍然会出现同样的问题。 如何实现所需的行为?

此致、

Larry

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

     Larry、您好!

    感谢您的提问。

    假设您使用的是 AM243x-EVM、则尝试并行运行2个任务。 对吗?

    任务1. 处理以太网流量  

    任务2. 使用硬件计时器

    任务2应该具有更高的优先级。

    您可以使用:

    MAIN_TASK_PRI (最高优先级任务)

    MAIN_TASK_PRI-2 (低优先级任务)

    其中

    #define MAIN_TASK_PRI (configMAX_PRIORITATION-1)

    #define configMAX_priorities           (32)

    在您的设置中还运行着其他哪些内容?

    硬件计时器中断基于哪个计时器?

    此致

    Ashwani

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

    尊敬的 Ashwani:

    感谢您的回复、我的计时器设置如下所示、

    HwiP_Params_init(&hwiPrms);
    hwiPrms.intNum      = INTR;
    hwiPrms.callback = &AepwmIntrISR;
    hwiPrms.isPulse     = INTR_IS_PULSE;
    hwiPrms.priority    = 0x01;
    status              = HwiP_construct(&EpwmHwiObject, &hwiPrms);
    DebugP_assert(status == SystemP_SUCCESS);

    我想这是硬件时间设置、对吧? 或者我误解了、尽管我将优先级设置为0~30、但以太网中断仍会影响该计时器行为。

    此致、

    Larry

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

     Larry、您好!

    您能在 SysConfig 中显示如何启用它吗?  

    按照我的设置、我在 SysConfig 中启用计时器、并生成以下代码。

    此处的"timerTickIsr"是计时器中断的回调函数、该函数在 MAIN_task()中以高优先级(MAIN_task_PRI)运行。

    电感。 我再添加了1个任务来处理具有较低优先级的"ethernet_task"(MAIN_task_PRI-2)。

    此致

    Ashwani

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

    尊敬的  Ashwani:

    下面是我的 syscfg、我没有在 syscfg 部分启用任何计时器、但我的计时器仍然可以正常工作、这是否意味着我要使用 FreeRTOS 系统计时器:timer8作为我的硬件计时器?

    此致、

    Larry

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

     Larry、您好!

    这是否意味着我要使用 FreeRTOS 系统计时器:timer8作为我的硬件计时器?

    您能在此处提供所用变量的详细信息吗?
    ==================================

    Hwip_Params_init (&hwiPrms);
    hwiPrms.intNum = INTR;
    hwiPrms.callback =&AepwmIntrISR;
    hwiPrms.isPulse = INTR_IS_PULSE;
    hwiPrms.priority = 0x01;
    状态= Hwip_construct (&EpwmHwiObject、&hwiPrms);
    DebugP_ASSERT (STATUS == SystemP_SUCCESS);

    ==========================================

    此致

    Ashwani

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

    您使用的是 ePWM 中断

    #define CSLR_R5FSS0_CORE0_INTR_EPWM3_EPWM_ETINT_0                          (114U)

    这是否意味着我要使用 FreeRTOS 系统计时器:timer8作为我的硬件计时器?

    您可以在 syscofnig 中查看详情

    此致

    Ashwani

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

    尊敬的  Ashwani:

    明白了!根据该信息、这是否意味着我的 ePWM 和以太网都使用相同的优先级?  因为它们的"其他依赖关系"都是 TIMER8、并且 Tick 中断优先级为15、所以我只能改变线程优先级来达到目的、对吧?

    我可以更改运行时的线程优先级吗?

    此致、

    Larry

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

    Larry、您好!

    似乎是这样的。

    您可以尝试以下建议并更新测试结果。

    1、使定时器+中断优先级相同

    2.使中断任务优先级<以太网任务优先级

    此致

    Ashwani