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.

[参考译文] TM4C123GH6PM:默认时钟

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/618236/tm4c123gh6pm-default-clock

器件型号:TM4C123GH6PM

您好社区

我启动了一个简单的闪烁项目、它运行良好。

我在尝试架构时自己制作了一些代码、但没有编辑或添加任何有关时钟频率的内容。 我希望默认频率为16MHz、如 TI 文档和一些视频中所述。

在 Atmel (ATMEGA)中、如果未设置 F_CPU、则会自动以8MHZ 运行 MC、这是默认的内部振荡器。 因此、我们在这里期望我们有类似的东西。

然而、我的板以1、6MHz 的频率运行。 有什么建议吗? 在未设置任何内容时、它是否为默认值1、6Mhz? 是否无法避免设置 systime?

我使用的是一个非常简单的延迟环路。
是的、我知道我不应该这么做、我应该设置一个计时器并使用 SysTime 或中断。 是的、我知道我应该使用 API、而不是自己使用寄存器。

感谢您的回答。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    鲁斯兰
    为什么您说您的电路板以1.6MHz 运行? 您是如何测量的?
    布鲁诺
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    嗨、Bruno、

    我有一个用作延迟函数的环路、我翻转一个引脚。 然后、我使用 LED 和示波器。
    我的延迟函数假设为16MHz、为我提供62、5ns 的周期。 这意味着、如果我希望周期为300ms、我需要4800000个周期。 但我得到的300ms 周期仅为480000、比预期低10倍。
    我知道这些数字不是100%正确、因为我没有充分考虑软件执行时间和读取/写入指令。 但我对这些小的延迟不感兴趣。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您是指 Tivaware 的 SysCtlDelay()吗?

    如果是这样、第一个重要点是一个 SysCtlDelay()需要3个系统周期。 因此、要延迟300ms @16MHz、调用应该是
    SysCtlDelay (1600000)。

    请告诉我们。 您的系统是否同时发生了其他情况? 是否启用了中断?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    a)我只有自己设置的闪烁函数、没有中断或任何其他设置
    b)我不使用 Tivaware 或 SysCtlDelay 功能。

    我已经简单地连接到端口 F、然后切换 LED。 我的延迟只是一个 while 循环。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    鲁斯兰

    "只是一个 while 循环"对我来说没有意义。

    while (什么)?

    您如何知道(什么)使用一个系统时钟?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的、我有一个运行切换的主函数、在切换后调用"延迟"函数。
    delay 函数运行 while 循环、直到它到达0、形成一个数字、在该数字处它退出循环。 它将返回主引脚并再次切换引脚。
    那么、我的问题是为什么 LED 被切换为1、6Mhz、或者为什么需要3个系统周期来执行这个功能?
    由于我尚未定义系统时钟、我希望它能更快。

    我假设 while 环路采用1个系统时钟、因为它没有其他系统时钟。 这是我的问题。 我不明白为什么它不需要1个系统时钟。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    根据您的描述(在此处更好地将其作为您的循环的粘贴)、我假设您的 while 循环会减小用作计数器的变量。

    您能否理解这样一个简单的安排需要反复:

    -减少计数器
    -将新值与固定基准进行比较
    -将程序执行移动到循环开始的地址

    所有这些事情都无法在一个系统时钟中完成、是否同意?

    查看在您的"简单 while 循环"上创建的汇编代码-您的 IDE 有一个小窗口。 这里将有一些说明。 然后、出于好奇、您可以查找 ARM 文档、并检查每条机器指令需要多少个系统时钟。 从上面的注释中可以看出、整个循环需要10个时钟周期、这是非常合理的。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我不喜欢发布代码、抱歉。

    你是对的。 当我进行调试时、我看到 R15执行两条命令、读取和比较、并且 R0已更改为计数器值、这将是一个写入周期。

    这一切都是完全有意义的、我不明白为什么我会如此困惑。

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

    很高兴您的问题得到了解决!

    [引用 user="Ruslan -"]我不喜欢发布代码,抱歉。

    没关系-但这可能会使获得帮助变得更加困难... 相信我、一个 while 循环没有那么多不能在这里公开披露的火箭科学...

    请允许我们总结到此帖子、如下所示:

    -默认时钟确实为16MHz

    您说过您不使用 TivaWare -您应该! 如果您计划使用 TM4C 器件、您真的应该!

    谢谢

    布鲁诺

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

    我之所以使用 TIvAware 是有充分理由的。
    如果您阅读了我的原始帖子、您将看到我提到了它。 我知道我应该使用它,我不应该:-)
    顺便说一下、我的 while 循环花费687us、我在 Keil 中发现了一些非常令人兴奋的工具。 我还将设置一个逻辑分析仪

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

    [引用 user="Ruslan -"]我没有使用 TIvaware 是有充分理由的。

    虽然这是"声称的"--但值得注意的是,"没有任何"正当理由"是合理和/或支持的。

    我敢打赌、您(奇异)的理由"反对"不能与"太多"的理由"竞争!"    (使用冗长、经过试用、真实、经过测试的 API)

    "从"论坛群"(通过拒绝 API)中筛选自己几乎可以保证"延迟您的开发、增加极大的沮丧、并提供一些下游的"见解"!"     在您的"好理由"通过后、 "文件、技术支持和及时交付"的现实-所有(据称)"好理由"的结果-将证明(很少)对(任何)"新努力"的帮助/安慰!

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

    [引用 USER="CB1_MOBILE"]

    拉斯兰-
    我之所以使用 TIvAware 是有充分理由的。

    虽然这是"声称的"--但值得注意的是,"没有任何"正当理由"是合理和/或支持的。

    我敢打赌、您(奇异)的理由"反对"不能与"太多"的理由"竞争!"    (使用冗长、经过试用、真实、经过测试的 API)

    [/报价]

    *喜欢*!

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

    [引用 user="Bruno Saraiva">根据您的描述(在此处更好地将其作为您的循环的粘贴)、我假设您的 while 循环会减少用作计数器的变量。

    您能否理解这样一个简单的安排需要反复:

    -减少计数器
    -将新值与固定基准进行比较
    -将程序执行移动到循环开始的地址

    或者、根据确切的代码、良好的编译器可以完全消除它。

    Robert

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

    [引用用户="Bruno Saraiva"]

    拉斯兰-
    我不喜欢发布代码、抱歉。

    没关系-但这可能会使获得帮助变得更加困难... 相信我、一个 while 循环没有那么多不能在这里公开披露的火箭科学...

    [/报价]

    实际上、Ruslan、如果您认为 while 循环过于专有、那么您将处于错误的工作线中。

    Robert

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

    [引用 user="Robert Adsett"]如果您认为 while 循环过于专有,则您的工作属于错误的行。[/quot]

    或者-这是"合理的"(另一个)"合理的理由!"    (或不)