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.

[参考译文] SW-EK-TM4C123GXL:系统时钟用作30kHz

Guru**** 2478765 points
Other Parts Discussed in Thread: TM4C123GH6PM

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/689216/sw-ek-tm4c123gxl-system-clock-used-as-30khz

器件型号:SW-EK-TM4C123GXL
主题中讨论的其他器件:TM4C123GH6PM

您好,

在数据表 TM4C123GH6PM 的时钟部分、我已经了解到可以使用列出的各种选项来生成系统时钟。

但是、当我使用内部30kHz 对其进行测试时、器件被锁定(调试器)。无论如何、我使用 LM 闪存编程器将其解锁。

因此、我发布此查询、需要了解数据表中未明确提及的以下内容。

1)。 我们可以运行器件 tm4c123g 的最小频率是多少?

2)、为什么系统在30kHz 内部 OSC 下运行时被锁定。

此致  

Sajad

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

    您是指低频内部振荡器(LFIOSC)吗?

    当您说运行时、计划执行哪些操作?

    我之所以提出这一问题、是因为 LFIOSC 旨在用于节能模式、以降低功耗、并允许器件以最低电流消耗运行、直到检测到唤醒事件。 一旦唤醒事件发生、它应该加电并使用 PIOSC 或 MOSC 进行正常操作。

    至于最小频率、该答案取决于您想要执行的操作、因为许多外设会影响您可以使用的最小频率。 数据表还在223和224页上概述了 PIOSC 的可能频率。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Ralph:

    是的、我将讨论相同的 LFIOSC、其容差为50%。

    我知道、根据数据表、该振荡器适用于深度睡眠模式、但同一数据表还指出它也可以驱动系统时钟。

    我 在两天前执行的操作-挖掘计时器模块功能、我将计时器0配置为32位模式、并生成中断以使 LED 闪烁、这非常好。 我们还可以将相同的定时器 Timer0配置为16位模式,作为一对分离的定时器 A 和定时器 B。因此,我为定时器0子定时器 A 执行了一些程序写操作,以生成中断并切换 LED 状态,但当我的时钟设置为40MHz 时, 和16位计时器的值范围可以是0-65535,我看不到切换发生了,所以我将时钟配置为使用内部 OSC 30kHz, 并将我的计时器周期设置为系统时钟、以查看 LED 每秒切换次数。但我的处理器调试器会被锁定、我必须使用 LMFlash 编程器才能解锁。

    因此、我想知道为什么它会显示此类行为、或者我错过了与计时器相关的东西。

    以下是我的代码

    #include

    #include

    #include "inc/tm4c123gh6m.h"
    #include "inc/hw_memmap.h"
    #include "inc/hw_types.h"
    #include "driverlib/sysctl.h"
    #include "driverlib/interrupt.h"
    #include "driverlib/gpio.h"
    #include "driverlib/timer.h"
    uint16_t 周期;
    Int A;

    int main (空)

          SysCtlClockSet (SYSCTL_USE_OSC|SYSCTL_OSC_INT30);//被锁定
    ////////// SysCtlClockSet (SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHz|SYSCTL_OSC_MAIN);
    a = SysCtlClockGet ();
    SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);
    GPIOPinTypeGPIOOutput (GPIO_PORTF_BASE、GPIO_PIN_1);
    SysCtlPeripheralEnable (SYSCTL_Periph_TIMER0);

    TimerConfigure (TIMER0_BASE、TIMER_CFG_SPLIT_PAGE|TIMER_CFG_A_PERIODICRACASE);  

    周期= SysCtlClockGet ();

    TimerLoadSet (TIMER0_BASE、TIMER_A、周期-1);

    IntEnable (INT_TIMER0A);

    TimerIntEnable (TIMER0_BASE、TIMER_TINA_TIMEOUT);

    IntMasterEnable();
    TimerEnable (TIMER0_BASE、TIMER_A);

    while (1)



    void xyz (void)

    TimerIntClear (TIMER0_BASE、TIMER_TINA_TIMEOUT);
    IF (GPIOPinRead (GPIO_PORTF_BASE、GPIO_PIN_1))

    GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_1、0);


    其他

    GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_1、2);


    此致  

    Sajad

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

    您好 Sajad、

    [引用 USER="Sajad Raster4"]我知道数据表中的该振荡器适用于深度睡眠模式,但同一数据表中也指出它也可以驱动系统时钟。

    这种行为是相同的。 在深度睡眠模式中、它驱动系统时钟。 这是它应该这样做的唯一时候。 器件无法执行您在仅从 LFIOSC 运行时尝试执行的代码。

    您不能像描述的那样使用它来操作器件。

    如果你需要一个较低的时钟频率、那么  你应该为 SysCtlClockSet (SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHz|SYSCTL_OSC_MAIN)使用一个较高的 SYSCTL_SYSDIV_x 设置;API

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

    您好 Ralph、

    已商定,

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

    现在这是一个不同的主题、如果您在本帖子中的答案之外仍然遇到问题、我建议您按照这些思路制作新主题。

    如果配置正确、您完全可以让16位计时器的 LED 闪烁。

    查看您的代码、我建议从 TimerConfigure 调用中删除 TIMER_CFG_SPLIT_PAIR、并恢复 SysCtlClockSet 以正常使用 OSC_MAIN、然后重试。 这样做会使您看到闪烁的 LED!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Ralph、

    肯定会打开一个新的主题!

    同意您的意见,方法是删除拆分对并按照您所说的那样配置时钟,以确保闪烁 LED,但计时器不再处于16位模式。

    根据我的知识、在计时器配置中使用拆分对可以让您在16位模式下利用2个子计时器。

    此致

    Sajad