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.

[参考译文] EK-TM4C1294XL:EK-TM4C1294XL

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1048484/ek-tm4c1294xl-ek-tm4c1294xl

器件型号:EK-TM4C1294XL

尊敬的先生/女士:

我正在使用 EK-TM4C1294XL 电路板 、需要从其中一条 GPIO 线路生成5MHz 信号。  我正在使用 TIMERA、并且能够通过 GPIO 线路生成1.17Mhz 信号。  我的 TIMERA ISR 只有以下两行:

G_ui32Flags = 1 - g_ui32Flags;

GPIOPinWrite (GPIO_PORTL_base、GPIO_PIN_0、 g_ui32Flags);

是否有方法生成5MHz 信号?  我假设使用120MHz 的系统时钟时、我可以这样做、但我想知道即使我必须以其他方式这样做、这是否可能。

感谢你的帮助。

Jorge Gonzalez

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

    您好!

      为了增加频率,您需要直接写入 GPIO 数据寄存器,因为 GPIOPinWrite()函数在写入数据之前执行一些移位运算来计算地址。 您 的 g_ui32Flags = 1 - g_ui32Flags 也需要一些周期来完成。  查看反汇编窗口、您可以找到生成的汇编指令并推算所需的周期数。  如果您知道要写入的确切值和寄存器地址、则可以通过如下方式直接写入寄存器来降低延迟:

     HWREG (GPIOPx_ADDR、0x55);//示例写入值为0x55的任意地址 GPIOx_ADDR

    但是、您永远无法精确地确定您将获得的频率。 要获得一致的5MHz 频率、您应生成 PWM 信号。 定时器模块可被配置为 PWM。 您所需的只是设置周期和占空比、为您提供所需的5MHz 周期性信号。

    请参阅示例 C:\ti\TivaWare_C_Series-2.2.0.295\examples\peripheral\timer\PWM.c

    无效
    GPIOPinWrite (uint32_t ui32Port、uint8_t ui8引脚、uint8_t ui8Val)

    //
    //检查参数。
    //
    assert (_GPIOBaseValid (ui32Port));

    //
    //写入引脚。
    //
    HWREG (ui32Port +(GPIO_O_DATA +(ui8引脚<< 2)))= ui8Val;

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

    非常感谢 Charles。  我将尝试您的建议。

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

    查尔斯

    我找到 了 EK-TM4C1294XL 电路板的 PWM 示例、但我可以生成的最快周期是千赫兹范围。  我想使用120MHz 系统时钟时、我可以生成5MHz、但我开始认为我无法生成。  我是对的吗?

    感谢你的所有帮助。

    Jorge Gonzalez

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

    下面是一个5MHz PWM 示例。 PWM 周期为5MHz、占空比在25%和75%之间变化。  

     

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #include <stdbool.h>
    #include <stdint.h>
    #include "inc/hw_memmap.h"
    #include "driverlib/debug.h"
    #include "driverlib/gpio.h"
    #include "driverlib/pin_map.h"
    #include "driverlib/pwm.h"
    #include "driverlib/rom.h"
    #include "driverlib/rom_map.h"
    #include "driverlib/sysctl.h"
    #include "driverlib/uart.h"
    #include "utils/uartstdio.h"
    //*****************************************************************************
    //
    // The variable g_ui32SysClock contains the system clock frequency in Hz.
    //
    //*****************************************************************************
    uint32_t g_ui32SysClock;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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

    如果您希望使用计时器模块生成 PWM、下面是另一个生成5MHz PWM 的示例。  

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #include <stdbool.h>
    #include <stdint.h>
    #include "inc/hw_gpio.h"
    #include "inc/hw_ints.h"
    #include "inc/hw_memmap.h"
    #include "inc/hw_timer.h"
    #include "inc/hw_types.h"
    #include "driverlib/gpio.h"
    #include "driverlib/interrupt.h"
    #include "driverlib/pin_map.h"
    #include "driverlib/sysctl.h"
    #include "driverlib/timer.h"
    #include "driverlib/uart.h"
    #include "utils/uartstdio.h"
    //*****************************************************************************
    //
    // The g_ui32SysClock contains the system clock frequency
    //
    //*****************************************************************************
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX