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.

[参考译文] CCS/TM4C1294NCPDT:如何计算、TM4C1294NCPDT 库函数花费了多少时间

Guru**** 2551110 points
Other Parts Discussed in Thread: TM4C1294NCPDT

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/791502/ccs-tm4c1294ncpdt-how-to-calculate-how-much-time-tm4c1294ncpdt-libraries-function-is-taking

器件型号:TM4C1294NCPDT

工具/软件:Code Composer Studio

HII

我的应用是   在 GPIO_WAKE 触发时以6kHz 采样率读取 ADC 10秒、 并使用 SPI 将该数据存储在外部闪存中、然后进入休眠模式。

再次从休眠状态进入后,它将初始化 ADC 、计时器和 SPI,然后读取 ADC 通道。

我只是想了解初始化 ADC、计时器和 SPI 所需的时间 、并建议我如何计算 每个 TM4C1294NCPDT 库函数的时间。

 

谢谢、此致

Anamika

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

    Anamika、您好!

     我认为有几种方法可以做到这一点。 让我在这里提供两个。

     使用 SysTick 计时器计算时间。 下面是一个简单示例、您也可以在驱动程序库用户指南中找到。

    uint32_t ui32Value;
    //
    配置并启用 SysTick 计数器。
    //
    SysTickPeriodSet (1000);
    SysTickEnable();
    //
    //延迟一段时间...
    //
    //
    ////读取当前 SysTick 值。
    //
    ui32Value = SysTickValueGet ();
    

    2.您可以在库函数的开头设置 GPIO 引脚、在库函数之后设置清除引脚。 观察当示波器上的引脚为高电平时的时间。  

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

    使用 SysTick 计时器计算时间。 下面是一个简单示例、您也可以在驱动程序库用户指南中找到。

    按照步骤1,我已经编写了下面的示例代码,以了解 ADC_Init()花费了多少时间。

    void ADC_Init()


    SysCtlPeripheralEnable (SYSCTL_Periph_ADC0);
    SysCtlPeripheralEnable (SYSCTL_Periph_GPIOE);
    GPIOPinTypeADC (GPIO_Porte _BASE、GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2);
    ADCSequenceConfigure (ADC0_BASE、1、ADC_TRIGGER_PROCESSOR、0);
    ADCSequenceStepConfigure (ADC0_BASE、1、0、ADC_CTL_CH3 | ADC_CTL_IE|ADC_CTL_END);
    ADCSequenceEnable (ADC0_BASE、1);



    //////////////// MAIN////////////////////////


    SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz | SYSCTL_OSC_main | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480)、120000000);

    SysTickPeriodSet (50);
    SysTickEnable();
    ADC_Init();
    ui32Value = SysTickValueGet ();
    SysTickDisable();




    当我们在 SysTickPeriodSet (50)中设置不同的周期值时,在 ADC 初始化之后,我将使用 SysTickValueGet ()获得不同的值;

    假设我已经设置了 SysTickPeriodSet(12),那么我将获得 ui32Value =6;
    如果我要设置 SysTickPeriodSet(50),则会得到 ui32Value =20;
    如果我要设置 SysTickPeriodSet(50岁),那么我将得到 ui32Value =395;

    您能解释一下该值为什么会变化;

    2.您可以在库函数的开头设置 GPIO 引脚、在库函数之后设置清除引脚。 观察当示波器上的引脚为高电平时的时间

    GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_0、1);
    ADC_Init();
    GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_0、0);

    如果我尝试执行步骤2、则无法在 CRO 中获取相应的引脚状态脉冲、但 LED 以非常低的亮度切换。


    谢谢、此致
    Anamika
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    我认为您需要将周期设置为更大的值。 如果设置为12、则表示计数器预加载了12、然后递减计数。 ADC 初始化要完成的周期将比12个多很多。 在 ADC 初始化期间、SysTick 计数器很可能多次超时、然后重新加载寄存器。 为什么在 ADC 初始化之前不要尝试使用1000或更大的值、读取计数器、然后计算预加载值与当前计数器值之间的差值?

    在 GPIO 情况下、这意味着 ADC_init 所需的时间非常短。 您不能依赖 LED。 您需要使用示波器来测量脉宽。 导通时间太短、无法为 LED 充电。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    HII Charles

    感谢您的快速响应。 通过在 SysTickTimer 中设置较大的值、我可以获得 ADC 初始化所花费的确切时间。

    谢谢、此致
    Anamika