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.

[参考译文] TMS320F28379D:比较从 CPU 运行的索引事件与 CLA

Guru**** 2540720 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1327157/tms320f28379d-comparing-the-index-event-which-is-run-from-cpu-vs-cla

器件型号:TMS320F28379D

您好、Ryan、

后续问题

如果我们从 CPU 设置 QEP 中断:  

EQEP_enableInterrupt(M1_QEP_BASE, EQEP_INT_UNIT_TIME_OUT | EQEP_INT_OVERFLOW | EQEP_INT_UNDERFLOW | EQEP_INT_INDEX_EVNT_LATCH);
Interrupt_register(M1_QEP_BASE, &M1_eQEP_ISR);

这是我的 ISR

__interrupt void M1_eQEP_ISR(void)
{
    if((EQEP_getInterruptStatus(M1_QEP_BASE) & EQEP_INT_INDEX_EVNT_LATCH) != 0)
    {
        //index event has occurred
        indexEventCountCPU_qep[0]++;
        EQEP_clearInterruptStatus(M1_QEP_BASE,(EQEP_INT_INDEX_EVNT_LATCH | EQEP_INT_GLOBAL));
    }
    if((EQEP_getInterruptStatus(M1_QEP_BASE) & EQEP_INT_UNIT_TIME_OUT) != 0)
    {
        //UTO timeout has occurred
        ;
        EQEP_clearInterruptStatus(M1_QEP_BASE,(EQEP_INT_UNIT_TIME_OUT | EQEP_INT_GLOBAL));
    }
    if((EQEP_getInterruptStatus(M1_QEP_BASE) & EQEP_INT_UNDERFLOW) != 0)
    {
        //position counter underflow event has occurred
        pcuEventCountCPU_qep[0]++;
        EQEP_clearInterruptStatus(M1_QEP_BASE,(EQEP_INT_UNDERFLOW | EQEP_INT_GLOBAL));
    }
    if((EQEP_getInterruptStatus(M1_QEP_BASE) & EQEP_INT_OVERFLOW) != 0)
    {
        //position counter overflow event has occurred
        pcoEventCountCPU_qep[0]++;
        EQEP_clearInterruptStatus(M1_QEP_BASE,(EQEP_INT_OVERFLOW | EQEP_INT_GLOBAL));
    }
    Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP5);
}

 在我的一个 CLA 任务中、我已经在运行一些 simillar:

        if (fclVars[0].ptrQEP->QFLG.all & CLA_QEP_FLAG_IEL_EVENT)
        {
            indexCountCLA[0]++;
            fclVars[0].ptrQEP->QCLR.bit.IEL = 1;
        }

        if (fclVars[0].ptrQEP->QFLG.all & CLA_QEP_FLAG_PCU_EVENT)
        {
            indexCountCLAUnderflowPCU[0]++;
            //indexCountCLAOverflowPCO[0] = 0;
            fclVars[0].ptrQEP->QCLR.bit.PCU = 1;
        }

        if (fclVars[0].ptrQEP->QFLG.all & CLA_QEP_FLAG_PCO_EVENT)
        {
            indexCountCLAOverflowPCO[0]++;
            //indexCountCLAUnderflowPCU[0] = 0;
            fclVars[0].ptrQEP->QCLR.bit.PCO = 1;
        }

是否可以同时运行这两个器件以进行比较? 我想一次性比较 CPU 和 CLA 的 QEP 性能、理想情况下应该没有区别、但我想同时验证这一点。

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

    你好、

    下面 是如何测量 CLA 任务的持续时间。 此外、此处还有另一个 供参考的主题。 在 CPU 方面、您可以通过系统配置时钟工具来测量性能。 请访问此 链接 、然后将这些信息一起进行比较。

    理想情况下应该没有太大的差异。

    此致!

    马瑞安

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

    您好、Rayn、感谢您的回复、我在这里的疑问是、我们是否能够同时从 CPU 和 CLA 访问相同的 QEP 模块?

    例如,如果我从 CPU 和 CLA 中清除 IEL 中断,会发生什么情况,哪一个会优先?

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

    CLA 和 CPU 产生的中断的来源是什么? 它们是相同的来源吗? 理想情况下、你只将 CPU 或 CLA 分配给生成中断的内容、并清除中断以避免这些同步标志清除。

    此致!

    马瑞安