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.

[参考译文] TMS320F28P650DH:有关 FreeRTOS 阻塞 C2000中断的问题

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1386667/tms320f28p650dh-question-about-freertos-blocking-c2000-interrupt

器件型号:TMS320F28P650DH

工具与软件:

hi champs、

我向客户提出这个问题。

使用 FreeRTOS 时、如何使用 FreeRTOS 来控制 C2000上的中断?

 在 ARM 设备中、FreeRTOS 无法阻止优先级过高的中断。 F28P65x 是否具有类似的逻辑? 谢谢!

Julia

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

    尊敬的 Julia:

     FreeRTOS 的内核节拍中断配置为使用 优先级最低的 CPU 计时器2中断、不会阻止任何其他系统中断。 该文件在 FreeRTOS 端口中配置、因此适用于所有支持 FreeRTOS 的 C2000器件。

    谢谢!

    Arnav

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

    我的项目目前在 F28P65上使用 FreeRTOS 系统、AD 中断仍在 ISR 函数中执行、其余中断由信号灯执行、后者会将中断的执行内容封装到任务中、具体框架如下所示、但现在容易出现看门狗超时芯片复位的现象。 当 AD 中断时、看门狗将向看门狗馈送信号。 AD 频率为32k、操作系统节拍频率为1kHz。 原因是什么? 谢谢!

    __interrupt void ADC_ISR (void)


    volatile uint16_t tempPIEIER = HWREGH (PIECTRL_BASE + PIE_O_IER1);
    IER |= M_INT1;
    IER &= MINT1;
    HWREGH (PIECTRL_BASE + PIE_O_IER1)&= MG1_1;
    interrupt_clearACKGroup (0xFFFFU);
    __ asm (" NOP");
    EINT;

    代码;
    serviceWatchdog;
    ADC_clearInterruptOverflowStatus (ADCA_BASE、ADC_INT_number1);
    ADC_clearInterruptStatus (ADCA_BASE、ADC_INT_number1);
    interrupt_clearACKGroup (INTERRUPT_ACK_GROUP1);
    颜色;
    HWREGH (PIECTRL_BASE + PIE_O_IER1)= tempPIEIER;
    }

    __interrupt void cpuTimer0ISR (void)

    basetype_t xHigherPriorityTaskWoken = pdFALSE;
    xSemaphoreGiveFromISR( binarySem1Handle,&xHigherPriorityTaskWoken );
    interrupt_clearACKGroup (INTERRUPT_ACK_GROUP1);
    portYIELD_FROM_ISR( xHigherPriorityTaskWoken );
    }

    void cpuTimer0_ISR_Task (void * pvParameters)

    for (;;)

    if (xSemaphoreTake (binarySem1Handle、portMAX_delay)=pdTRUE)

    代码;
    }
    }
    }


    _interrupt void eCAN_ISR0 (void)

    basetype_t xHigherPriorityTaskWoken = pdFALSE;
    xSemaphoreGiveFromISR( binarySem2Handle,&xHigherPriorityTaskWoken );
    interrupt_clearACKGroup (interrupt_ACK_group9);
    portYIELD_FROM_ISR( xHigherPriorityTaskWoken );
    }
    void ECANA_isr0_Task (void * pvParameters)

    for (;;)

    if (xSemaphoreTake (binarySem2Handle、portMAX_delay)=pdTRUE)

    代码;
    }
    }
    }


    __interrupt void Sci_Rx 40r (void)

    basetype_t xHigherPriorityTaskWoken = pdFALSE;
    xSemaphoreGiveFromISR( binarySem4Handle,&xHigherPriorityTaskWoken );
    sClearSciIntFlag();
    interrupt_clearACKGroup (interrupt_ACK_group9);
    portYIELD_FROM_ISR( xHigherPriorityTaskWoken );
    }

    void Scia_Rx_ r_Task( void * pvParameters )

    for (;;)

    if (xSemaphoreTake (binarySem4Handle、portMAX_delay)=pdTRUE)

    代码;
    }
    }
    }

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

    尊敬的 Wang:

    尝试理解此处的问题。 您的问题与 FreeRTOS、中断或看门狗相关?

    我的 AD 中断仍然在 ISR 函数中执行、其余中断由信标完成、信标将中断的执行内容封装到任务中、具体框架如下所示、但现在容易出现看门狗超时芯片复位的现象

    我不能理解你的意思上面?  
    AD 中断在 ISR 中执行?
    中断由信标完成?   

    请详细说明您的问题、以便我更好地理解这一点

    谢谢