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.

[参考译文] TMS320F2800155-Q1:想知道执行时间

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1607946/tms320f2800155-q1-wanted-to-know-execution-time

器件型号: TMS320F2800155-Q1

你(们)好

我想知道 ADC 的正常运行时间是多久  

 adcStruct[AIP_IP1].ADC_BUFFER = ADC_readResult (ADCARESULT_BASE、ADC_SOC_NUMBER0);

我在由 ePWM 触发器触发的 ISR 中调用此函数。

我得到了 2.98 微秒的排泄时间..但我觉得它的两个高..

image.png

 

附加相同的设置

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

    SYS 配置设置  

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

    kindy 回复 asap ...因为我正在尝试执行一些事情

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

    尊敬的 Muntaha:

    读取 ADC 结果不应花费 2.98uS。  这是很长的时间。  读取寄存器位置只需几个 CPU 周期。  ISR 中是否执行了其他可能有助于实现这一点的内容?

    此致、

    Joseph

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

    你好。我也在示例代码中尝试过。 还有这段时间它需要花费多少时间?...我从 ISR 中删除了所有的内容...

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

    我检查了触发多个 SoC_ePWM 的 ADC 示例代码  

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

    尊敬的 Muntaha:

    让我回到您的身边。  我需要运行此示例、看看我是否再现了您观察到的内容。  请留出一两天时间、因为我目前没有可用的设置。

    此致、

    Joseph

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

    尊敬的 Muntaha:

    示例 ADC_EX10_MULTIUL_SoC_EPWM 具有以下 ISR:

    __interrupt void adcA1ISR(void)
    {
        //
        // Store results
        //
        adcAResult0 = ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER0);
        adcAResult1 = ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER1);
        adcAResult2 = ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER2);
        adcCResult0 = ADC_readResult(ADCCRESULT_BASE, ADC_SOC_NUMBER0);
        adcCResult1 = ADC_readResult(ADCCRESULT_BASE, ADC_SOC_NUMBER1);
        adcCResult2 = ADC_readResult(ADCCRESULT_BASE, ADC_SOC_NUMBER2);
    
        //
        // Clear the interrupt flag
        //
        ADC_clearInterruptStatus(ADCA_BASE, ADC_INT_NUMBER1);
    
        //
        // Check if overflow has occurred
        //
        if(true == ADC_getInterruptOverflowStatus(ADCA_BASE, ADC_INT_NUMBER1))
        {
            ADC_clearInterruptOverflowStatus(ADCA_BASE, ADC_INT_NUMBER1);
            ADC_clearInterruptStatus(ADCA_BASE, ADC_INT_NUMBER1);
        }
    
        //
        // Acknowledge the interrupt
        //
        Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP1);
    }

    当中断触发时、ISR 例程会在堆栈中移动、因此 ISR 中使用的所有变量和函数也都将复制到堆栈中。  对于执行时间、复制变量和函数会影响周期时间。  不要读取所有 6 个转换结果、而是只尝试其中一个。  这应该会缩短您正在观察的执行时间。

    此致、

    Joseph

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

    我在此示例代码中切换了 GPIO、只执行时间相同...

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

    我曾经试过一次

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

    我尝试使用相同的示例代码、使用一个 ADC 转换 only..in

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

    尊敬的 Muntaha:

    GPIO 是否在 ADC_readResult () 函数之前切换、并在它之后立即切换?  如果 ISR 中只有一个 GPIO 切换完成、则 ADCA 和 ADCC 中的其他 SOC 必须在 GPIO 再次切换之前完成转换。  如何在代码中放置 GPIO 切换可以解释您看到的内容。

    谢谢、

    Joseph

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

    __ interrupt void adcA1ISR (void)

    //
    //存储结果
    //

     GPIO_writePin (myGPIO28、1);
    adcAResult0 = ADC_readResult (ADCARESULT_BASE、ADC_SOC_NUMBER0);

    //
    //清除中断标志
    //
    ADC_clearInterruptStatus (ADCA_BASE、ADC_INT_number1);

    //
    //检查是否发生溢出
    //
    if (true == ADC_getInterruptOverflowStatus (ADCA_BASE、ADC_INT_number1))

    ADC_clearInterruptOverflowStatus (ADCA_BASE、ADC_INT_number1);
    ADC_clearInterruptStatus (ADCA_BASE、ADC_INT_number1);
    }

     GPIO_writePin (myGPIO28、0);

    //
    //确认中断
    //
    INTERRUPT_CLEARACKGROUP (INTERRUPT_ACK_GROUP1);
    }

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

    尊敬的 Muntaha:

    如果您在读取 ADC 结果寄存器后立即移动 GPIO_writePin (myGPIO28、0)、而不是在清除中断后立即移动、您是否仍会看到 GPIO 持续时间约为 2.98uS?  如果检查并清除中断状态是占用大部分 GPIO 时间的转换、则当前存在会生成中断、而该中断不是读取结果周期的一部分。

    尝试仅在一个 ADC 上运行一个 SOC 转换、查看是否检查和清除中断会缩短总体周期时间。

    此致、

    Joseph